【问题标题】:Disabling ATS for an in-app browser in iOS 9?在 iOS 9 中为应用内浏览器禁用 ATS?
【发布时间】:2015-11-13 10:21:17
【问题描述】:

iOS 9 引入了App Transport Security (ATS) 以鼓励使用安全连接。

这很好,但是如果我的应用程序有一个内置的网络浏览器,用户应该能够使用它来连接到任何网站?例如,Facebook 应用程序允许故事包含指向外部网站的链接。当用户点击此类链接时,它不会启动 Safari,而是启动应用内浏览器。

如果没有enabling the global NSAllowArbitraryLoads flag,我怎样才能获得同样的行为?

我想要强制使用 https 的所有好处,但想在我的内部浏览器中禁用此检查。在理想情况下,Apple 将允许我在 UIWebView 上指定一个属性,以允许它加载不安全的 URL,而不是全部或全部。我无法将每个域都列入白名单,因为我不知道我的用户将加载哪些 URL。我正在寻找与 iOS 8 兼容的解决方案。

【问题讨论】:

  • 我的理论是,这只是 Apple 迫使您适应新的 SFSafariViewController 的方式

标签: ios https uiwebview ios9


【解决方案1】:

在这种情况下,您通常需要禁用 ATS,方法是将 NSAllowsArbitraryLoads 设置为 true。如果您知道 可以 支持 HTTPS 的特定 URL(例如您自己的服务器或您在应用程序中使用的 UIWebView 之外的 API 服务器),那么您可以创建一个例外并设置 @987654323对于这些异常,@ 为 false

【讨论】:

  • 我认为这是唯一有意义的选项,全局启用它,然后为您在应用程序中使用的任何其他 url 禁用它。它仍然有点违背它的目的,但它是使用 SFSafariViewController 作为灵魂闪耀之外的唯一选择。
【解决方案2】:

比起启用NSAllowsArbitraryLoads,更安全的解决方案是conditionally use SFSafariViewController,它允许任意加载。

如果该类存在,则显示它,否则,显示您自己的 UIViewController(其中包含一个 UIWebView)。

UIViewController *webBrowser;
if ([SFSafariViewController class] != nil) {
    webBrowser = [[SFSafariViewController alloc] initWithURL:url];
} else {
    webBrowser = [[ABCWebBrowserController alloc] initWithURL:url];
}

[self presentViewController:webBrowser animated:YES completion:nil];

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 2016-03-22
    • 2016-06-07
    • 2015-11-30
    • 2020-11-11
    • 2015-12-23
    • 2016-10-30
    • 2023-03-06
    相关资源
    最近更新 更多