Więc dokładnie postępowałem zgodnie z tym samouczkiem i użyłem tych samych wartości, co podane: https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9
Plik Apple Association jest również gotowy w katalogu linków:
WEB_PAGE:PORT_NUMBER/apple-app-site-association
Wydaje się, że wszystko jest ustawione po tej stronie.
Dodałem uprawnienia, zaktualizowałem profil obsługi administracyjnej i wszystko jest skonfigurowane.
Kiedy uruchamiam aplikację na moim urządzeniu i otwieram łącze http://WEB_PAGE:PORT_NUMBER
, zawsze otwiera to Safari.
Mam nawet punkty przerwania w następującej metodzie:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
Ale zilch.
Czy ktoś to udoskonalił? Czy jest coś, czego mi brakuje?
ios
objective-c
xcode
ios9
ios-universal-links
Legolas
źródło
źródło
Odpowiedzi:
Istnieje kilka możliwych problemów.
Spróbuj wkleić swoją domenę do tego walidatora linków i upewnij się, że nie ma problemów: https://limitless-sierra-4673.herokuapp.com/ (kredyt dla ShortStuffSushi - zobacz repozytorium )
iOS rejestruje komunikat o błędzie w dziennikach systemowych, jeśli nie masz poprawnie skonfigurowanego protokołu TLS w domenie określonej w uprawnieniach. Jest zakopany w dziennikach systemu operacyjnego, a nie w dziennikach aplikacji. Komunikat o błędzie będzie wyglądał tak
Sep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErr
. Komunikat o błędzie pobrany stąd , szybkie (niekompletne) instrukcje korzystania z CloudFlare dla TLS tutaj .W moich osobistych testach kliknięcie / wpisanie linku w Safari nigdy nie powodowało bezpośredniego otwarcia aplikacji. Kliknięcie z innych aplikacji (iMessage, Poczta, Slack, itd.) Nie pracował. Inni zgłaszali, że kliknięcie linków w wynikach wyszukiwania Google spowodowało bezpośrednie otwarcie aplikacji.
Zwróć uwagę, że jeśli link uniwersalny pomyślnie otworzy aplikację, a następnie przejdziesz do Safari (dotykając swojej witryny w prawym górnym rogu paska nawigacyjnego w aplikacji), system iOS przestanie otwierać aplikację, gdy odwiedzasz ten adres URL . Następnie w Safari możesz pociągnąć w dół, aby wyświetlić baner u góry strony z napisem „Otwórz”. Zmarnowałem na to dużo czasu. Zauważ, że kliknięcie na site => wyłączenie UL wydaje się być specyficzną ścieżką , na podstawie ścieżek określonych w pliku apple-app-site-assocation. Jeśli więc masz oddzielne trasy
yoursite.com/a/*
iyoursite.com/b/*
jeśli klikniesz,yoursite.com/a/*
a aplikacja otworzy się bezpośrednio, w prawym górnym rogu aplikacji możesz kliknąćyoursite.com/a/*
. Jeśli to zrobisz, kolejne wizyty wyoursite.com/a/*
otworzy się w przeglądarce, a nie w aplikacji. Jednakyoursite.com/b/*
powinno to pozostać nienaruszone i nadal otwierać aplikację bezpośrednio.Daj mi znać, jeśli odkryjesz, na czym polega problem. Osobiście jestem bardzo ciekawy, jak działają Universal Links i jakie istnieją przypadki skrajne. Powodzenia.
źródło
Może się to nie udać na wiele sposobów. Dwa punkty sprawiły mi kłopoty:
W Xcode, kiedy dodajesz uprawnienie Associated Domains, każdy wpis musi zaczynać się od,
applinks:
a następnie nazwy domeny. Npapplinks:www.apple.com
.Chociaż Xcode utworzył dla mnie plik uprawnień, nie uwzględniono go w mojej kompilacji: musiałem ręcznie kliknąć to pole.
I tak, po zrobieniu tego nie trzeba było podpisywać
apple-app-site-association
pliku: jest to zwykły tekst i działa, o ile jest obsługiwany przez HTTPS. (Nadal musisz go podpisać, jeśli obsługujesz iOS 8).źródło
Najwyraźniej jest błąd w dokumentacji tworzenia pliku skojarzenia dla Universal Links .
Gdzie jest napisane:
powinien powiedzieć
W przypadku większości aplikacji wydaje się, że identyfikator zespołu i prefiksy aplikacji są takie same, ale jeśli Twoja aplikacja jest w sklepie od wielu lat, wartości te mogą być inne.
Aby znaleźć tę wartość, otwórz Centrum członkowskie na https://developer.apple.com i spójrz na „Certyfikaty, identyfikatory i profile”, kliknij „Identyfikatory”, a następnie „Identyfikatory aplikacji” w tabeli pod „Identyfikatorami”. Znajdź swoją aplikację i użyj tam wartości prefiksu i identyfikatora pakietu, aby utworzyć identyfikator aplikacji dla pliku skojarzenia.
źródło
Aby pomóc w debugowaniu tego problemu, wyszukaj „swcd” w wynikach konsoli urządzenia podczas instalowania aplikacji, aby sprawdzić, czy rejestracja linku uniwersalnego zadziałała, czy nie.
źródło
Odpowiedź Świętego Derricka ma charakter informacyjny.
Aby jednak ponownie umożliwić otwieranie uniwersalnych linków w aplikacji zamiast w Safari, musimy wykonać następujące czynności.
źródło
app
, tylko kopiuj, otwieraj, dodawaj do listy lektur itp.Aby sprawdzić poprawność
apple-app-site-association
po stronie serwera, możesz użyć oficjalnego walidatora Apple.https://search.developer.apple.com/appsearch-validation-tool/
źródło
Zdałem sobie sprawę, że problemem dla mnie było to, że linki do katalogu głównego a (np.
http://example.com/
) Nie otwierały mojej aplikacji, ale jeśli dodałem ścieżkę (np.http://example.com/mypath
), Zadziałało. Dodanie"/"
do listy ścieżek załatwiło to:Jak odpowiedział slutsker w tym wątku na forach Apple Developer.
źródło
Szybkie kroki, aby sprawdzić, czy poprawnie zaimplementowałeś Universal Link.
Stuknij i przytrzymaj łącze, które spodziewasz się uruchomić aplikację. W menu kontekstowym powinna pojawić się opcja „Otwórz w [nazwa aplikacji]”.
Otwórz aplikację Notes, wpisz łącze, które spodziewasz się otworzyć. Stuknij Gotowe. Link zmieni kolor na żółty i stuknięcie w link powinno otworzyć Twoją aplikację, a nie Safari.
Jeśli link http://yourDomain.com nie uruchamia aplikacji, spróbuj http://yourDomain.com/yourFolder/
W Safari, jeśli menu kontekstowe pokazuje „Otwórz w [nazwa Twojej aplikacji]” w Safari, ale kliknięcie linku otwiera go w samym safari zamiast uruchamiać aplikację,
za. Spróbuj otworzyć stronę safari, która została otwarta po kliknięciu linku, tak jak w przypadku „pociągnięcia, aby odświeżyć”. Powinien pojawić się baner umożliwiający otwarcie Twojej aplikacji. Dotknij banera, aby otworzyć aplikację, zamknij aplikację, naciskając przycisk ekranu głównego, wróć do safari i spróbuj uruchomić aplikację, ponownie dotykając łącza. Tym razem aplikacja powinna zostać uruchomiona, ponieważ dotknięcie banera powinno zapisać preferencje otwierania linku w aplikacji.
b. Jeśli aplikacja nadal nie uruchamia się po kroku a., Spróbuj wysłać łącze do poczty internetowej, takiej jak Gmail, a następnie otwórz witrynę poczty internetowej w safari i spróbuj kliknąć łącze. Jeśli to zadziała, być może próbujesz uruchomić aplikację z tej samej domeny, co link. Z tego, co widziałem, uruchomienie aplikacji z tej samej domeny w większości kończy się niepowodzeniem . Prawdopodobnie safari nie zechce sprawdzić, czy docelowy adres URL jest linkiem uniwersalnym, gdy link znajduje się w tej samej domenie, w której znajduje się użytkownik. Spróbuj więc uruchomić aplikację z innej domeny.
źródło
Bardzo ważne jest również zwiększenie wersji projektu lub numeru kompilacji po zintegrowaniu linków uniwersalnych. Nawet jeśli usuniesz / przeinstalujesz, iOS nie pobierze linków, chyba że zmienisz wersję.
źródło
apple-app-site-association
który miał nieprawidłowy prefiks appIdLinki uniwersalne nie będą działać, jeśli wkleisz link w polu adresu URL przeglądarki.
Linki uniwersalne działają z
<a href="...">
kliknięciami elementu sterowanego przez użytkownika w różnych domenach . Przykład: jeśli na google.com znajduje się link uniwersalny wskazujący na bnc.lt, aplikacja zostanie otwarta.Linki uniwersalne nie będą działać z
<a href="...">
kliknięciami elementu użytkownika w tej samej domenie . Przykład: jeśli w witrynie google.com znajduje się link uniwersalny, który wskazuje inny link uniwersalny w witrynie google.com, aplikacja nie otworzy się.Linki uniwersalne nie mogą być wywoływane przez JavaScript (w window.onload lub przez wywołanie .click ()
<a>
elementu), chyba że jest to część działania użytkownika.źródło: https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links
Trzecia kula kosztowała mnie około jednego dnia.
źródło
Dla każdego, kto potrzebuje łatwego testowania linków otwierających (uniwersalnych), możesz również otworzyć link w swoim symulatorze z terminala za pomocą tego polecenia:
xcrun simctl openurl booted yourapp_or_http://yourlink
na przykład:
xcrun simctl openurl booted https://www.google.com
źródło
O ile ludzie tutaj szukają innych rozwiązań, zebraliśmy cały krok po kroku w debugowaniu Universal Links, ponieważ widzieliśmy wiele problemów, które wyskakują, powodując DUŻO bólów głowy.
Sprawdź to:
Podręcznik debugowania linków uniwersalnych
Jeśli chcesz tylko świeżo skonfigurować Universal Links, ten przewodnik jest naprawdę pomocny:
Przewodnik konfiguracji głębokiego linkowania do iOS
Mam nadzieję, że są pomocne!
źródło
Pomyślałem, że dodam kilka rzeczy, które odkryłem, na wypadek gdyby więcej osób napotkało te same problemy co ja w przyszłości. Są to głównie związane z błędami uwierzytelniania.
Mimo że Apple nie podaje tego wprost,
apple-app-site-association
plik musi być udostępniany przez https, nawet jeśli jest podpisany. Certyfikat używany dla protokołu HTTPS również musi być zaufany przez firmę Apple. Więc chociaż certyfikat dodany do urządzenia w Ustawienia -> Ogólne -> Profile pozwoli na https w Safari, nie pozwoli na działanie uniwersalnych linków.W dziennikach urządzenia, przy błędzie uwierzytelniania między urządzeniem a serwerem, zostanie wydrukowana wartość typu
"TrustResultValue" : 4
. WartośćTrustResultValue
5 oznacza, że certyfikat jest przeznaczony dla niewłaściwej domeny (np. Test.com obsługiwany z www.test.com). WartośćTrustResultValue
4 oznacza, że certyfikat nie jest zaufany do tego użytku.Nie może być kilka pomocnych kroków do debugowania tutaj . Sekcja „Testowanie dostępu do powiązania witryny-aplikacji-Apple” zawiera przewodnik krok po kroku, jak sprawdzić, czy urządzenie pobiera
apple-app-site-association
plik. Kroki sprowadzają się do:Odinstaluj aplikację. Jest to konieczne, ponieważ plik jest pobierany podczas instalacji.
Zatrzymaj serwer przed prawidłowym serwowaniem
apple-app-site-association
.W xcode otwórz Okno -> Urządzenia, a następnie wybierz swoje urządzenie.
Otwórz dzienniki urządzenia, klikając trójkąt w dolnej części okna.
Wyczyść dzienniki, klikając kosz, aby wyczyścić wszystkie poprzednie dzienniki, które mogą być powiązane.
Zainstaluj ponownie aplikację za pomocą xcode, klikając przycisk odtwarzania.
Po uruchomieniu aplikacji, jeśli urządzenie poprawnie żąda pliku, w dziennikach urządzenia powinien znajdować się błąd, który można znaleźć, wyszukując „apple-app-site-Association”.
Jeśli
apple-app-site-association
plik jest poprawnie obsługiwany (pominięto krok 2), nie powinno być żadnego błędu. Jeśli na tym polega problem, może zostać wyświetlony błąd uwierzytelniania.źródło
Najczęstszą przyczyną jest dotknięcie przez użytkownika prawego górnego rogu, co nakazuje systemowi iOS NIE otwierać aplikacji (w tym przypadku Uber) w przyszłości.
Aby naprawić, pociągnij w dół, aby odsłonić inteligentny baner i dotknij OTWÓRZ:
Spowoduje to następnie „zapamiętanie” otwarcia aplikacji.
źródło
Dodaliśmy plik powiązań witryny Apple-App do tej lokalizacji:
Na iOS 9 działało dobrze, ale na iOS 10 nie działało.
Okazało się, że problem dotyczy. Dobrze znanej ścieżki:
Z powodu https://example.com/.well-known/apple-app-site-association ścieżka przekierowana na https://example.com
Moim zdaniem jeśli w jakiś sposób. Dobrze znana ścieżka nie działa poprawnie to zrywa uniwersalne linki.
źródło
Udało mi się to zrobić, ale zajęło to trochę czasu i walki. Zwróć uwagę, że jeśli nie podpiszesz
apple-app-site-association
pliku (podpisanie jest opcjonalne!), Dotknięcie linku w Safari nie otworzy Twojej aplikacji (spowodowało to duży ból głowy).źródło
activitycontinuation
właściwość doapple-app-site-association
pliku json. developer.apple.com/library/ios/documentation/UserExperience/…Zajęło mi to prawie dzień, żeby to rozgryźć. Problem, który miałem, polegał na tym, że nie pobierałem zaktualizowanych profili udostępniania w XCode (po tym ponownie uruchomiłem XCode).
źródło
Z przewodnika programowania wyszukiwania aplikacji: obsługa linków uniwersalnych
źródło
Po dwóch dniach okazało się, że takie linki (z oddziału)
działać dopiero po zarchiwizowaniu (również Ad-hoc) aplikacji i zainstalowaniu jej na telefonie.
źródło
Jeśli hostujesz swój
apple-app-site-association
w Firebase , pamiętaj, aby umieścić go w/.well-known/
podkatalogu! Wygląda na to, że Xcode najpierw pyta o ten adres URL, a jeśli się powiedzie, nie podejmuje próby zapytaniaapple-app-site-association
w katalogu głównym. Z jakiegoś powodu inżynierowie Firebase sprawili, że hostowane strony internetowe automatycznie odpowiadały/.well-known/apple-app-site-association
pustym (ale poprawnie utworzonym) plikiem skojarzenia, który zastępuje Twój niestandardowy, nie mając pojęcia, dlaczego nic nie działa!źródło
Przejdź do developer.apple.com i edytuj jeden ze swoich profili dystrybucji. Na stronie edycji możesz otworzyć wyskakujące okienko z identyfikatorami aplikacji , które pokaże listę nazw aplikacji, a w () okrągłych nawiasach za nazwą aplikacji pokaże wszystkie Twoje prawdziwe identyfikatory aplikacji . Niektóre aplikacje mogą mieć Twój identyfikator zespołu jako prefiks, ale niektóre nie . Upewnij się, że używasz dokładnie tego, co widzisz w tym wyskakującym menu wewnątrz () i umieść to w polu appID aplikacji apple-app-site-Association. Miałem dokładnie ten problem z aplikacją i jej uniwersalnymi linkami.
źródło
Dla mnie problemem okazał się
apple-app-site-association
plik. Zgodnie z dokumentacją Apple wymagany jest tylko parametr applinks. Dodałemactivitycontinuation
parametr i zadziałało.źródło
activitycontinuation
jest tym, co naprawiło to dla nas.Tak naprawdę nie widziałem dokładnie tego samego połączenia problemu / rozwiązania, które sprawiło, że działa dla mnie, więc równie dobrze mogę dodać moje, jeśli ktoś ma ten sam problem!
W mojej aplikacji używam niestandardowego schematu adresu URL (ustawionego w
APP_TARGET > Info > URL Types
) i ustawiam schemat adresu URL z tego miejsca w konsoli Firebase, aby był zgodny, ale nadal nie działał.Mój problem dotyczył właściwie dwóch problemów:
Uważaj, jeśli zaznaczasz opcję Automatycznie zarządzaj podpisywaniem
Jeśli sprawdzasz ustawienie „Automatycznie zarządzaj podpisywaniem” Xcode, tak jak ja, ponieważ właśnie próbowałem stworzyć szybką aplikację demonstracyjną, będziesz chciał upewnić się, że używany TeamID jest zgodny z tym w konsoli Firebase. Początkowo przeszedłem do mojego konta programisty Apple i skopiowałem identyfikator zespołu ze strony członkostwa, ale później zobaczyłem, że rzeczywisty identyfikator używany przez Xcode jest inny. (Możesz to znaleźć w
APP_TARGET > General > Signing > Signing Certificate.
sekcji Dla mnie to wyglądałoiPhone Developer: My Name (TEAM_ID)
).Przedrostek identyfikatora zespołu do identyfikatora pakietu w typach adresów URL
Po upewnieniu się, że są one zgodne w mojej konsoli Firebase i Xcode, moim następnym problemem był identyfikator mojego schematu adresu URL. Zwykle używa się tutaj identyfikatora pakietu, ale Firebase w rzeczywistości poprzedza go identyfikatorem zespołu podanym w konsoli Firebase, więc musiałem również poprzedzić go identyfikatorem w sekcji typów adresów URL w Xcode.
Po tych dwóch poprawkach i ponownym pobraniu
GoogleService-Info.plist
pliku nie miałem problemu z otwarciem moich linków dynamicznych.źródło
Po dwóch dniach totalnej desperacji myślę, że w końcu to naprawiłem. Oto moje rozwiązanie:
Wygląda na to, że starsze aplikacje używają innego prefiksu niż nowsze aplikacje. Nowsze aplikacje używają do tego celu tylko identyfikatora zespołu. Jeśli prefiks aplikacji i identyfikator zespołu nie są identyczne, wydaje się, że musisz określić pole kontynuacji działania w pliku powiązania witryny aplikacji Apple:
Inną rzeczą, której doświadczyłem podczas mojej piekielnej jazdy, było to, że usunięcie aplikacji i ponowne uruchomienie urządzenia wydaje się być jedynym sposobem na wymuszenie odświeżenia tego pliku.
źródło
Mój błąd polegał na tym, że nasza witryna przekierowuje www.domain.com do domain.com, więc cała strona www.domain.com/* zakończy się niepowodzeniem. Mam nadzieję, że to pomoże.
źródło
Udało mi się przetestować Universal Links w symulatorze iOS, korzystając z aplikacji Kalendarz.
Właśnie utworzyłem wydarzenie i dodałem adres URL, który chciałem przetestować w polu wydarzenia
URL
. Następnie podczas przeglądania utworzonego wydarzenia możesz po prostu dotknąć łącza URL, a aplikacja powinna się otworzyć.źródło
Po całym dniu próbowania rozwiązania problemu ponowne uruchomienie telefonu rozwiązało problem.
Odinstalowanie / ponowne zainstalowanie aplikacji również nie działa.
źródło
Dla ios13 dostępny jest nowy format - sprawdź tutaj https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app?language=objc
Zaktualizowałem mój plik, aby wyglądał następująco:
źródło
"exclude": true
docomponents
obiektu, żebycomment
było prawdąDla przyszłych czytelników, którzy znajdą tę stronę ...
Miałem podobną sytuację. Jednak w mojej sytuacji iOS10 działał AOK i bez względu na to, co zrobiłem (podbijanie numerów kompilacji, usuwanie / ponowne instalowanie itp.), IOS9 wydawał się odmawiać działania.
Dochodziłem do tego z iOS10 i potrzebowałem obsługi iOS9. W tym czasie dokumentacja tutaj - https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html - jasno stwierdza, że plik może być umieszczony w katalogu głównym serwera internetowego (np.
/apple-app-site-association
) lub w folderze. dobrze znany (np/.well-known/apple-app-site-association
.). Ponieważ obsługuję również Androida, który również używa znanego folderu dla podobnego pliku, postanowiłem umieścić tam oba.W przypadku nowych instalacji w systemie iOS10 wyraźnie żąda pliku głównego, kończy się niepowodzeniem, a następnie żąda pliku dobrze znanego i kończy się pomyślnie.
W przypadku iOS9 wyraźnie zażądał pliku głównego, nie powiodło się i nie robi nic więcej.
Rozwiązanie: jeśli obsługujesz iOS9, umieść plik w
/apple-app-site-association
.źródło
W moim przypadku moim błędem było umieszczenie parametrów zapytania w ścieżkach:
kiedy usuwam '? target = confirm & *' ze ścieżek, zaczyna działać
źródło