Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS 9中为应用内浏览器禁用ATS?_Ios_Https_Uiwebview_Ios9 - Fatal编程技术网

在iOS 9中为应用内浏览器禁用ATS?

在iOS 9中为应用内浏览器禁用ATS?,ios,https,uiwebview,ios9,Ios,Https,Uiwebview,Ios9,iOS 9旨在鼓励使用安全连接 这很好,但是如果我的应用程序有一个内置的web浏览器,用户应该能够使用它连接到任何网站,该怎么办?例如,Facebook应用程序允许故事包含指向外部网站的链接。当用户点击这样一个链接,而不是启动Safari时,它会启动一个应用内浏览器 我怎么能在没有你的情况下做出同样的行为 我想要强制使用https的所有好处,但想在我的内部浏览器中禁用此检查。在理想情况下,苹果会允许我在UIWebView上指定一个属性,以允许它加载不安全的URL,而不是全部或全无。我无法将每个域

iOS 9旨在鼓励使用安全连接

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

我怎么能在没有你的情况下做出同样的行为


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

在这种情况下,您需要通过将
NSAllowsArbitraryLoads
设置为true来禁用ATS。如果您知道特定的URL可以支持HTTPS(例如您自己的服务器或在应用程序中使用的API服务器,在
UIWebView
之外),那么您可以创建一个异常,并将这些异常的
nsExceptionsAllowsSecurityHttpLoads
设置为false,而不是启用
nsAllowsArbiryLoads
,一个更安全的解决方案是SFSafariViewController,它允许任意加载

如果类存在,则显示它,否则,显示您自己的UIViewController(包含UIWebView)


我的理论是,这只是一种迫使你对新的
SFSafariViewController
感到满意的方式,我认为这是唯一有意义的选择,全局启用它,然后对应用程序中使用的任何其他url禁用它。它仍然有点违背了它的目的,但它是除了使用如soulshined所述的SFSafariViewController之外的唯一选择。
UIViewController *webBrowser;
if ([SFSafariViewController class] != nil) {
    webBrowser = [[SFSafariViewController alloc] initWithURL:url];
} else {
    webBrowser = [[ABCWebBrowserController alloc] initWithURL:url];
}

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