簡體   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