繁体   English   中英

cordova-plugin-whitelist适用于Android,但不适用于iOS(Phonegap Build)

[英]cordova-plugin-whitelist working on Android but not iOS (Phonegap Build)

我正在使用Cordova封装并使用Phonegap Build构建的JavaScript应用程序。 我们在构建中包括了npm中的cordova-plugin-whitelist ,并在config.xml和开放的CSP中添加了<access origin="*" /><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 /访问规则解决它。

这个问题也很难调试,因为Safari开发人员工具无法连接到iOS设备,并且我必须提醒我所看到的响应。 似乎返回的响应具有状态代码0和一个空主体,我认为这意味着不可访问。

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

将访问标签更改为:

<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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM