2016-01-15 23 views
17

W sekcji Universal Links z iOS App Search Programming Guide, Apple mówi:Kiedy mogę używać SFSafariViewController, WKWebView lub UIWebView z łączami uniwersalnymi?

Jeśli instancji SFSafariViewController, WKWebView lub UIWebView obiekt do obsługi uniwersalnego łącza, iOS otwiera swoją stronę w Safari zamiast otwierania aplikacji. Jeśli jednak użytkownik dotknie uniwersalnego łącza z poziomu wbudowanego obiektu SFSafariViewController, WKWebView lub UIWebView, system iOS otworzy aplikację.

Co oznacza "obsługa uniwersalnego linku"? Czy nie mogę otworzyć podanego adresu URL za pomocą SFSafariViewController, WKWebView lub UIWebView? Czy ma to zastosowanie tylko podczas -[UIApplicationDelegate application:continueUserActivity:restorationHandler:], czy też istnieje limit czasu? Czy to oznacza, że ​​nie możemy otworzyć adresu URL w SFSafariViewController, WKWebView lub UIWebView?

Odpowiedz

2

Nie jestem pewien, czy w pełni rozumiem Twoje pytanie.

Wystarczy do podstaw okładka, Pozwolę Jabłko wyjaśnić what a Universal Link is: linki

uniwersalne pozwalają użytkownikom otworzyć aplikację, gdy dotknij linki do swojej strony internetowej w WKWebView i UIWebView poglądów i stron safari, oprócz linki prowadzące do wywołania metody openURL: takie, które występują w Poczcie, Wiadomościach i innych aplikacjach.

Więc w zasadzie, wyobraźmy sobie, że pracujesz na kliencie Twittera, i przechodzi na osi czasu, można napotkać tweeta z następującym YouTube wideo: https://youtu.be/ejQod8liXm0

Jeśli dotknij go, ponieważ jest to HTTP URL, możesz oczekiwać, że Safari otworzy link. Jednak myślę, że wszyscy programiści iOS mogą się w pełni zgodzić, że natywne aplikacje są lepsze, więc lepszym doświadczeniem dla użytkownika będzie oficjalna aplikacja YouTube do otwierania wideo, nawet z klienta innej firmy. .

Na to pozwalają "Universal Links"; jeśli aplikacja YouTube rejestruje się w systemie iOS jako aplikacja odpowiedzialna za obsługę linków https://www.youtube.com (*), wszyscy korzystający z ekosystemu systemu iOS przestrzegają zasad API. To samo dzieje się, gdy prowadzisz stronę internetową i chcesz, aby jakakolwiek twoja treść spowodowała otwarcie Twojej oficjalnej aplikacji na iOS, jeśli użytkownik ją zainstalował, lub aby użytkownik został zapytany, czy chciałby ją zainstalować dla lepszego użytkownika doświadczenie (i oczywiście pomoc dla twojego biznesu).

Więc z tym wszystkim z drogi, wróćmy do pierwotnego tekstu:

Jeśli instancję obiektu SFSafariViewController, WKWebView lub UIWebView do obsługi uniwersalnego łącza, iOS otwiera swoją stronę w Safari zamiast otwierać aplikację. Jeśli jednak użytkownik dotknie łącza uniwersalnego z poziomu wbudowanego obiektu SFSafariViewController, WKWebView lub UIWebView, system iOS otworzy aplikację.

Oznacza to, że jeśli z aplikacji, twój użytkownik kliknie Universal Link do treści (np: http://www.your-company.com/foo) i nie wykryć w kodzie aplikacji za pomocą wyrażenia regularnego na przykład, i zamiast tego utworzyć instancję, aby otworzyć ją tak, jakby była zwykłym łączem z The New York Times lub czymś podobnym, system operacyjny zrozumie, że zamiast otwierania tego w swojej aplikacji, , chcesz, aby Safari obsługiwał to dla ciebie. Pamiętaj o: celem uniwersalnych łączy jest zapewnienie użytkownikowi lepszego komfortu dzięki temu, że adres URL jest obsługiwany przez natywną aplikację, a nie przez przeglądarkę.

Tak mówi pierwsze zdanie. Jeśli chodzi o drugie, usuwa potencjalne pytanie uzupełniające: co zrobić, jeśli użytkownik dotknie Uniwersalnego linku do moich treści z wbudowanej przeglądarki z innej aplikacji, która nie jest moja? Następnie zdanie mówi, że system operacyjny będzie działał normalnie: otworzy aplikację, przestrzegając zasad Universal Link.

TL; DR: Musisz wykryć także łącza uniwersalne do swoich treści z aplikacji, kodu i obsługiwać je:. iOS tego nie zrobi. Zamiast tego, jeśli powiesz systemowi operacyjnemu, aby otworzył uniwersalne łącze do zawartości aplikacji w osadzonej przeglądarce z aplikacji, zrobi to dokładnie tak, jak powiedział.

EDIT: Jeśli potrzebujesz pomocy decydując między pytaniem SFSafariViewController ani na -openURL:options:completitionHandler: API otworzyć URL this link should help you; Moja rekomendacja to najpierw skorzystanie z -openURL:options:completitionHandler:, a jeśli to się nie powiedzie, użyj SFSafariViewController lub podobnego.

Mam nadzieję, że to pomaga i że poprawnie zrozumiałem twoje pytanie.

Pozdrawiam! I programowanie Happy iOS 11! :)

+0

> Jeśli dotkniesz, ponieważ jest to URL HTTP, możesz oczekiwać, że Safari otworzy link: Jeśli link youtube jest w zwykłym 'UITableViewCell', będę musiał" obsłużyć "link youtube w jakiś sposób, albo za pomocą '- [UIApplication openURL: options: completionHandler:]' lub z 'UIWebView',' WKWebView', lub 'SFSafariViewController'. Zakładam, że jeśli "obsłuży" link youtube z widokiem sieciowym, system nie otworzyłby aplikacji youtube, ale '-openURL: options: completionHandler:' would. Skąd mam wiedzieć, co robić? –

+1

Poniższy link zawiera odpowiedzi, których szukasz, myślę: https://useyourloaf.com/blog/openurl-deprecated-in-ios10/ Chodzi o to, że możesz użyć opcji '-openURL: options: completHandler : 'first, a jeśli się nie uda (** success' boolean' to 'false' **), możesz zamiast tego użyć' SFSafariViewController' lub podobnego. – dinesharjani

+1

Zaktualizuj odpowiedź, aby uwzględnić to bezpośrednio, a ja oznaczy Cię jako prawidłową. Dzięki! –