2016-01-15 18 views
17

Nella sezione Universal Links del iOS App Search Programming Guide, Apple dice:Quando è possibile utilizzare un SFSafariViewController, WKWebView o UIWebView con collegamenti universali?

Se si crea un'istanza di un oggetto SFSafariViewController, WKWebView, o UIWebView di gestire un collegamento universale, iOS si apre il vostro sito web in Safari invece di aprire la vostra applicazione. Tuttavia, se l'utente tocca un collegamento universale da un oggetto SFSafariViewController, WKWebView o UIWebView incorporato, iOS apre l'app.

Che cosa significa "gestire un collegamento universale"? Posso non aprire mai l'URL fornito con un SFSafariViewController, WKWebView o UIWebView? Si applica solo durante il -[UIApplicationDelegate application:continueUserActivity:restorationHandler:], o c'è un timeout sul posto? Questo significa che non possiamo mai aprire l'URL in un SFSafariViewController, WKWebView o UIWebView?

risposta

2

Non sono sicuro di comprendere appieno la tua domanda.

Proprio ai principi fondamentali di copertura, mi permetto di Apple per spiegare what a Universal Link is: link

universali consentono agli utenti di aprire la tua app quando si tocca link al tuo sito web entro viste WKWebView e UIWebView e le pagine di Safari, oltre a collegamenti che risultano in una chiamata a openURL :, come quelli che si verificano in Mail, Messaggi e altre app.

Quindi, in pratica, immaginate che si sta lavorando su un client Twitter, e passando attraverso la timeline, si incontra un tweet con il seguente link del video su YouTube: https://youtu.be/ejQod8liXm0

Se si tocca, dal momento che è un HTTP URL, ti aspetteresti che Safari apra il link. Tuttavia, penso che tutti gli sviluppatori iOS possano essere tutti d'accordo sul fatto che le app native sono migliori, quindi un'esperienza utente migliore sarebbe per l'app YouTube ufficiale per aprire il video, anche dal client di terze parti .

Questo è ciò che consentono i "collegamenti universali"; se l'app YouTube si registra su iOS come l'app responsabile della gestione dei collegamenti https://www.youtube.com (*), , tutti gli ecosistemi iOS beneficiano se seguiamo le regole API. La stessa cosa accade se si esegue un sito Web e si desidera che i propri contenuti attivino l'app iOS ufficiale da aprire se l'utente lo ha installato o se l'utente deve essere richiesto se desidera installarlo per un utente migliore esperienza (e per aiutare la tua attività, ovviamente).

Quindi, con tutto questo fuori del modo, torniamo al testo originale:

Se si crea un'istanza di un oggetto SFSafariViewController, WKWebView, o UIWebView di gestire un collegamento universale, iOS apre tuo sito web in Safari invece di aprire la tua app. Tuttavia, se l'utente tocca un collegamento universale da un oggetto SFSafariViewController, WKWebView o UIWebView incorporato, iOS apre l'app.

Ciò significa che, se dalla tua app, il tuo utente tocca su un collegamento universale al contenuto (ad esempio: http://www.your-company.com/foo), e non si rilevano questo nel codice dell'app tramite un'espressione regolare, ad esempio, e invece istanziare un SFSafariViewController, WKWebView o UIWebView per aprirlo come se fosse un normale collegamento a The New York Times o qualcosa del genere, il sistema operativo capirà che invece di aprire questo nella tua app, vuoi che Safari gestisca questo per te. Ricorda: l'intero scopo di Universal Links è che l'utente ottenga un'esperienza migliore avendo l'URL gestito da un'app nativa, non dal browser.

Questo è quello che dice la prima frase. Per quanto riguarda il secondo, viene chiarita una potenziale domanda di follow-up: cosa succede se l'utente tocca un collegamento universale al mio contenuto da un browser incorporato da un'altra app che non è mia? Quindi, la frase dice, il sistema operativo si comporterà normalmente: aprirà la tua app, rispettando le regole di Universal Link.

TL; DR: È necessario rilevare anche i collegamenti universali per i contenuti dall'app, nel codice e gestirli. iOS non gestirà questo per voi. Invece, se comunichi al sistema operativo di aprire un link universale al contenuto della tua app in un browser incorporato dalla tua app, ciò avverrà esattamente come detto.

EDIT: Se hai bisogno di aiuto per decidere tra chiedere SFSafariViewController oi -openURL:options:completitionHandler: API per aprire un URL, this link should help you; la mia raccomandazione sarebbe quella di utilizzare -openURL:options:completitionHandler: prima, e se non è successo, quindi utilizzare SFSafariViewController o simile.

Spero che questo aiuti e che ho capito correttamente la tua domanda.

Cheers! E felice programmazione iOS 11! :)

+0

> Se si tocca, dal momento che è un URL HTTP, ci si aspetterebbe di Safari per aprire il link Se il link di YouTube è in una normale 'UITableViewCell', avrei dovuto "gestire" il link youtube in qualche modo, con '- [UIApplication openURL: options: completionHandler:]' o con 'UIWebView',' WKWebView', o 'SFSafariViewController'. Suppongo che se io "gestisco" il link di youtube con una web view, il sistema non aprirebbe l'app di youtube, ma '-openURL: options: completionHandler:' would. Come faccio a sapere cosa fare? –

+1

Il seguente link fornisce le risposte che stai cercando, penso: https://useyourloaf.com/blog/openurl-deprecated-in-ios10/ L'idea è che puoi usare '-openURL: options: completitionHandler : 'prima, e se non ha successo (** successo' boolean' è 'false' **), puoi usare' SFSafariViewController' o simile. – dinesharjani

+1

Si prega di aggiornare la risposta per includerla direttamente e contrassegnare l'utente come corretto. Grazie! –