Link aplikacji na Androida to specjalny typ precyzyjnego linku, który umożliwia dostęp do adresów URL witryny. otwieranie odpowiednich treści w aplikacji na Androida bez wymaga od użytkownika wybrania aplikacji. Linki aplikacji na Androida wykorzystują zasoby cyfrowe Linki API do budowania zaufania Sprawdź, czy Twoja aplikacja została zatwierdzona przez witrynę, tak aby linki otwierały się automatycznie tę domenę. Jeśli system pomyślnie zweryfikuje Twoje prawa własności do adresów URL, tag system automatycznie kieruje te intencje URL do Twojej aplikacji.
Aby potwierdzić, że jesteś właścicielem aplikacji i adresów URL witryny, wypełnij następujące kroki:
Dodaj filtry intencji zawierające
autoVerify
. Ten atrybut sygnalizuje systemowi, że powinien on sprawdzić, czy Twoja aplikacja należy do domen URL używanych w filtrach intencji.Deklaruj związek między witryną a intencją użytkowników. filtruje poprzez przechowywanie pliku JSON protokołu Digital Asset Links w tej lokalizacji:
https://domain.name/.well-known/assetlinks.json
Powiązane informacje znajdziesz w tych materiałach:
Dodawanie filtrów intencji na potrzeby weryfikacji linków do aplikacji
Aby włączyć weryfikację obsługi linków w aplikacji, dodaj filtry intencji pasujące do w tym formacie:
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Chociaż wystarczające jest uwzględnienie autoVerify
tylko w jednym oświadczeniu <intent-filter>
dla każdego hosta, nawet jeśli jest on używany w innych niezaznaczonych oświadczeniach, zalecamy dodanie autoVerify
do każdego elementu <intent-filter>
, aby zachować spójność. Dzięki temu po usunięciu lub przekształceniu elementów w pliku manifestu Twoja aplikacja pozostanie powiązana ze wszystkimi zdefiniowanymi domenami.
Proces weryfikacji domeny wymaga połączenia z internetem i może trochę potrwać. Aby zwiększyć wydajność procesu, system
zweryfikować domenę w przypadku aplikacji kierowanej na Androida 12 lub nowszego;
tylko wtedy, gdy ta domena znajduje się w elemencie <intent-filter>
zawierającym
dokładnie w formacie określonym w poprzednim fragmencie kodu.
Obsługa łączenia aplikacji w przypadku wielu hostów
System musi mieć możliwość zweryfikowania hosta określonego w danych filtrów intencji URL aplikacji z plikami Digital Asset Links hostowanymi w odpowiednich domenach internetowych, filtr intencji. Jeśli weryfikacja się nie powiedzie, system powróci do domyślnego działania. aby zrealizować intencję, tak jak to opisano w Tworzenie precyzyjnych linków do treści aplikacji Nadal można jednak zweryfikować aplikację jako domyślny moduł obsługi dla dowolnego wzorca adresu URL zdefiniowanego w innych filtrach intencji aplikacji.
Uwaga: w Androidzie 11 (poziom interfejsu API 30) i starszych nie weryfikuje aplikacji jako domyślnego modułu obsługi, chyba że znajdzie pasującą Digital Asset Links dla wszystkich hostów zdefiniowanych w pliku manifestu.
Na przykład aplikacja o następującej intencji:
filtry przeszłyby weryfikację tylko dla https://www.example.com
jeśli plik assetlinks.json
został znaleziony w
https://www.example.com/.well-known/assetlinks.json
, ale nie
https://www.example.net/.well-known/assetlinks.json
:
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:host="www.example.com" /> </intent-filter> </activity> <activity android:name=”SecondActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="www.example.net" /> </intent-filter> </activity> </application>
Uwaga: wszystkie elementy <data>
w tym samym filtrze intencji
są scalone, aby uwzględnić wszystkie odmiany ich połączonych atrybutów. Na przykład parametr
pierwszy filtr intencji zawiera element <data>
, który deklaruje tylko
Schemat HTTPS. Jest on jednak połączony z innym elementem <data>
, dzięki czemu intencja
filtr obsługuje zarówno wartość http://www.example.com
, jak i https://www.example.com
.
Dlatego, gdy chcesz zdefiniować konkretne kombinacje, musisz utworzyć osobne filtry intencji.
schematów i domen URI.
Obsługa łączenia aplikacji z wieloma subdomenami
Protokół Digital Asset Links traktuje subdomeny w filtrach intencji jako unikalne,
dla różnych hostów. Jeśli chcesz
filtr uwzględnia wiele hostów z różnymi subdomenami, musisz opublikować prawidłową
assetlinks.json
w każdej domenie. Przykład:
ten filtr intencji zawiera www.example.com
i
mobile.example.com
jako zaakceptowane hosty adresu URL intencji. Zatem prawidłowy
Aplikacja assetlinks.json
musi być opublikowana w obu
https://www.example.com/.well-known/assetlinks.json
i
https://mobile.example.com/.well-known/assetlinks.json
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:scheme="https" /> <data android:host="www.example.com" /> <data android:host="mobile.example.com" /> </intent-filter> </activity> </application>
Jeśli natomiast deklarujesz nazwę hosta za pomocą symbolu wieloznacznego (np. *.example.com
), musisz opublikować plik assetlinks.json
w nazwie hosta głównej (example.com
). Na przykład aplikacja z tym filtrem intencji przejdzie weryfikację dla dowolnej nazwy podrzędnej example.com
(np. foo.example.com
), o ile plik assetlinks.json
jest opublikowany w nazwie https://example.com/.well-known/assetlinks.json
:
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="*.example.com" /> </intent-filter> </activity> </application>
Sprawdź, czy nie ma wielu aplikacji powiązanych z tą samą domeną
Jeśli opublikujesz kilka aplikacji powiązanych z tą samą domeną, każda z nich może zostać zweryfikowana. Jeśli jednak aplikacje mogą rozpoznać dokładnie tę samą nazwę hosta i ścieżkę domeny, co może mieć miejsce w przypadku wersji lite i pełnej aplikacji, tylko aplikacja, która została zainstalowana ostatnio, może rozpoznać intencje internetowe dla tej domeny.
W takim przypadku sprawdź, czy na urządzeniu użytkownika nie ma aplikacji, które mogą wchodzić w kolizję z Twoją aplikacją. Możesz to zrobić, jeśli masz odpowiednią widoczność pakietu. Następnie w aplikacji pokaż niestandardowy
okno wyboru, które zawiera wyniki wywołania
queryIntentActivities()
Użytkownik może wybrać preferowaną aplikację z listy pasujących aplikacji,
zostaną wyświetlone w oknie.
Deklarowanie powiązań witryny
Zasób cyfrowy Aby wskazać aplikacje na Androida, w Twojej witrynie musisz opublikować plik JSON (Linki). powiązane z witryną i potwierdź intencje przypisane do adresów URL aplikacji. Plik JSON wykorzystuje te pola do identyfikowania powiązanych aplikacji:
package_name
: identyfikator aplikacji. zadeklarowano w plikubuild.gradle
aplikacji.sha256_cert_fingerprints
: odciski cyfrowe SHA256 certyfikatu podpisywania aplikacji. Do wygenerowania odcisku palca za pomocą narzędzia Java Keytool możesz użyć następującego polecenia: To pole obsługuje wiele odcisków palców, różne wersje aplikacji, np. do debugowania i kompilacji produkcyjnej.keytool -list -v -keystore my-release-key.keystore
Jeśli w przypadku aplikacji używasz podpisywania aplikacji przez Google Play, certyfikat odcisk palca wygenerowany przez lokalne uruchomienie aplikacji
keytool
zwykle różnią się od tych na stronie urządzenia. Na koncie dewelopera w Konsoli PlayRelease > Setup > App signing
(Release > Setup > App signing
) możesz sprawdzić, czy używasz podpisywania aplikacji w Google Play w przypadku swojej aplikacji. Jeśli tak, na tej samej stronie znajdziesz też odpowiedni fragment kodu JSON Digital Asset Links dla swojej aplikacji.
Poniższy przykładowy plik assetlinks.json
przyznaje prawo do otwierania linku
Aplikacja com.example
na Androida:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Powiązanie witryny z wieloma aplikacjami
Witryna może zadeklarować powiązania z wieloma aplikacjami w ramach tego samego elementu assetlinks.json
. Oto przykład pliku z instrukcjami deklarującego powiązanie
z 2 osobnymi aplikacjami, które są dostępne pod adresem
https://www.example.com/.well-known/assetlinks.json
:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.puppies.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }, { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.monkeys.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Różne aplikacje mogą obsługiwać linki do różnych zasobów w ramach tego samego hosta internetowego. Przykład:
Parametr app1 może zadeklarować filtr intencji dla funkcji https://example.com/articles
, a app2 – deklaracja
filtr intencji dla elementu https://example.com/videos
.
Uwaga: wiele aplikacji powiązanych z domeną może być podpisanych tym samym lub różne certyfikaty.
Powiązanie wielu witryn z jedną aplikacją
Wiele witryn może deklarować powiązania z tą samą aplikacją w swoich
odpowiednich plików assetlinks.json
. Następujące listy plików
Oto przykład, jak zadeklarować powiązanie domeny example.com
example.net z aplikacją app1. Pierwsza strona z informacjami pokazuje powiązanie witryny example.com.
z aplikacją app1:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Na następnej stronie zobaczysz powiązanie domeny example.net z aplikacją app1. Tylko
lokalizacja, w której są hostowane te pliki, jest inna (.com
i .net
):
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Publikowanie weryfikacyjnego pliku JSON
Plik weryfikacji JSON musisz opublikować w tej lokalizacji:
https://domain.name/.well-known/assetlinks.json
Upewnij się, że:
- Plik
assetlinks.json
jest udostępniany z parametrem content-typeapplication/json
- Plik
assetlinks.json
musi być dostępny przez połączenie HTTPS. niezależnie od tego, czy filtry intencji aplikacji deklarują HTTPS jako schemat danych. - Plik
assetlinks.json
musi być dostępny bez przekierowań (nie 301 lub 302). - Jeśli linki w aplikacji obsługują wiele domen hosta, musisz opublikować plik
assetlinks.json
w każdej z nich. Zapoznaj się z sekcją Obsługa łączenia aplikacji w przypadku wielu hostów. - Nie publikuj aplikacji z adresami URL rozwojowymi/testowymi w pliku manifestu, które mogą nie być być dostępne publicznie (np. takie, które są dostępne tylko przez sieć VPN). O Obejściem w takich przypadkach jest skonfigurowanie kompilacji wariantu, by wygenerować inny plik manifestu dla kompilacji deweloperskich.
Weryfikacja linków aplikacji na Androida
Gdy android:autoVerify="true"
występuje w co najmniej 1 z intencji aplikacji
filtry, instalując aplikację na urządzeniu z Androidem 6.0 (poziom interfejsu API 23).
powoduje, że system automatycznie weryfikuje hosty powiązane z
Adresy URL w filtrach intencji aplikacji. Na Androidzie 12 i nowszych
może też ręcznie wywołać proces weryfikacji, aby
i testować logikę weryfikacji.
Weryfikacja automatyczna
Automatyczna weryfikacja systemu obejmuje:
- System sprawdza wszystkie filtry intencji, które zawierają dowolny z tych elementów:
- Działanie:
android.intent.action.VIEW
- Kategorie:
android.intent.category.BROWSABLE
iandroid.intent.category.DEFAULT
- Schemat danych:
http
lubhttps
- Działanie:
- W przypadku każdej unikalnej nazwy hosta znalezionej w powyższych filtrach intencji Android wysyła zapytania do Androida
odpowiednie strony internetowe z plikiem Digital Asset Links na
https://hostname/.well-known/assetlinks.json
Gdy potwierdzisz listę witryn, które chcesz powiązać z aplikacją, masz pewność, że hostowany plik JSON jest prawidłowy, zainstaluj aplikację na swoim urządzenia. Poczekaj co najmniej 20 sekund na zakończenie procesu weryfikacji asynchronicznej gotowe. Użyj tego polecenia, aby sprawdzić, czy system i ustaw odpowiednie zasady obsługi linków:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
Weryfikacja ręczna
Od Androida 12 można ręcznie wywoływać domenę weryfikacji dla aplikacji zainstalowanej na urządzeniu. Możesz to zrobić niezależnie od tego, czy aplikacja jest kierowana na Androida 12.
Nawiąż połączenie z internetem
Aby można było zweryfikować domenę, urządzenie testowe musi być połączone z w internecie.
Obsługa zaktualizowanego procesu weryfikacji domeny
Jeśli aplikacja jest kierowana na Androida 12 lub nowszego, system używa atrybutu automatycznie zaktualizował proces weryfikacji domeny.
W przeciwnym razie możesz ręcznie włączyć zaktualizowany proces weryfikacji. Aby to zrobić: uruchom następujące polecenie w oknie terminala:
adb shell am compat enable 175408749 PACKAGE_NAME
Resetowanie stanu funkcji Android App Links na urządzeniu
Zanim ręcznie wywołasz weryfikację domeny na urządzeniu, musisz zresetować stan linków aplikacji na Androida na urządzeniu testowym. Aby to zrobić, uruchom następujące polecenie w oknie terminala:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
To polecenie ustawia urządzenie w takim samym stanie, w jakim jest przed użytkownikiem wybiera domyślne aplikacje dla dowolnej domeny.
Wywoływanie procesu weryfikacji domeny
Po zresetowaniu stanu linków aplikacji na Androida na urządzeniu możesz wykonać do samej weryfikacji. Aby to zrobić, uruchom następujące polecenie w oknie terminala:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
Sprawdzanie wyników weryfikacji
Odczekaj trochę czasu, aż agent weryfikacyjny zakończy żądania, sprawdź wyniki weryfikacji. Aby to zrobić, uruchom następujące polecenie:
adb shell pm get-app-links PACKAGE_NAME
Wynik tego polecenia jest podobny do tego:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
Domeny, które przeszły weryfikację, mają stan weryfikacji domeny
z verified
. Każdy inny stan oznacza, że weryfikacja domeny nie powiodła się
wykonywać. Stan none
wskazuje w szczególności, że weryfikacja
Pracownik obsługi klienta mógł nie dokończyć procesu weryfikacji.
Na liście poniżej znajdziesz możliwe wartości zwracane przez weryfikację domeny zwracany dla danej domeny:
none
- Nic nie zostało zarejestrowane w tej domenie. Poczekaj jeszcze kilka minut na agent weryfikacyjny, który realizuje żądania związane z weryfikacją domeny, a następnie ponownie wywołać proces weryfikacji domeny.
verified
- Domena została zweryfikowana na potrzeby aplikacji deklarującej.
approved
- Domena została zatwierdzona, zwykle za pomocą polecenia powłoki.
denied
- Wymuszone odmowa dostępu do domeny – zwykle za pomocą polecenia powłoki.
migrated
- System zachował wynik poprzedniego procesu, w którym korzystała ze starszej domeny weryfikacji.
restored
- Domena została zatwierdzona po przywróceniu danych przez użytkownika. Zakładamy, że że domena została wcześniej zweryfikowana.
legacy_failure
- Domena została odrzucona przez starszego weryfikatora. Konkretną przyczyną niepowodzenia jest nieznane.
system_configured
- Domena została automatycznie zatwierdzona przez konfigurację urządzenia.
- Kod błędu:
1024
lub większy Niestandardowy kod błędu przypisany do weryfikatora urządzenia.
Dokładnie sprawdź, czy masz ustanowioną sieć. połączenia i wywoływanie domeny proces weryfikacji.
Poproś użytkownika o powiązanie aplikacji z domeną
Innym sposobem na uzyskanie zatwierdzenia aplikacji w domenie jest poproszenie użytkownika o: powiązanie aplikacji z tą domeną.
Sprawdzanie, czy aplikacja została już zatwierdzona w domenie
Zanim poprosisz użytkownika o potwierdzenie, sprawdź, czy Twoja aplikacja jest domyślnym modułem obsługi
domeny zdefiniowane w elementach <intent-filter>
. Stan zatwierdzenia możesz sprawdzić za pomocą jednej z tych metod:
- Interfejs API
DomainVerificationManager
(w czasie wykonywania). - Program wiersza poleceń (podczas testowania).
DomainVerificationManager
Fragment kodu poniżej pokazuje, jak korzystać z funkcji
Interfejs API DomainVerificationManager
:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
Program wiersza poleceń
Podczas testowania aplikacji w trakcie jej programowania możesz uruchomić to polecenie, aby: zapytanie o stan weryfikacji domen należących do Twojej organizacji:
adb shell pm get-app-links --user cur PACKAGE_NAME
W poniższych przykładowych danych wyjściowych nie udało się zweryfikować aplikacji „example.org” domeny, użytkownik 0 ręcznie zatwierdził aplikację w ustawieniach systemowych i żaden inny pakiet nie jest zweryfikowany w tej domenie.
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
Możesz też użyć poleceń powłoki, aby symulować proces, w którym użytkownik wybiera
która aplikacja jest powiązana z daną domeną. Pełny opis
polecenia są dostępne w danych wyjściowych adb shell pm
.
Podaj kontekst żądania
Zanim poprosisz o zatwierdzenie domeny, podaj kontekst użytkownika. Możesz na przykład wyświetlić ekran powitalny, okno dialogowe lub podobny Element interfejsu wyjaśniający użytkownikowi, dlaczego Twoja aplikacja powinna być domyślnym modułem obsługi dla konkretnej domeny.
Przesyłanie prośby
Gdy użytkownik zrozumie, o co prosi Twoja aplikacja, wyślij prośbę.
Aby to zrobić, wywołaj intencję zawierającą
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
działanie intencji i dopasowanie ciągu znaków
package:com.example.pkg
dla aplikacji docelowej, jak pokazano tutaj
ten fragment kodu:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
Po wywołaniu intencji użytkownik zobaczy ekran ustawień o nazwie Otwórz przez domyślny. Ten ekran zawiera opcję Otwórz obsługiwane linki, jak widać na ilustracji 1.
Gdy użytkownik włączy opcję Otwieranie obsługiwanych linków, w sekcji Linki otwierane w tej aplikacji pojawi się kilka pól wyboru. Użytkownicy mogą w nich wybrać domeny, które chcą powiązać ze swoją aplikacją. Mogą też wybrać Dodaj link, aby dodać domeny, jak pokazano na rysunku 2. Gdy użytkownicy później kliknie dowolny link w dodanych przez niego domenach, otworzy się on w aplikacji automatycznie.
Otwórz w aplikacji domeny, których aplikacja nie może zweryfikować
Główną funkcją aplikacji może być otwieranie linków jako aplikacji zewnętrznej, bez weryfikację obsługiwanych domen. W takim przypadku wyjaśnij użytkownikom, że w momencie kliknięcia linku internetowego nie mogą wybrać aplikacji własnej ani aplikacji innej firmy. Użytkownicy muszą ręcznie powiązać domeny z Twoją aplikacją.
Zastanów się też nad stworzeniem pokazu slajdów lub gry na trampolinie, otworzyć link we własnej aplikacji (jeśli użytkownik tego chce) który działa jako serwer proxy. Zanim skonfigurujesz takie okno dialogowe lub aktywność trampoliny, skonfiguruj aplikację tak, aby miała widoczność pakietu w aplikacjach firm zewnętrznych, które pasują do filtra intencji internetowej Twojej aplikacji.
Testuj linki do aplikacji
Wdrażając funkcję łączenia aplikacji, przetestuj ją że system może powiązać aplikację z witrynami i obsługiwać żądania adresów URL zgodnie z oczekiwaniami.
Aby przetestować istniejący plik z wyciągami, możesz użyć Generator i tester listy instrukcji.
Potwierdź listę hostów do weryfikacji
Podczas testowania potwierdź listę powiązanych hostów, które system powinien zweryfikować dla Twojej aplikacji. Utwórz listę wszystkich adresów URL, których odpowiednie filtry intencji zawierają te elementy: atrybuty i elementy:
android:scheme
atrybut o wartościhttp
lubhttps
- Atrybut
android:host
z wzorcem adresu URL domeny - Działanie
android.intent.action.VIEW
- Element kategorii
android.intent.category.BROWSABLE
Na tej liście możesz sprawdzić, czy na każdym nazwanym hoście dostępny jest plik JSON protokołu Digital Asset Links i subdomenie.
Potwierdź pliki Digital Asset Links
W przypadku każdej witryny użyj interfejsu Digital Asset Links API, aby sprawdzić, czy plik JSON protokołu Digital Asset Links plik jest prawidłowo hostowany i zdefiniowany:
https://digitalassetlinks.googleapis.com/v1/statements:list? source.web.site=https://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
Sprawdzanie zasad dotyczących linków
W trakcie testowania możesz sprawdzić bieżące ustawienia systemu dotyczące obsługi linków. Użyj tego polecenia, aby wyświetlić listę istniejących zasad obsługi linków dla wszystkich aplikacje na połączonym urządzeniu:
adb shell dumpsys package domain-preferred-apps
To samo dotyczy polecenia:
adb shell dumpsys package d
Uwaga: pamiętaj, by po zainstalowaniu aplikacji odczekać co najmniej 20 sekund, umożliwia ukończenie procesu weryfikacji przez system.
Polecenie zwraca listę każdego użytkownika lub profilu zdefiniowanego na urządzeniu. poprzedzony nagłówkiem w takim formacie:
App linkages for user 0:
Po tym nagłówku dane wyjściowe mają podany niżej format i wyświetlają ustawienia obsługi linków dla tego użytkownika:
Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
Ta lista wskazuje, które aplikacje są powiązane z domenami danego użytkownika:
Package
– identyfikuje aplikację na podstawie nazwy pakietu zgodnie z deklaracją w pliku manifestu.Domains
– pokazuje pełną listę hostów, których linki internetowe obsługuje ta aplikacja, przy użyciu argumentu puste spacje jako separatory.Status
– pokazuje bieżące ustawienie obsługi linków w tej aplikacji. Aplikacja, która ma przeszła weryfikację, a jego plik manifestu zawieraandroid:autoVerify="true"
, i wyświetla stan zalways
. Liczba szesnastkowa występująca po tym stanie jest związana z kodem zapis preferencji użytkownika dotyczących połączenia aplikacji. Ta wartość nie wskazuje, czy weryfikacja udało się.
Uwaga: jeśli użytkownik zmieni ustawienia linku aplikacji przed zakończeniem weryfikacji, możesz zobaczyć fałszywie pozytywny wynik weryfikacji, mimo że weryfikacja zakończyła się niepowodzeniem. Niepowodzenie weryfikacji nie ma jednak znaczenia, jeśli użytkownik wyraźnie zezwolił aplikacji na otwieranie obsługiwanych linków bez pytania. Dzieje się tak, ponieważ preferencje użytkownika mają pierwszeństwo przed weryfikacją automatyczną (lub jej brakiem). W rezultacie link prowadzi bezpośrednio do aplikacji bez wyświetlania okna, tak jak w przypadku weryfikacji udało się.
Przykład testowy
Aby weryfikacja linku aplikacji powiodła się, system musi być w stanie zweryfikować aplikację w każdym z tych elementów: witryny określone w określonym filtrze intencji, który spełnia kryteria obowiązujące w przypadku aplikacji; . Ten przykład przedstawia konfigurację pliku manifestu ze zdefiniowanymi kilkoma linkami aplikacji:
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:scheme="https" /> <data android:host="www.example.com" /> <data android:host="mobile.example.com" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="www.example2.com" /> </intent-filter> </activity> <activity android:name=”SecondActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="account.example.com" /> </intent-filter> </activity> <activity android:name=”ThirdActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" /> <data android:host="map.example.com" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="market" /> <data android:host="example.com" /> </intent-filter> </activity> </application>
Lista hostów, które platforma próbuje zweryfikować na podstawie powyższego pliku manifestu:
www.example.com mobile.example.com www.example2.com account.example.com
Lista hostów, których platforma nie próbowała zweryfikować za pomocą powyższego pliku manifestu:
map.example.com (it does not have android.intent.category.BROWSABLE) market://example.com (it does not have either an "http" or "https" scheme)
Więcej informacji o listach wyciągów: Tworzenie listy instrukcji
Naprawianie częstych błędów implementacji
Jeśli nie możesz zweryfikować linków aplikacji na Androida, zapoznaj się z następującymi
. W tej sekcji nazwa example.com
jest używana jako zastępcza nazwa domeny. kiedy
podczas wykonywania tych testów, zastąp example.com
rzeczywistym parametrem swojego serwera
nazwę domeny.
- Nieprawidłowa konfiguracja filtra intencji
- Sprawdź, czy w elemencie
<intent-filter>
nie ma adresu URL, który nie należy do Twojej aplikacji. - Nieprawidłowa konfiguracja serwera
Sprawdź konfigurację JSON serwera i upewnij się, że wartość SHA to Zgadza się.
Sprawdź też, czy usługa
example.com.
(z kropką) wyświetla taką samą jakoexample.com
.- Przekierowania po stronie serwera
System nie weryfikuje żadnych linków aplikacji na Androida, jeśli są one skonfigurowane o przekierowaniu:
- Od
http://example.com
dohttps://example.com
- Od
example.com
dowww.example.com
To działanie zapewnia bezpieczeństwo aplikacji.
- Od
- Solidność serwera
Sprawdź, czy serwer może łączyć się z aplikacjami klienckimi.
- Linki nieweryfikowalne
Na potrzeby testów możesz celowo dodawać linki niemożliwe do zweryfikowania. Google Keep pamiętaj, że w Androidzie 11 i starszych wersjach te linki powodują system, aby nie weryfikować wszystkich linków aplikacji na Androida dla Twojej aplikacji.
- Nieprawidłowy podpis w pliku assetlinks.json
Sprawdzić, czy Twój podpis jest poprawny i czy zgadza się z podpisem użytym do podpisania do aplikacji. Typowe błędy:
- Podpisanie aplikacji certyfikatem debugowania i udostępnienie tylko wersji
podpis w
assetlinks.json
. - podpis w formie małej litery w
assetlinks.json
. Podpis powinien zapisz je dużymi literami. - Jeśli używasz podpisywania aplikacji przez Google Play, upewnij się, że używasz podpisu, którego Google używa do podpisywania każdej wersji. Możesz zweryfikować te dane, wraz z pełnym fragmentem kodu JSON, postępując zgodnie z instrukcjami dotyczącymi deklarowania powiązań z witryną.
- Podpisanie aplikacji certyfikatem debugowania i udostępnienie tylko wersji
podpis w