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! :)
> 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ć? –
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
Zaktualizuj odpowiedź, aby uwzględnić to bezpośrednio, a ja oznaczy Cię jako prawidłową. Dzięki! –