在 iOS 9 中为应用内浏览器禁用 ATS?
Disabling ATS for an in-app browser in iOS 9?
iOS 9 介绍 App Transport Security (ATS) 以鼓励使用安全连接。
这很好,但是如果我的应用程序有一个内置的网络浏览器,用户应该可以使用它来连接到任何网站怎么办?例如,Facebook 应用程序允许故事包含 links 到外部网站。当用户点击这样的 link 时,它不会启动 Safari,而是启动应用内浏览器。
如果没有 ,我怎样才能得到同样的行为?
我想要强制使用 https 的所有好处,但想在我的内部浏览器中禁用此检查。在理想情况下,Apple 会允许我在我的 UIWebView 上指定一个 属性 以允许它加载不安全的 URL,而不是全有或全无。我无法将每个域都列入白名单,因为我不知道我的用户将加载哪些 URL。我正在寻找与 iOS 8.
兼容的解决方案
在这种情况下,您通常需要通过将 NSAllowsArbitraryLoads
设置为 true 来禁用 ATS。如果您知道 可以 支持 HTTPS 的特定 URL(例如您自己的服务器或您在 UIWebView
之外的应用程序中使用的 API 服务器),则您可以创建一个例外并将这些例外 NSExceptionsAllowsInsecureHTTPLoads
设置为 false
比启用 NSAllowsArbitraryLoads
更安全的解决方案是 conditionally use SFSafariViewController,它允许任意加载。
如果 class 存在,则显示它,否则,显示您自己的 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];
iOS 9 介绍 App Transport Security (ATS) 以鼓励使用安全连接。
这很好,但是如果我的应用程序有一个内置的网络浏览器,用户应该可以使用它来连接到任何网站怎么办?例如,Facebook 应用程序允许故事包含 links 到外部网站。当用户点击这样的 link 时,它不会启动 Safari,而是启动应用内浏览器。
如果没有
我想要强制使用 https 的所有好处,但想在我的内部浏览器中禁用此检查。在理想情况下,Apple 会允许我在我的 UIWebView 上指定一个 属性 以允许它加载不安全的 URL,而不是全有或全无。我无法将每个域都列入白名单,因为我不知道我的用户将加载哪些 URL。我正在寻找与 iOS 8.
兼容的解决方案在这种情况下,您通常需要通过将 NSAllowsArbitraryLoads
设置为 true 来禁用 ATS。如果您知道 可以 支持 HTTPS 的特定 URL(例如您自己的服务器或您在 UIWebView
之外的应用程序中使用的 API 服务器),则您可以创建一个例外并将这些例外 NSExceptionsAllowsInsecureHTTPLoads
设置为 false
比启用 NSAllowsArbitraryLoads
更安全的解决方案是 conditionally use SFSafariViewController,它允许任意加载。
如果 class 存在,则显示它,否则,显示您自己的 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];