2015-08-19 2 views
2

iOS 9 представляет App Transport Security (ATS), чтобы поощрять использование защищенных соединений.Отключение ATS для браузера в приложении в iOS 9?

Это замечательно, но что, если мое приложение имеет встроенный веб-браузер, который пользователь должен иметь возможность использовать для подключения к любому веб-сайту? Например, приложение Facebook позволяет истории содержать ссылки на внешние веб-сайты. Когда пользователь удаляет такую ​​ссылку, а не запускает Safari, запускает браузер в приложении.

Как я могу получить такое же поведение без enabling the global NSAllowArbitraryLoads flag?

Я хочу, чтобы все преимущества принудительного использования https, но вы хотите отключить эту проверку в моем внутреннем браузере. В идеальном мире Apple позволила бы мне указать свойство на моем UIWebView, чтобы он мог загружать небезопасные URL-адреса, а не все или ничего. Я не могу переадресовать каждый отдельный домен, так как я не знаю, какие URL-адреса будут загружены моими пользователями. Я ищу решение, совместимое с iOS 8.

+0

Моя теория это просто яблоки способ заставить вас, чтобы освоиться с новым 'SFSafariViewController' – soulshined

ответ

1

Вместо того, чтобы включать 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]; 
1

В этом случае вам необходимо отключить ATS в целом, установив NSAllowsArbitraryLoads в true. Если у вас есть конкретные URL-адрес, которые вы знаете может HTTPS поддержки (например, собственные сервера или серверов API, которые вы используете в приложении за пределами UIWebView), то вы можете создать исключение и набор NSExceptionsAllowsInsecureHTTPLoads ложь для этих исключений

+0

Я думаю, что это единственный вариант, который имеет смысл, включить ее в глобальном масштабе, а затем отключить его для любого другого URL вы используете в приложении. Он по-прежнему сортирует свою цель, но ее единственный вариант за пределами использования SFSafariViewController, как упоминалось выше. –

Смежные вопросы