Я разрабатываю приложение, в котором есть небольшая настройка. он покажет предварительный просмотр данного URL-адреса (например, Facebook, whatsapp). но если URL-адрес «Пользовательский» находится в HTTP, я не мог загрузить предварительный просмотр при включении ATS. поэтому я отключил весь HTTPS-трафик с помощью NSAllowsArbitraryLoads . есть ли способ разрешить http с включенным ATS?
Разрешить HTTP без отключения ATS в iOS
Ответы (3)
Согласно Apple, если вы используете более старый SDK, то есть iOS 8 или более раннюю версию, то ATS отключается. Я не знаю точно, что это означает, но я предполагаю, что это целевая настройка сборки Архитектуры, базовый SDK, а не настройка цели развертывания.
В этом видео подробно описаны изменения в ATS, недавно анонсированные на WWDC 2016. По состоянию на В начале 2017 года Apple отклонит ваше приложение, если вы используете какое-либо из следующих исключений ATS, И вы не можете предоставить для этого разумное обоснование:
- NSAllowsArbitraryLoads
- NSExceptionAllowsInsecureHTTPLoads
- NSExceptionMinimumTLSVersion
Однако, похоже, вам будет разрешено использовать новое исключение под названием:
- NSAllowsArbitraryLoadsInWebContent
это означает, что элемент управления WKWebView по-прежнему может загружать HTTP-контент. Не уверен, что это относится и к UIWebView.
В вашем случае, я предполагаю, вы не используете WKWebView, поэтому вам лучше начать работать над своим «разумным обоснованием». Или придерживайтесь iOS 8 SDK.
Вы можете добавить исключения (NSExceptionDomains
), чтобы разрешить HTTP для определенных доменов. См. документация.
Однако, если указанный пользователем URL-адрес может быть любым URL-адресом, тогда нет другого пути, кроме как использовать NSAllowsArbitraryLoads
.
NSAllowsArbitraryLoads
.
- person Code; 28.06.2016
NSAllowsArbitraryLoads
делает мое приложение полностью HTTP/прозрачным на сетевом уровне, и любой может пронюхать, что происходит в трафике. Я не хочу отключать ATS для всего приложения для этой крошечной настройки (предварительный просмотр для ссылок). есть ли способ отключить ATS только для этой функции?
- person Duke; 28.06.2016
NSAllowsArbitraryLoads
просто разрешает HTTP. HTTPS по-прежнему будет безопасным. Это не делает приложения прозрачными на сетевом уровне.
- person Code; 28.06.2016
Откройте Info.plist
как исходный код, затем добавьте его туда, куда хотите:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>aWebsite.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>anotherWebsiteIfYouWant.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
Таким образом, вам не придется полностью отключать ATS.