iOS 10已经将https强加给我们,完全破坏了我正在开发的应用程序。该应用程序部分是RSS阅读器。我们从RSS源获取的URL通常是HTTP URL,包括站点和元数据图像。这些http网址在safari和SFSafariViewController中可用时被重定向到https版本。但是,使用WKWebView时,不会发生此重定向。操作系统完全阻止非https加载。如果我试图通过在URL中交换“https”的“http”来破解这个问题,那么当网站从http CDN加载他们的图像,CSS和JavaScript时,这些网站通常会被破坏,这些请求也会被阻止。如何在Safari中看到WKWebView中的相同行为?我可以设置配置吗?对我来说,Apple会做出这样的改变并且只是使用WKWebView打破客户端,这似乎很疯狂。
P.S。 Facebook能够以某种方式解决这个问题。我不知道它是否是一个被严重攻击的SFSafariViewController,或者他们以某种方式使Web视图工作。有谁知道他们是如何完成这个的?
答案 0 :(得分:3)
使用NSAllowsArbitraryLoads
。密钥仍然可以使用; Apple只是想确保你有充分的理由使用它。在应用程序中显示外部内容符合条件。一旦Apple ATS规则生效,您需要提供解释为什么需要它,以及为什么NSAllowsArbitraryLoadsInWebContent
是不够的。既然您已经有了答案,那么使用NSAllowsArbitraryLoads
让您的应用程序通过审核流程应该没有问题。
请注意,Apple has postponed ATS requirement将于2017年1月生效。
答案 1 :(得分:0)
在Apple的文档中挖掘here之后,我找到了新的NSAllowsArbitraryLoadsInWebContent
密钥。这解决了WKWebView的问题,但令人沮丧的是通过http获取图像仍然存在问题。我可能最终不得不通过自己的服务器代理它们。
答案 2 :(得分:0)
虽然您可以简单地使用NSAllowsArbitraryLoads
'为了全球关闭运输安全,这并不理想,并且更有可能被苹果公司拒绝而没有真正坚实的理由。
在iOS 9和iOS 10中提供正确行为的更好的解决方案是将NSAllowsArbitraryLoads
和NSAllowsArbitraryLoadsInWebContent
放在info.plist中。由于iOS 9不承认NSAllowsArbitraryLoadsInWebContent
,因此它会尊重NSAllowsArbitraryLoads
,从而有效地关闭iOS 9设备中适用于您应用的传输安全性。
在iOS 10中,如果您添加NSAllowsArbitraryLoadsInWebContent'key
,iOS将忽略NSAllowsArbitraryLoads
设置,仅在应用中的网络视图中停用应用传输安全性。这意味着您的应用在iOS 10中更加安全,我认为除了您使用应用传输安全例外的理由外,苹果更有可能使用苹果
答案 3 :(得分:0)
编辑:我的以下答案不正确。它不适用于返回XSL的站点,例如feedburner上托管的RSS源。我无法找到解决方案,所以不幸的是我要回到启用任意负载。
我们的应用程序还具有通用的RSS阅读器功能。我们希望使用ATS以提高安全性并符合Apple的要求。此外,许多企业客户认为禁用它是一种高风险。因此,启用"允许任意负载"对我们来说不是一个有效的选择。
目前,我们通过做两件事来充分利用这一点:
1.启用Allow Arbitrary Loads in Web Content
。我们还有一个显示客户内容的通用webview。
2.使用不可见的WKWebView
加载RSS提要,然后从网页中提取HTML并解析XML。我已为here
不知怎的,这个可怕的黑客现在似乎适合我们的目的。
拥有一个允许您在URL会话级别覆盖传输安全性的解决方案会很棒。