Weryfikacja linków aplikacji na Androida

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:

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

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

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:

https://www.example.com/.well-known/assetlinks.json

[{
  "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):

https://www.example.net/.well-known/assetlinks.json

[{
  "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:

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:

  1. System sprawdza wszystkie filtry intencji, które zawierają dowolny z tych elementów:
    • Działanie: android.intent.action.VIEW
    • Kategorie: android.intent.category.BROWSABLEandroid.intent.category.DEFAULT
    • Schemat danych: http lub https
  2. 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:

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.

Jeśli opcja jest włączona, sekcja u dołu strony
    Zawiera pola wyboru oraz przycisk „Dodaj link”
Rysunek 1. Ekran ustawień systemu, na którym użytkownicy mogą wybrać które linki domyślnie otwierają się w aplikacji.
Każde pole wyboru reprezentuje domenę, którą możesz dodać. 
    przycisk okna dialogowego to „Anuluj”. i „Dodaj”.
Rys. 2. Okno, w którym użytkownicy mogą wybrać dodatkowe domeny które można powiązać z aplikacją.

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ści http lub https
  • 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

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 zawiera android:autoVerify="true", i wyświetla stan z always. 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ą jako example.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 do https://example.com
  • Od example.com do www.example.com

To działanie zapewnia bezpieczeństwo aplikacji.

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