cordova-plugin-whitelist在Android上可以工作但在iOS上无法工作(Phonegap Build)

6

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

我已经尝试了许多不同的构建配置,以防止某个版本的Cordova出现问题,但是我完全没有办法让它工作。我之前在其他Phonegap/Cordova应用程序中也遇到过类似的问题,但是通过白名单插件/CSP/access规则解决了它。

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

2个回答

4
您可能需要在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替换为您的项目名称即可。


1
此外,看起来这段代码(标记为1.1.0版本)最近已被重命名/更改,详见提交记录,距今9天。也许可以尝试使用1.1.0-dev版本? - broinjc
https://www.npmjs.com/package/cordova-plugin-whitelist 的最新版本已经有6个月没有更新了(v1.0.0)。 - broinjc

0

链接无法使用。404。 - Rohit Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接