【问题标题】:Phonegap / Cordova ChildBrowser won't run Twitter web intents (SSL?)Phonegap / Cordova ChildBrowser 不会运行 Twitter 网络意图(SSL?)
【发布时间】:2012-06-07 14:10:23
【问题描述】:

我正在尝试将 Twitter 共享功能集成到我的 Android PhoneGap 应用程序中,而不是重新实现控件来缩短 URL 和跟踪推文长度,我想我会在 https://twitter.com/intent/... 使用他们预制的网络意图

所以我试图在 ChildBrowser 窗口中启动一个类似 https://twitter.com/intent/tweet?text=Hello 的 URL,这样我就可以让 Twitter 的界面接管。用户可以使用他们的凭据登录,一旦他们登录,来自 URL 参数的文本就会出现在 Tweet 框中。

这行不通。当我使用 http://twitter.com/intent/... 而不是 https://twitter.com/intent/... 时,ChildBrowser 会显示登录屏幕,但是一旦用户提交他们的凭据,屏幕就会变白。我怀疑这是因为 Twitter 切换到了 HTTPS。

我通过尝试简单的window.open 而不是window.plugins.childBrowser.showWebPage 来确认是这种情况。在 Android 上使用本机浏览器时,我对 HTTP / HTTPS 没有任何问题。但是,本机浏览器提示我接受未经验证的安全证书。我怀疑这是 ChildBrowser 的问题 - 它不知道如何处理该提示。

使用本机浏览器弹出窗口根本不是一种选择:用户需要能够在点击“Tweet”或“Follow”等后退出进程,但 Android 设备上的“返回”按钮只是移动由于他们的意图,历史倒退到 POST 动作。然后,它会从头开始重新启动应用程序,而不是让您回到原始状态。

如何配置 ChildBrowser/我的 Android Phonegap 应用程序以覆盖 Twitter 上的 SSL 问题,以便我可以在 Childbrowser 中运行 Web Intent?

相关代码为:

base="https://twitter.com/intent/tweet?text="; 
URL=base+encodeURIComponent("it works!"); 

// works, but asks to accept a certificate
window.open(URL);

// blank white page
window.plugins.childBrowser.showWebPage(URL, { showLocationBar: true });

我的cordova.xml 文件的白名单配置如下:

<access origin="http://127.0.0.1*"/> <!-- allow local pages -->

...我不怀疑这应该是个问题。但是,交换 origin=".*" 的基本测试没有产生任何行为变化。

我还检查了 Twitter 意图登录页面的 HTTP 和 HTTPS 标头。似乎没有任何异常 - 它们是相同的,除了 HTTPS 的 Strict-Transport-Security 标头,它可以在其他地方(例如 Github)使用。

请帮忙!

【问题讨论】:

标签: android twitter cordova childbrowser


【解决方案1】:

ChildBrowser 不受白名单约束。白名单仅用于防止 PhoneGap 主应用程序在受信任域之外运行代码。

我相信,如果您从 Android 获取最新的 ChildBrowser 代码,您将不会再遇到此问题。我们最近进行了一些更改,使其更加强大。

另外,Libby 有一个很好的集成 Twitter 和 ChildBrowser 的教程。

http://www.mobiledevelopersolutions.com/home/start/twominutetutorials/tmt5p1

【讨论】:

  • 我今天刚刚下载并连接了 ChildBrowser,因此代码与预期一样是最新的。我会尝试重新下载并换掉,但我很确定 SSL 问题会持续存在。我熟悉TMT教程。这绝对是最佳实践,但与简单地使用 Twitter 的现成推文工具相比,它需要做更多的工作。
  • 奇怪,我无法使用您发布的确切代码重现您的问题。
  • 试试这个:在您的 deviceReady 监听器中,添加以下代码:window.plugins.childBrowser.showWebPage("https://twitter.com/intent/follow?screen_name=stickbyatlas", { showLocationBar: true }); 这一切都归结为 - 在 ChildBrowser 中是否会为您加载该 URL?
  • 另外 - 显然,您不能复制和粘贴我在上面发布的代码行。我刚刚尝试从上面的评论中复制https://twitter.com/intent/follow?scre‌​en_name=stickbyatlas 并将其粘贴到网络浏览器中,它会插入一些奇怪的字符。您必须手动输入...
  • 修复 URL 后,我看到以下内容:dl.dropbox.com/u/887989/twitterintent.png 所以现在对我来说一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多