Uniwersalne linki iOS nie otwierają się w aplikacji

109

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?

Legolas
źródło
2
sprawdź tutaj, aby upewnić się, że nie przegapisz żadnego kroku stackoverflow.com/questions/35609667/…
Vineet Choudhary

Odpowiedzi:

189

Istnieje kilka możliwych problemów.

  1. 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 )

  2. 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 .

  3. 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.

  4. 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/*i yoursite.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. Jednak yoursite.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.

st.derrick
źródło
1
Ta sama rzecz. Bardzo dziwne. Czasami otwiera aplikację bezpośrednio, czasami otwiera webView. Chciałbym, żeby dokumentacja była jasna. Działanie tej funkcji jest chaotyczne
Legolas
4
Jeśli chodzi o 1), nie jest już wymagane podpisywanie pliku powiązania witryny z aplikacją Apple, jeśli udostępniasz go przez https.
Jeremy Hicks
11
Ponowne uruchomienie urządzenia iOS również może pomóc. Potrójnie sprawdziłem wszystkie ustawienia i konfigurację i byłem absolutnie pewien, że wszystko jest w porządku, ale nadal nie zadziała. Potem spróbowałem z innym urządzeniem i zadziałało idealnie. Następnie usunąłem aplikację z oryginalnego urządzenia, zrestartowałem urządzenie i ponownie zainstalowałem aplikację, a potem po prostu działało ...
mathz
4
Jak wrócić do aplikacji zamiast do safari, jeśli ktoś przypadkowo nacisnął link do strony w prawym rogu aplikacji?
iEngineer
3
Nigdzie nie dostałem banera Otwórz w aplikacji. Po długich poszukiwaniach, oto rozwiązanie: wpisz dowolny link do swojej witryny w aplikacji Notes (który jest linkiem uniwersalnym). Teraz kliknij Gotowe. Gdy stanie się linkiem, długo go kliknij i wybierz „Otwórz w aplikacji NAZWA-TUTAJ”!
kishorer747
64

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. Np applinks: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-associationpliku: 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).

DFedor
źródło
4
Musiałem również całkowicie usunąć aplikację z urządzenia testowego, a następnie skompilować i uruchomić ponownie, zanim w końcu zadziała.
Phil Andrews,
14
ratujecie mój dzień, to był mój problem, chociaż XCode utworzył dla mnie plik uprawnień, którego nie uwzględniono w mojej kompilacji: musiałem ręcznie kliknąć to pole.
cham
12
Dołączenie pliku uprawnień do kompilacji rozwiązało również problem. Warto zauważyć, że w Xcode 8 pola wyboru członkostwa docelowego w Inspektorze plików są w rzeczywistości wyłączone. Musiałem przejść do ustawień kompilacji i dodać plik uprawnień do fazy Kopiuj zasoby.
Charles A.
5
@cham: czy możecie rozwinąć „chociaż XCode utworzył dla mnie plik uprawnień, nie uwzględniał go w mojej kompilacji: musiałem kliknąć to pole ręcznie”.
Thang Pham
6
@AwaisFayyaz Przejdź do faz budowy> Kopiuj zasoby pakietu. Kliknij znak plus, a następnie dodaj plik uprawnień.
s.zainulabideen
36

Najwyraźniej jest błąd w dokumentacji tworzenia pliku skojarzenia dla Universal Links .

Gdzie jest napisane:

Wartością klucza appID jest identyfikator zespołu aplikacji i identyfikator pakietu

powinien powiedzieć

Wartością klucza appID jest prefiks aplikacji i identyfikator pakietu

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.

Curtis Brian Halbrook
źródło
2
+1, To mi bardzo pomogło. Poświęć pół dnia na zastanawianie się, dlaczego to nie zadziałało i wydawało się, że tak właśnie jest w moim przypadku
Ivo Beckers
uratowałeś mi dzień, w rzeczywistości moja aplikacja była dawno temu i prefiks aplikacji różni się od identyfikatora zespołu.
Ti3t,
to jedyna rzecz, która mi pasuje. Dziękuję Ci!
dhin
To było dla mnie rozwiązanie. Dobra rada.
vincenth
33

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.

  1. Użyj rzeczywistego urządzenia, a nie symulatora.
  2. Usuń aplikację ze swojego urządzenia.
  3. Podłącz urządzenie do komputera i wyświetl wyjście konsoli urządzenia w xcode. (okno -> urządzenia -> [twoje urządzenie] -> otwórz konsolę). Pozostaw to okno otwarte.
  4. Zainstaluj aplikację i pozwól jej się uruchomić.
  5. Filtruj dane wyjściowe konsoli do „swcd”. Jeśli się powiedzie, zobaczysz coś takiego jak poniższy zrzut ekranu. Jeśli się nie powiedzie, zobaczysz coś innego. Jeśli nic nie widzisz, to zepsułeś coś fundamentalnego, na przykład dodanie uprawnienia do domen powiązanych.

Applink został dodany pomyślnie

mpoisot
źródło
2
Doskonała wskazówka! Dodawałem https: // do applinks: uprawnienie, a także określałem pełną ścieżkę, której chciałem słuchać, a oba były błędami. Podawałem example.com/path *, gdzie powinienem określać tylko moją domenę.com, a plik AASA pod adresem example.com określa ścieżkę w stosunku do identyfikatora pakietu mojej aplikacji
Numan Tariq
3
Czy mogę przelać bonus gotówkowy? Spędziłem 2 dni przechodząc przez każdy krok tej cholernej konfiguracji uniwersalnego łącza, nic nie pomagało, dopóki nie wypróbowałem twojego podejścia. Naprawdę niefortunnie się stało, że hostowałem plik skojarzenia w folderze głównym firebase dla mojej domeny i okazało się, że Apple najpierw wysyła zapytanie do podkatalogu .well-known /, a firebase wydaje się odpowiadać na to własnym (!) Poprawnym plikiem skojarzenia, który nie ma połączonej aplikacji. Goshhh, jak mam się tego dowiedzieć, Apple?
nalexn
Ahhh świetna wskazówka! Nie wiedziałem o tej konsoli urządzenia, patrząc tylko na wyjście konsoli Xcode. Mój problem polegał na tym, że 2 z 3 domen głębokich łączy działały, ale nie ta ostatnia. I tam w konsoli zobaczyłem, że w mojej ostatniej domenie błędnie wpisałem "appllinks: <domain>" (2 L's) O rany… w każdym razie, jeszcze raz dziękuję za wspaniały sposób sprawdzenia, czy Universal Links jest rzeczywiście zarejestrowany! (Znalazłem również logi konsoli Usuwanie linków podczas odinstalowywania aplikacji: +1)
Arno Teigseth
1
czy to ma być tak rozwlekłe domyślnie? Ponieważ nie otrzymuję tak szczegółowego dziennika… czy to oznacza, że ​​operacja się nie powiodła?
Nicholas Allio
26

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.

  • Długo naciśnij uniwersalny link w Mail lub iMessage, a zobaczysz opcje, czy otworzyć w safari, czy w aplikacji.
Praveen
źródło
2
Nie ma opcji app, tylko kopiuj, otwieraj, dodawaj do listy lektur itp.
iEngineer
1
Prawie oszalałem przy debugowaniu tego problemu, ale TO było rozwiązanie lub ja. Może jeśli nie jest poprawnie skonfigurowany, a aplikacja Mail otwiera łącze w safari, zawsze otwiera się w safari? nie mam pojęcia, ale raz nacisnąłem długo -> otwórz w 'myapp' ... a teraz linki otwierają się poprawnie!
herbert
1
Wielkie dzięki za to rozwiązanie. Utknąłem w tym przez prawie dzień. Uratowałeś mi dzień.
andrew
18

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:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "*", "/" ]
            }
        ]
    }
}

Jak odpowiedział slutsker w tym wątku na forach Apple Developer.

tidbeck
źródło
17

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.

Nikhil Mathew
źródło
3
To wszystko. Zajmowałem się tym problemem przez wiele godzin, URUCHAMIANIE APLIKACJI Z TEJ SAMEJ DOMENY NAJBARDZIEJ NIE POWODUJE. Dzięki :)
maledr53
12

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ę.

Kyle Truscott
źródło
1
To! Wersja pakietu była całkowicie tym, co powodowało niepowodzenie moich testów, ponieważ przejrzałbym wszystkie powyższe porady, a moje linki nadal uruchamiałyby Safari, ponieważ iOS używa buforowanego wyniku z poprzedniej wersji, apple-app-site-associationktóry miał nieprawidłowy prefiks appId
zai chang
Kyle, myślę, że cię kocham! Ta odpowiedź ratuje dzień, dziękuję!
neiker
To był dla mnie sekretny sos! Dziekuję Dziekuję Dziękuję!
nurider
10
  • Linki 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.

guido
źródło
1
Trzecia kula, to samo tutaj: straciłem wiele godzin na zastanawianie się. Apple ma nawet ładne bardzo głupie wytłumaczenie dla niego: „iOS szanuje najprawdopodobniej intencje użytkownika i otwiera link w Safari” zobaczyć siebie tutaj .
jox
Trzecie miejsce na górze!
Byteros
10

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

morksinaanab
źródło
1
Nie mam tego do pracy, zawsze otwiera Safari. Jednak działają, gdy uruchamiam na prawdziwym urządzeniu. Wszelkie pomysły będą mile widziane, ponieważ debugowanie / programowanie jest nieco bardziej bolesne bez symulatora.
chib
7

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

Podgląd przewodnika debugowania

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!

Chris Maddern
źródło
Bardzo pomocne, dzięki! Działał dla mnie podczas uruchamiania na rzeczywistym urządzeniu, ale nie na symulatorze iOS.
Josh Sklar,
6

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-associationplik 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ść TrustResultValue5 oznacza, że ​​certyfikat jest przeznaczony dla niewłaściwej domeny (np. Test.com obsługiwany z www.test.com). Wartość TrustResultValue4 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-associationplik. Kroki sprowadzają się do:

  1. Odinstaluj aplikację. Jest to konieczne, ponieważ plik jest pobierany podczas instalacji.

  2. Zatrzymaj serwer przed prawidłowym serwowaniem apple-app-site-association.

  3. W xcode otwórz Okno -> Urządzenia, a następnie wybierz swoje urządzenie.

  4. Otwórz dzienniki urządzenia, klikając trójkąt w dolnej części okna.

  5. Wyczyść dzienniki, klikając kosz, aby wyczyścić wszystkie poprzednie dzienniki, które mogą być powiązane.

  6. Zainstaluj ponownie aplikację za pomocą xcode, klikając przycisk odtwarzania.

  7. 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-associationplik 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.

Sam
źródło
1
Robiłem fałszowanie SSL przy użyciu Charles Proxy, co skutkowało wartością zaufania 4. Kiedy wyłączyłem proxy, udało się.
Ben Flynn,
6

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:

Pociągnij w dół w Safari i ponownie otwórz

Spowoduje to następnie „zapamiętanie” otwarcia aplikacji.

samwize
źródło
5

Dodaliśmy plik powiązań witryny Apple-App do tej lokalizacji:

https://example.com/apple-app-site-association

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:

https://example.com/.well-known/apple-app-site-association

Z powodu https://example.com/.well-known/apple-app-site-association ścieżka przekierowana na https://example.com

<Notice>: Allowing redirect 'https://example.com/.well-known/apple-app-site-association' -> 'https://example.com/'
<Notice>: ### Rejecting AASA file size 154466 for URL https://example.com/.well-known/apple-app-site-association

Moim zdaniem jeśli w jakiś sposób. Dobrze znana ścieżka nie działa poprawnie to zrywa uniwersalne linki.

Andrey Banshchikov
źródło
Instrukcja jasno mówi, że „Plik musi być dostępny przez HTTPS - bez żadnych przekierowań”.
eonil
W podręczniku jest również wyraźnie napisane, że „W przypadku aplikacji działających w systemie iOS 9.3.1 i nowszych nieskompresowany rozmiar pliku skojarzenia aplikacji-witryny-Apple nie może być większy niż 128 KB, niezależnie od tego, czy plik jest podpisany”. Ten plik ma rozmiar 154 KB.
Roberto
W systemie iOS11 serwer powinien jawnie zwrócić stan 404 dla: example.com/.well-known/apple-app-site-association, a następnie swcd używa rezerwy do katalogu głównego: example.com/apple-app-site-association . Możesz szybko sprawdzić zwrócony status HTTP za pomocą narzędzi takich jak Postman
Max Odnovolyk
4

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

Attila Bardos
źródło
1
To ciekawe. Apple stwierdza w dokumentach, że w przypadku czystych linków uniwersalnych i użytkowania w systemie iOS9 nie trzeba podpisywać. Musisz podpisać tylko wtedy, gdy chcesz obsługiwać przekazywanie / udostępnianie poświadczeń sieciowych w systemie iOS 8. Ciekawy! Mam ten sam problem, więc spróbuję się podpisać.
wrtsprt
Podpisywanie jest rzeczywiście opcjonalne. Kliknięcie linku w Mobile Safari w celu uruchomienia natywnej aplikacji na iOS nazywa się „Przekazywanie aplikacji z przeglądarki internetowej do aplikacji natywnej”. W takim przypadku należy dodać activitycontinuationwłaściwość do apple-app-site-associationpliku json. developer.apple.com/library/ios/documentation/UserExperience/…
Devy,
3

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

(Preferencje> Konta> Wyświetl szczegóły> Pobierz wszystko)

rozpoznać
źródło
3

Możesz przetestować uniwersalne łącza w symulatorze

Z przewodnika programowania wyszukiwania aplikacji: obsługa linków uniwersalnych

holmesal
źródło
6
Czy ktoś zdobył uniwersalne linki do pracy w symulatorze? Próbowałem wiele razy i to nigdy nie działa. Działa jednak przy użyciu prawdziwego urządzenia z tymi samymi przepływami.
Tony
Tego też nie mogłem przetestować. Próba zmuszenia Safari do uruchomienia uniwersalnych linków w symulatorze była daremna, mimo że działa poprawnie na urządzeniu fizycznym.
Albert Bori,
Nie udało mi się też zmusić ich do pracy w symulatorze. @AlbertBori, czy to działa?
chib
Jestem prawie pewien, że nie działają w symulatorze . Znam wszystkie inne pułapki i nigdy nie mogę zmusić ich do pracy w symulatorze ..
Fattie.
3

Po dwóch dniach okazało się, że takie linki (z oddziału)

linki do aplikacji: xxxx.app.link

działać dopiero po zarchiwizowaniu (również Ad-hoc) aplikacji i zainstalowaniu jej na telefonie.

Bence Pattogato
źródło
3

Jeśli hostujesz swój apple-app-site-associationw 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 zapytania apple-app-site-associationw katalogu głównym. Z jakiegoś powodu inżynierowie Firebase sprawili, że hostowane strony internetowe automatycznie odpowiadały /.well-known/apple-app-site-associationpustym (ale poprawnie utworzonym) plikiem skojarzenia, który zastępuje Twój niestandardowy, nie mając pojęcia, dlaczego nic nie działa!

nalexn
źródło
2
Wreszcie! Wielkie dzięki. Czy jest gdzieś napisane? Firebase powinno gdzieś udokumentować.
Berkay Turancı,
2

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.

MacMark
źródło
2

Dla mnie problemem okazał się apple-app-site-associationplik. Zgodnie z dokumentacją Apple wymagany jest tylko parametr applinks. Dodałem activitycontinuationparametr i zadziałało.

{
  "activitycontinuation": {
    "apps": [
      "9JA89QQLNQ.com.apple.wwdc"
    ]
  },
  "applinks": {
    "apps": [],
    "details": [{
        "appID": "9JA89QQLNQ.com.apple.wwdc",
        "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
      }]
  }
}
Chris
źródło
3 lata później trafiliśmy dokładnie w ten problem. Dodanie activitycontinuationjest tym, co naprawiło to dla nas.
readyornot
2

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ło iPhone 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.plistpliku nie miałem problemu z otwarciem moich linków dynamicznych.

Kyle H.
źródło
2

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:

{
    "activitycontinuation": {
        "apps": [
            "YOUR_APP_PREFIX.de.company.app"
        ]
   },
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "YOUR_APP_PREFIX.de.company.app",
        "paths": ["/*"]
      }
    ]
  }
} 

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.

Sebastian Boldt
źródło
1

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.

wzhang84
źródło
1

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ć.

Tiago Alves
źródło
Wydaje mi się, że to nie działa, próbowałem wszystkiego, aby zmusić je do pracy w symulatorze, ale bezskutecznie. Działają dobrze na rzeczywistym urządzeniu, ale nie jest to idealne rozwiązanie do programowania / debugowania. Próbowałem długo naciskać link i nie ma opcji „Otwórz w aplikacji”.
chib
1

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.

tanner burton
źródło
1

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:

{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app" ],
             "components": [
               {
                  "/": "/my-link/*",
                  "exclude": true,
                  "comment": "Matches any URL whose path starts with /my-link/ and instructs the system not to open it as a universal link"
               }
             ]
           }
       ]
   },
   "webcredentials": {
      "apps": [ "ABCDE12345.com.example.app" ]
   }
}
Anita
źródło
trzeba by dodać "exclude": truedo componentsobiektu, żeby commentbyło prawdą
skornos
@skornos dobra uwaga. poprawię swoją odpowiedź.
Anita
0

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.

greymouser
źródło
0

W moim przypadku moim błędem było umieszczenie parametrów zapytania w ścieżkach:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "/auth-ui/hub?target=confirm&*" ]
            }
        ]
    }
}

kiedy usuwam '? target = confirm & *' ze ścieżek, zaczyna działać

Vins
źródło