NSURL 无法在 Web 视图中加载 -9824

Posted

技术标签:

【中文标题】NSURL 无法在 Web 视图中加载 -9824【英文标题】:NSURL fails to load in web view -9824 【发布时间】:2016-09-18 03:00:37 【问题描述】:

我正在制作一个基于 isbn 返回书评的应用。我正在尝试在 Web 视图中加载 Goodreads 评论小部件,但出现两个错误:

CFNetwork SSLHandshake failed (-9824)NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

我尝试了其他几个网址并得到相同的结果。

这是我调用 url 的代码:

override func viewDidLoad() 
        super.viewDidLoad()

        let url = NSURL (string: "https://www.goodreads.com/api/index#book.show_by_isbn");
        let requestObj = NSURLRequest(URL: url!);
        webView.loadRequest(requestObj);

在 info.plist 中,我在 Exception Domains 字典中有一个 goodreads.com 字典。我包含在 goodreads.com NSIncludesSubdomains, NSExceptionsAllowsInsecureHTTPLoads, and NSExceptionsMinimumTLSVersion(设置为 TLSv1.1)

有什么明显的地方我出错了吗?域名错了吗?


编辑:对于以后阅读本文的任何人,我想我已经解决了。这个页面 (Does App Store reject submission if NSAllowsArbitraryLoads set to YES?) 帮助很大。

如果您使用NSAllowsArbitraryLoads,App Store 将拒绝您的应用。但是,他们将允许NSAllowsArbitraryLoadsInWebContent

根据 Apple 开发者指南,

"将此键的值设置为 YES 以获得 ATS 政策的豁免 您的应用程序的 Web 视图,而不会影响 ATS 规定的安全性 你的 NSURLSession 连接。为了支持旧版本的 ios 和 macOS(早于 iOS 10),您可以使用此密钥并仍然手动配置 ATS。去做 因此,将此键的值设置为 YES 并配置 NSAllowsArbitraryLoads 地铁。如果您将此密钥添加到您的 Info.plist 文件,然后,无论密钥的值如何,ATS 都会忽略 NSAllowsArbitraryLoads 键的值。”

【问题讨论】:

你检查过这个帖子***.com/questions/30720813/… TLS 1.1 太低了。 我尝试了 1.2 仍然收到同样的错误。 @Natarajan 我以前读过那篇文章,但我没有找到满意的答案。有什么我错过的吗? 【参考方案1】:

尝试在您的 project.plist 中添加 NSAppTransportSecurity 并检查您的 url 请求是否有效。

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

【讨论】:

是的,我已经研究过这个选项。它正确加载了 url,但我读过 NSAllowsArbitraryLoads 是 App Store 不接受的黑客攻击。我想最终把这个应用程序放在商店里,所以我正在寻找其他选择......不过谢谢你的建议。【参考方案2】:

如果您想允许特定域使用这种方式,它比允许所有域更安全

  <key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

修复很容易,添加下面的行就可以了。

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

我已经附上了我测试过的项目

LINK TO THE PROJECT

【讨论】:

对,在我原始帖子的最后一部分,我解释说我已经在我的 info.plist 中输入了这个。我有 goodreads.com 代替 yourserver.com。尽管我的 info.plist 中有这些错误,但我仍然会收到这些错误。 @OliviaMurphy 您可以将您的 plist 上传到 Dropbox 并分享链接吗? 这里是有问题的 info.plist 部分的图片:drive.google.com/file/d/0B813Fyr_yfVSUVhsVVlXX2hNOVU/view @OliviaMurphy 等一下 @OliviaMurphy 我需要 plist 文件而不是图像【参考方案3】:

您还必须确保在 Targets > Capabilities 中禁用 App Sandbox。 Xcode 自动为新生成的项目启用它。

【讨论】:

以上是关于NSURL 无法在 Web 视图中加载 -9824的主要内容,如果未能解决你的问题,请参考以下文章

Web 视图无法加载特定 URL(Web 工具包错误域 102)

获取 html 代码并编辑然后加载到 web 视图

使用 swift 将本地 html 加载到 UIWebView

将文件 url 从 documentDirectory 加载到表视图

由于默认浏览器,Android 无法在 web 视图中实现 facebook 评论

表视图错误致命错误:加载文件时索引超出范围