WKWebView http -> Перенаправление https для iOS 10 Соответствие ATS

iOS 10 навязал нам https и полностью сломал приложение, которое я разрабатываю. Приложение частично для чтения RSS. URL-адреса, которые мы получаем из RSS-каналов, часто являются URL-адресами HTTP как для сайтов, так и для изображений метаданных. Эти http-URL-адреса перенаправляются в версии https, если они доступны только в safari и SFSafariViewController. Однако при использовании WKWebView такое перенаправление не происходит. ОС просто блокирует загрузку без https. Если я пытаюсь обойти проблему, поменяв местами "http" на "https" в URL, часто сайты ломаются, загружая свои изображения, CSS и JavaScript из CDN http, и эти запросы также блокируются. Как я могу получить такое же поведение в WKWebView, как в Safari? Есть ли конфигурация, которую я могу установить? Мне кажется сумасшедшим, что Apple внесла бы это изменение и просто сломала бы клиентов, используя WKWebView.

PS Facebook может как-то обойти это. Я не могу сказать, является ли это сильно взломанным SFSafariViewController или они каким-то образом заставили веб-представление работать. Кто-нибудь знает, как они этого добились?

4 ответа

Решение

Использование NSAllowsArbitraryLoads, Ключ все еще доступен для использования; Apple просто хочет убедиться, что у вас есть веская причина для ее использования. Отображение внешнего контента внутри вашего приложения квалифицируется как таковое. Как только правила Apple ATS вступят в силу, вам нужно будет объяснить, почему они вам нужны и почему NSAllowsArbitraryLoadsInWebContent недостаточно. Поскольку у вас уже есть ответы на эти вопросы, не должно быть проблем с тем, чтобы ваше приложение прошло процесс проверки с NSAllowsArbitraryLoads,

Как примечание, Apple отложила требование ATS и не вступит в силу в январе 2017 года.

Покопавшись в документации Apple, я нашел новый NSAllowsArbitraryLoadsInWebContent ключ. Это устраняет проблему для WKWebView, хотя проблематично загружать изображения через http. Я, вероятно, в конечном итоге придется прокси их через мой собственный сервер.

Хотя вы можете просто использовать NSAllowsArbitraryLoads"Глобально отключить в сфере безопасности на транспорте, это не идеально, и Apple, скорее всего, будет отвергнут без действительно серьезного оправдания.

Лучшее решение, которое обеспечит правильное поведение как в iOS 9, так и в iOS 10, заключается в NSAllowsArbitraryLoads а также NSAllowsArbitraryLoadsInWebContent в вашем info.plist. Потому что iOS 9 не признает NSAllowsArbitraryLoadsInWebContentЭто будет чтить NSAllowsArbitraryLoads, эффективно отключая в транспортной безопасности на устройствах iOS 9 для вашего приложения.

В iOS 10, если вы включите NSAllowsArbitraryLoadsInWebContent'keyiOS будет игнорировать NSAllowsArbitraryLoads настройки, только отключение безопасности транспорта приложения только в веб-представлениях в вашем приложении. Это будет означать, что ваше приложение станет намного более безопасным в iOS 10, что, как я полагаю, повысит вероятность Apple, за исключением вашего оправдания использования исключений безопасности транспорта вашего приложения.

Изменить: мой ответ ниже неверен. Он не работает для сайтов, которые возвращают XSL, например, RSS-каналы, размещенные на feedburner. Мне не удалось найти решение для этого, поэтому, к сожалению, я возвращаюсь к разрешению произвольной загрузки.


Наше приложение также имеет общую функцию чтения RSS. Мы хотим использовать ATS для лучшей безопасности и соответствия Apple. Кроме того, многие корпоративные клиенты считают его отключение высоким риском. Таким образом, включение "Разрешить произвольные загрузки" для нас недопустимо.

На данный момент мы сделали лучшее из этого, сделав две вещи: 1. Включение Allow Arbitrary Loads in Web Content, У нас также есть общий веб-просмотр, который отображает содержимое клиента. 2. Использование невидимого WKWebView загрузить канал RSS, затем извлечь HTML-код с веб-страницы и проанализировать XML. Я создал суть для этого здесь

Каким-то образом, этот ужасный хак, кажется, подходит нашим целям, на данный момент.

Было бы здорово иметь решение, позволяющее переопределить безопасность транспорта на уровне сеанса URL.

Другие вопросы по тегам