2016-05-07 32 views
11

Quando eseguo una ricerca su google e faccio clic su Etsy.com per exmaple, WKWebView mi reindirizza all'app Etsy installata sul mio iPhone. Come posso disabilitare questo comportamento? Voglio WKWebView per reindirizzarmi al sito web etsy.com mobile. Sto usando swift.Disabilitare WKWebView per aprire i collegamenti al reindirizzamento alle app installate sul mio iPhone

+0

Si potrebbe provare a intercettare il collegamento in "WKNavigationDelegate' e mostrare il sito Web. –

+0

Puoi spiegare di più per favore? – gal

+1

Sicuro. Se si implementa 'WKNavigationDelegate', il metodo' webView (_ webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler decisionHandler: (WKNavigationActionPolicy) -> Void) 'dovrebbe essere chiamato ogni volta che si fa clic su un collegamento. Controlla la proprietà 'navigationAction.request.URL' per assicurarti che non sia Etsy, per esempio; se lo è, cancella la navigazione usando decisionHandler e vai sul sito web usando 'loadRequest()'. Speriamo che questo impedisca il Deep Linking. –

risposta

0

ho installato l'app Etsy e ho confermato che cercare "etsy" in Safari e toccando il primo risultato (etsy.com) avvierà l'app Etsy.

ho creato un test "Single View Application" in Xcode e semplicemente aggiunte le linee di seguito per viewDidLoad ViewController s':

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")!)) 
} 

dopo la ricerca di etsy e cliccando sul primo risultato che mi porta a etsy. com nella mia app di test (non passa all'app Etsy).

hai fatto qualcos'altro nel codice che potrebbe causare WKWebView per consentire reindirizzamenti?

6

Sfortunatamente, WKWebView non invia gli URL con schemi personalizzati alla tua app da gestire automaticamente.

Se ci provi senza una gestione speciale, sembrerà che la tua vista web si blocchi dopo che l'utente si è autenticato con il servizio di terze parti e non riceverai mai la tua richiamata. Potresti provare a utilizzare un URI di reindirizzamento con lo schema http o https standard, ma in tal caso, lo WKWebView proverà semplicemente a caricarlo, anziché a dirigere dalla visualizzazione Web alla tua app nativa da gestire.

Al fine di gestire il reindirizzamento, è necessario implementare decidePolicyForNavigationAction nel WebPolicyDelegate del vostro WKWebView per rilevare l'usanza URL schema e dirigerla per la vostra applicazione da trattare:

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) 
    } 

Potete trovare Informazioni dettagliate here

+1

Questo non funziona su iOS 9-10 ... Quando clicco su url schema personalizzato, decidePolicyForNavigationAction non viene mai chiamato. – Borzh

-1

In circostanze normali WKWebView non deve aprire un'app di terze parti invece di accedere al sito Web, ma sono a conoscenza di 2 eccezioni

  • Se è stato esplicitamente inserito un codice in un gestore di WKNavigationDelegate per aprire l'applicazione 3rd party
  • Se iOS non funziona perfettamente ragione (riavviare il dispositivo per fissare) - sembra esserci un bug, che di tanto in tanto crea il comportamento che stai descrivendo (Osservato in iOS10.2)