【问题标题】:cordova-plugin-whitelist working on Android but not iOS (Phonegap Build)cordova-plugin-whitelist 适用于 Android 但不适用于 iOS (Phonegap Build)
【发布时间】:2015-10-14 16:17:53
【问题描述】:

我正在开发一个用 Cordova 封装并使用 Phonegap Build 构建的 JavaScript 应用程序。我们在构建中包含来自 npm 的 cordova-plugin-whitelist,并在我们的 config.xml 中添加了 <access origin="*" />,并在我们的 index.html 中添加了一个开放的 CSP (<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">)。该应用程序在 Android 上运行良好,并且可以毫无问题地与我们的服务器通信,但在 iOS 上,所有请求都会立即失败,就好像白名单插件不允许流量通过一样。

我尝试了多种不同的构建配置,以防特定版本的 Cordova 出现问题,但根本无法使其正常工作。过去我在使用其他 Phonegap/Cordova 应用程序时遇到过类似问题,但能够通过白名单插件/CSP/访问规则解决。

这个问题也很难调试,因为 Safari 开发者工具无法连接到 iOS 设备,我不得不提醒我看到的响应。看起来返回的响应有一个状态码 0 和一个空正文,我假设这只是意味着无法访问。

【问题讨论】:

    标签: android ios cordova phonegap-build cordova-plugins


    【解决方案1】:

    您可能需要在 Content-Security-Policy 中设置 connect-src,例如:

    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://YOUR_HOST">
    

    此外,对于 Xcode 7 / iOS 9,如果您不使用 SSL,您将需要调整 ATS 设置以允许连接到非 https 后端:

    以下是更改应用信息 .plist 的工作示例:

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>
    

    (请注意,您也可以将其配置为选择性地允许非 https 连接)。

    下面是一个脚本,您可以将其用作 iOS 的预构建挂钩来自动执行此操作:

    #!/bin/bash
    echo "Adjusting plist for App Transport Security exception."
    val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" platforms/ios/PROJECTNAME/PROJECTNAME-Info.plist 2>/dev/null) echo "Done"
    

    只需将 PROJECTNAME 替换为您的项目名称即可。

    【讨论】:

    【解决方案2】:

    将您的访问标签更改为:

    <access origin="https://yourdomain.com" requires-certificate-transparency='false' allows-arbitrary-loads-in-web-content='true'/>
    

    它将相应地更新 NsAppTransportSecurity 条目中的 Info.Plist 文件。

    来源:https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/#ios-whitelisting

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多