有趣的是,我只是研究同樣的問題。看起來像在iOS 11中,事情受到更多限制。我在這裏回答WKWebView。
在本質上,你需要做的:
- 地方自定義的授權碼到WKWebView插件代碼
- 負載資源直接從科爾多瓦(然後WKWebView事件被正確觸發)
- 禁用ATS(NSAppTransportSecurity)
詳細描述
你應該做的細節如下(如果你使用的是WKWebView):
你需要修改CDVWKWebViewEngine.m(插件代碼)。您需要添加有:
- (void)webView:(WKWebView *)webView
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge
*)challenge completionHandler:(void (^)
(NSURLSessionAuthChallengeDisposition
disposition, NSURLCredential *credential))completionHandler {
SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
completionHandler(NSURLSessionAuthChallengeUseCredential,
[NSURLCredential credentialForTrust:serverTrust]);
}
但是,請注意 - 當WKWebView被初始化(即通過科爾多瓦框架加載)這僅適用。
因此您還需要從API的那個URI加載您的應用程序。我認爲你有本地網絡(自簽名證書),所以這不應該是一個問題。如果你將在本地加載應用程序(即從index.html),那麼這將無法正常工作!
另外,你需要禁用ATS的iOS應用*的.plist設置文件,如:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
這是我的作品。
其他資源:
Disclamer:禁用證書應該避免檢查,只有在你有很好的理由或其他限制的情況下才使用。你仍然有通信安全,但你沒有信任。因此中間人的攻擊是可能的!如果您決定使用此選項,則還應使用證書鎖定來使事情更安全。
不幸「allowsAnyHTTPSCertificateForHost」的設備11再沒有作品科爾多瓦(WKWebView)。 –