Android Phonegap应用程序未连接到Internet

时间:2014-10-11 18:01:12

标签: cordova connection whitelist

我在Cordova 3.4上运行了一个Phonegap应用程序。 Android的开发版本最近已停止连接到任何服务器。我检查了我们的白名单,并且可以访问必要的域名。我甚至尝试将所有域名列入白名单

<access uri="*" subdomains="true" />

但我仍然没有运气。任何有关此问题的其他原因的建议将不胜感激。非常感谢。

2 个答案:

答案 0 :(得分:1)

A)标准的东西;执行以下所有操作

  1. 添加白名单插件:
  2.   

    $ cordova插件添加cordova-plugin-whitelist

    1. config.xml 中,添加以下内容:
    2. <access origin="*" />
      <allow-intent href="http://*/*" />
      <allow-intent href="https://*/*" />
      <allow-navigation href="http://*/*" />
      <allow-navigation href="https://*/*" />
      
      1. index.html 中添加Content Security Policy,如下所示:
      2. <meta http-equiv="Content-Security-Policy" content="default-src *; script-src * 'unsafe-eval' 'unsafe-inline'; connect-src *; img-src *; style-src * 'unsafe-inline' ; media-src *">    
        

        B)也许这也是

        如果你的应用程序此时仍未连接到Android设备上的互联网,我建议删除并重新添加Android平台

        $ cordova platform rm android  
        $ cordova platform add android
        

        C)https和非调试模式

        如果您使用的是https,并且 AndroidManifest.xml 中有android:debuggable="false",则可以解决此问题...尝试使用http而不是https来查看是否是这种情况

        我希望有所帮助 - 祝你好运!

答案 1 :(得分:0)

所以,经过几天的讨论并按照上面的所有建议(包括将我的android平台和插件更新到更新的版本)之后,我能够诊断出这个问题。

<强> TL; DR; 在我的负载均衡器上未正确设置中间证书是一个问题。上传链证书后,它似乎运作良好。

长篇故事:

首先,让我解释一下我的设置 - 我在HTTPS工作,我的应用程序托管在AWS Elastic Load Balancer(ELB)之后。我传递了一些敏感信息,因此我无法在HTTP中工作,而且我不想使用android:debuggable="true"来暴露我的所有代码(并不是一个坚定的攻击者赢了也没找到方法为什么要这样做容易吗?)。

要诊断问题,我使用logcat(adb)在应用程序运行时查看设备的日志。这有点棘手但是我遵循以下步骤来确定这是问题所在:

  • 运行adb logcat -c来清理缓冲区 - 使其更容易理解
  • 再次运行adb logcat并进行搜索以查找应用程序的进程ID。我实际上是将输出定向到文件并使用baretailpro查看日志并搜索我的应用程序名称(反向命名空间,类似于 com.companyName.appName 。我假设可以使用grep。你是寻找以下内容:
      

    I / ActivityManager(894):为活动com.companyName.appName / .MainActivity

    启动proc 11461 com.companyName.appName / u0a110
  • 请注意,这是活动经理启动您的应用的地方。此消息包含应用程序的进程ID(上面的11461)
  • 接下来,在您的日志上再次搜索,这次查找进程ID。我只关注它,除了特别是在这里,因为这是一个证书问题,你可以寻找(例如11461. *证书)。这是告诉您有关证书问题的信息:
      

    I / X509Util(11461):无法验证证书链,错误:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。

之后,很容易谷歌(上面的文字)并发现此错误与webview不相信/能够验证您的证书。可以在此链接android SSL - certificate not trusted中找到解释。

现在我知道了这个问题,我可以通过将私钥,公钥和链证书上传到我的ELB来解决问题:Create ELB certificate with Chain