iOS 10 ATS Compliance 的 WKWebView http -> https 重定向

WKWebView http -> https redirection for iOS 10 ATS Compliance

iOS 10 将 https 强加给我们,完全破坏了我正在开发的应用程序。该应用程序部分是 RSS reader。我们从 RSS 提要中获得的 URLs 通常是 HTTP URLs,用于站点和元数据图像。这些 HTTP URLs 在 safari 和 SFSafariViewController 中可用时被重定向到 https 版本。但是,当使用 WKWebView 时,不会发生这种重定向。 OS 完全阻止非 https 加载。如果我尝试通过在 URL 中将“http”替换为“https”来解决这个问题,网站通常会在从 HTTP CDN 加载图片、CSS 和 JavaScript 时中断,并且这些请求也被阻止了。如何在 WKWebView 中获得与 Safari 中相同的行为?有我可以设置的配置吗?对我来说,Apple 会进行此更改并使用 WKWebView.

破坏客户端,这对我来说似乎很疯狂

P.S。 Facebook 能够以某种方式解决这个问题。我不知道它是否被严重黑客攻击 SFSafariViewController 或者他们以某种方式使网络视图正常工作。有谁知道他们是如何做到这一点的?

在 Apple 的文档中仔细研究后 here 我找到了新的 NSAllowsArbitraryLoadsInWebContent 密钥。这解决了 WKWebView 的问题,尽管令人沮丧地通过 http 获取图像仍然存在问题。我可能最终不得不通过我自己的服务器代理它们。

使用NSAllowsArbitraryLoads。密钥仍然可用;苹果只是想确保你有充分的理由使用它。在您的应用程序中显示外部内容符合这样的条件。一旦 Apple ATS 规则生效,您将需要解释为什么需要它,以及为什么 NSAllowsArbitraryLoadsInWebContent 还不够。由于您已经有了答案,因此让您的应用程序通过 NSAllowsArbitraryLoads.

的审核流程应该没有问题

请注意,Apple has postponed ATS requirement 不会在 2017 年 1 月生效。

虽然您可以简单地使用 NSAllowsArbitraryLoads' 来全局关闭传输安全,但这并不理想,并且更有可能在没有真正可靠的理由的情况下被 Apple 拒绝。

在 iOS 9 和 iOS 10 中提供正确行为的更好的解决方案是将 NSAllowsArbitraryLoadsNSAllowsArbitraryLoadsInWebContent 都放在 info.plist。因为 iOS 9 不承认 NSAllowsArbitraryLoadsInWebContent,它会尊重 NSAllowsArbitraryLoads,有效地关闭 iOS 9 设备的传输安全。

在 iOS 10 中,如果您包含 NSAllowsArbitraryLoadsInWebContent'key,iOS 将忽略 NSAllowsArbitraryLoads 设置,仅在您应用的 Web 视图中禁用应用传输安全.这将意味着您的应用程序在 iOS 10 中更加安全,我相信这将使苹果更有可能排除您使用应用程序传输安全例外的理由

编辑:我的以下回答不正确。它不适用于 return XSL 的网站,例如托管在 feedburner 上的 RSS 提要。我无法为此找到解决方案,所以不幸的是我要返回启用任意负载。


我们的应用程序还具有通用 RSS reader 功能。我们希望使用 ATS 来提高安全性并与 Apple 保持一致。此外,禁用它被许多企业客户视为高风险。因此,启用 "Allow Arbitrary Loads" 对我们来说不是一个有效的选项。

目前,我们通过做两件事充分利用了这一点: 1. 启用 Allow Arbitrary Loads in Web Content。我们还有一个显示客户内容的通用网络视图。 2. 使用 non-visible WKWebView 加载 RSS 提要,然后从网页中提取 HTML 并解析 XML。我已经为此创建了一个要点 here

不知何故,这个可怕的 hack 似乎符合我们的目的,就目前而言。

如果有一个解决方案可以让您在 URL 会话级别覆盖传输安全性,那就太好了。