Отключить WKWebView для открытия ссылок для перенаправления на приложения, установленные на моем iPhone

Когда я ищу google и нажимаю Etsy.com для exmaple, WKWebView перенаправляет меня на приложение Etsy, установленное на моем iPhone. Как я могу отключить это поведение? Я хочу, чтобы WKWebView перенаправлял меня на мобильный сайт etsy.com. Я использую быстро.

Ответ 1

К сожалению, WKWebView не отправляет URL-адреса с настраиваемыми схемами обратно в ваше приложение для автоматической обработки.

Если вы попробуете это без специальной обработки, это будет выглядеть так, как ваш веб-вид зависает после того, как пользователь будет аутентифицироваться с помощью стороннего сервиса, и вы никогда не получите обратный вызов. Вы можете попробовать использовать URI переадресации со стандартной схемой http или https, но тогда WKWebView просто попытается загрузить ее, а не направлять ее из веб-представления в ваше родное приложение для обработки.

Чтобы обработать перенаправление, вам нужно реализовать decidePolicyForNavigationAction в WebPolicyDelegate вашего WKWebView, чтобы обнаружить настраиваемую схему URL и перенаправить ее в ваше приложение для обработки:

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
        print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")

        let app = UIApplication.sharedApplication()
        let url = navigationAction.request.URL
        let myScheme: NSString = "https"
        if (url!.scheme == myScheme) && app.canOpenURL(url!) {
            print("redirect detected..")
            // intercepting redirect, do whatever you want
            app.openURL(url!) // open the original url
            decisionHandler(.Cancel)
            return
        }

        decisionHandler(.Allow)
    }

Вы можете найти подробную информацию здесь

Ответ 2

Я установил приложение Etsy и подтвердил, что поиск "etsy" в Safari и нажатие первого результата (etsy.com) запустит приложение Etsy.

Я создал тестовое приложение "Single View" в Xcode и просто добавил строки ниже в ViewController viewDidLoad:

 override func viewDidLoad() {
     super.viewDidLoad()

     let webView = WKWebView(frame:view.bounds, configuration: WKWebViewConfiguration())
     view.addSubview(webView)
     webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")!))
}

после поиска etsy и нажатия на первый результат, он берет меня на etsy.com в моем тестовом приложении (не переходит в приложение Etsy).

Вы сделали что-то еще в своем коде, что может заставить WKWebView разрешать перенаправления?

Ответ 3

В нормальных условиях WKWebView не должен открывать стороннее приложение вместо того, чтобы идти на веб-сайт, но я знаю 2 исключения

  • Если вы явно ввели некоторый код в обработчик WKNavigationDelegate, чтобы открыть стороннее приложение
  • Если iOS работает некорректно (перезапустите устройство для исправления) - кажется, есть ошибка, которая иногда создает поведение, которое вы описываете (соблюдается в iOS10.2)