Dodawanie filtrów intencji do linków do aplikacji

Linki aplikacji to precyzyjne linki, które korzystają ze schematu HTTP lub HTTPS i są weryfikowane przez Androida jako powiązane z Twoją witryną. Aby zarejestrować obsługę linków do aplikacji, wykonaj te czynności:

  1. Dodaj do manifestu aplikacji co najmniej 1 filtr intencji, który określa domenę lub adresy URL Twojej witryny.
  2. Dodaj autoVerify="true"attribute do elementów filtra intencji. Sygnalizuje to systemowi, że powinien spróbować zweryfikować schemat i domenę hosta w odniesieniu do assetlinks.json konfiguracji witryny.
  3. Deklarowanie powiązań z witrynami.

Poniżej znajdziesz przykład deklaracji linku do aplikacji ze schematami i hostami oraz autoVerify="true":

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- 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 link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

Najważniejsze informacje o kodzie

  • AutoVerify: atrybut android:autoVerify="true jest wymagany w przypadku linków do aplikacji. Sygnalizuje to systemowi, że powinien spróbować zweryfikować powiązanie między aplikacją a schematami i domenami określonymi w tagach <data>. Zalecamy dodanie parametru autoVerify="true do każdego filtra intencji, który ma być weryfikowalny.
  • Elementy danych: każdy filtr intencji linków do aplikacji musi zawierać co najmniej 1 element <data>, który określa schematy i formaty hosta pasujące do Twojej zweryfikowanej domeny witryny.<data>
  • Schematy: filtr intencji musi zawierać elementy <data> dla schematów httphttps.
  • Hosty: możesz opcjonalnie dodać elementy <data>, aby dopasować je do co najmniej jednego hosta. Użyj symbolu wieloznacznego (*), aby dopasować wiele subdomen (np. *.example.com). System spróbuje zweryfikować każdego hosta na podstawie pliku assetlinks.json w Twojej witrynie. Pamiętaj, że wszelkie kierowanie na poziomie ścieżki powinno być obsługiwane przez plik assetlinks.json (patrz sekcja sprawdzonych metod poniżej).

  • Wiele hostów: jeśli zadeklarujesz wiele domen hostów, system (na Androidzie 12 lub nowszym) spróbuje zweryfikować każdą z nich. Jeśli jakikolwiek host zostanie zweryfikowany, aplikacja stanie się domyślnym programem obsługującym linki z tego zweryfikowanego hosta. Na Androidzie 11 i starszych weryfikacja nie powiedzie się, jeśli nie uda się zweryfikować nawet jednego hosta.

  • Wiele filtrów intencji: jeśli chcesz zadeklarować unikalne adresy URL (np. konkretną kombinację schematu i hosta), utwórz osobne filtry, ponieważ wiele elementów <data> w tym samym filtrze intencji jest łączonych, aby uwzględnić wszystkie odmiany ich połączonych atrybutów.

Uwagi dotyczące reguł filtrowania pliku manifestu

Jeśli konfigurujesz filtry do użycia z dynamicznymi linkami aplikacji na Androidzie 15 i nowszym, pamiętaj, że dynamiczne reguły zadeklarowane w pliku assetlinks.json po stronie serwera nie mogą rozszerzać zakresu reguł URL, które deklarujesz statycznie w pliku manifestu aplikacji.

Z tego powodu zalecamy stosowanie tego podejścia:

  • W manifeście aplikacji ustaw jak najszerszy zakres, np. deklarując tylko schemat i domenę.
  • Aby jeszcze bardziej doprecyzować routing, np. na poziomie ścieżki, użyj reguł pliku assetlinks.json po stronie serwera.

Dzięki tej idealnej konfiguracji możesz w razie potrzeby dynamicznie dodawać nowe ścieżki linków do aplikacji w pliku assetlinks.json, mając pewność, że będą one mieścić się w szerokim zakresie ustawionym w manifeście aplikacji.

Obsługa linków do aplikacji w przypadku wielu hostów

System musi być w stanie zweryfikować hosta określonego w elementach danych filtrów intencji adresu URL aplikacji na podstawie plików protokołu Digital Asset Links hostowanych w odpowiednich domenach internetowych w tym filtrze intencji. Jeśli weryfikacja się nie powiedzie, system domyślnie podejmuje standardowe działanie w celu rozwiązania intencji, zgodnie z opisem w artykule Tworzenie precyzyjnych linków do treści w aplikacji. Aplikacja może jednak nadal zostać zweryfikowana jako domyślny moduł obsługi dowolnego wzorca adresu URL zdefiniowanego w innych filtrach intencji aplikacji.

Na przykład aplikacja z tymi filtrami intencji przejdzie weryfikację tylko w przypadku https://www.example.com, jeśli plik assetlinks.json zostanie znaleziony w lokalizacji https://www.example.com/.well-known/assetlinks.json, ale nie w lokalizacji 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>
jeśli chcesz zdefiniować konkretne kombinacje schematów URI i domen.

Obsługa łączenia aplikacji w przypadku wielu subdomen

Protokół Digital Asset Links traktuje subdomeny w filtrach intencji jako unikalne, oddzielne hosty. Jeśli więc filtr intencji zawiera wiele hostów z różnymi subdomenami, musisz opublikować prawidłowy plik assetlinks.json w każdej domenie. Na przykład ten filtr intencji zawiera www.example.commobile.example.com jako akceptowane hosty adresów URL intencji. W związku z tym prawidłowy assetlinks.json musi być opublikowany zarówno na stronie https://www.example.com/.well-known/assetlinks.json, jak 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 zadeklarujesz nazwę hosta z symbolem wieloznacznym (np. *.example.com), musisz opublikować plik assetlinks.json w głównej nazwie hosta (example.com). Na przykład aplikacja z tym filtrem intencji przejdzie weryfikację dla każdej podnazwy example.com (np. foo.example.com), o ile plik assetlinks.json zostanie opublikowany pod adresem 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>

Sprawdzanie, czy z tą samą domeną jest powiązanych kilka aplikacji

Jeśli opublikujesz kilka aplikacji powiązanych z tą samą domeną, każda z nich może zostać zweryfikowana. Jeśli jednak aplikacje mogą rozpoznawać dokładnie tę samą domenę i ścieżkę, jak w przypadku wersji lite i pełnej aplikacji, tylko aplikacja zainstalowana jako ostatnia może rozpoznawać intencje internetowe dla tej domeny.

W takim przypadku sprawdź, czy na urządzeniu użytkownika nie ma aplikacji, które mogą powodować konflikt, pod warunkiem że masz niezbędną widoczność pakietu. Następnie w aplikacji wyświetl niestandardowe okno wyboru zawierające wyniki wywołania queryIntentActivities. Użytkownik może wybrać preferowaną aplikację z listy pasujących aplikacji, która pojawi się w oknie.