Menambahkan filter Intent untuk Link Aplikasi

Link Aplikasi adalah deep link yang menggunakan skema HTTP atau HTTPS dan diverifikasi oleh Android sebagai terkait dengan situs Anda. Untuk mendaftar guna menangani Link Aplikasi, ikuti langkah-langkah berikut:

  1. Tambahkan satu atau beberapa filter Intent ke manifes aplikasi Anda yang menentukan domain atau URL situs Anda.
  2. Tambahkan autoVerify="true"attribute ke elemen filter Intent. Hal ini memberi sinyal kepada sistem bahwa sistem harus mencoba memverifikasi skema dan domain host terhadap konfigurasi assetlinks.json situs Anda.
  3. Mendeklarasikan asosiasi situs.

Berikut adalah contoh deklarasi Link Aplikasi dengan skema dan host serta 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>

Poin penting tentang kode

  • AutoVerify: Atribut android:autoVerify="true" diperlukan untuk Link Aplikasi. Atribut ini memberi sinyal kepada sistem bahwa sistem harus mencoba memverifikasi pengaitan antara aplikasi Anda dan skema serta domain yang ditentukan dalam tag <data>. Sebaiknya tambahkan autoVerify="true" ke setiap filter Intent yang ingin Anda verifikasi.
  • Elemen data: Setiap filter Intent Link Aplikasi harus menyertakan satu atau beberapa elemen <data> yang menentukan skema dan format host yang cocok dengan domain situs yang dapat diverifikasi.
  • Skema: Filter intent harus menyertakan elemen <data> untuk skema http dan https.
  • Host: Anda dapat menambahkan elemen <data> secara opsional untuk mencocokkan satu atau beberapa host. Gunakan karakter pengganti (*) untuk mencocokkan beberapa subdomain (seperti *.example.com). Sistem akan mencoba memverifikasi setiap host terhadap file assetlinks.json di situs Anda. Perhatikan bahwa perutean tingkat jalur apa pun harus ditangani oleh file assetlinks.json (lihat bagian praktik terbaik di bawah).

  • Beberapa Host: Jika Anda mendeklarasikan beberapa domain host, sistem (di Android 12+) akan mencoba memverifikasi setiap domain. Jika ada host yang diverifikasi, aplikasi akan menjadi pengendali default untuk link dari host yang diverifikasi tersebut. Di Android 11 dan yang lebih lama, verifikasi gagal jika satu host tidak dapat diverifikasi.

  • Beberapa filter Intent: Anda harus membuat filter terpisah jika ingin mendeklarasikan URL unik (seperti kombinasi skema dan host tertentu), karena beberapa elemen <data> dalam filter intent yang sama akan digabungkan untuk memperhitungkan semua variasi atribut gabungannya.

Pertimbangan untuk aturan filter manifes

Jika Anda menyiapkan filter untuk digunakan dengan Link Aplikasi Dinamis di Android 15 dan yang lebih tinggi, penting untuk diingat bahwa aturan dinamis yang dideklarasikan dalam file assetlinks.json sisi server tidak dapat memperluas cakupan aturan URL yang Anda deklarasikan secara statis dalam manifes aplikasi.

Oleh karena itu, sebaiknya gunakan pendekatan ini:

  • Dalam manifes aplikasi, tetapkan cakupan seluas mungkin, seperti dengan mendeklarasikan skema dan domain saja
  • Mengandalkan aturan assetlinks.json sisi server untuk penyempurnaan lebih lanjut, seperti perutean tingkat jalur.

Dengan konfigurasi ideal ini, Anda dapat menambahkan jalur App Link baru secara dinamis dalam file assetlinks.json sesuai kebutuhan, dengan mengetahui bahwa jalur tersebut akan sesuai dengan cakupan luas yang telah Anda tetapkan dalam manifes aplikasi.

Mendukung Link Aplikasi untuk beberapa host

Sistem harus dapat memverifikasi host yang ditentukan dalam elemen data filter intent URL aplikasi dengan file Digital Asset Links yang dihosting di domain web masing-masing dalam filter intent tersebut. Jika verifikasi gagal, sistem akan kembali ke perilaku standarnya untuk menyelesaikan intent, seperti yang dijelaskan dalam Membuat Deep Link ke Konten Aplikasi. Namun, aplikasi masih dapat diverifikasi sebagai pengendali default untuk pola URL mana pun yang ditentukan dalam filter intent aplikasi lainnya.

Misalnya, aplikasi dengan filter intent berikut akan lolos verifikasi hanya untuk https://www.example.com jika file assetlinks.json ditemukan di https://www.example.com/.well-known/assetlinks.json, tetapi tidak 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>

Mendukung penautan aplikasi untuk beberapa subdomain

Protokol Digital Asset Links memperlakukan subdomain di filter intent Anda sebagai host yang unik dan terpisah. Jadi, jika filter intent Anda mencantumkan beberapa host dengan subdomain yang berbeda, Anda harus memublikasikan assetlinks.json yang valid di setiap domain. Misalnya, filter intent berikut menyertakan www.example.com dan mobile.example.com sebagai host URL intent yang disetujui. Jadi, assetlinks.json yang valid harus dipublikasikan di https://www.example.com/.well-known/assetlinks.json dan 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>

Atau, jika Anda mendeklarasikan hostname dengan karakter pengganti (seperti *.example.com), Anda harus memublikasikan file assetlinks.json di root hostname (example.com). Misalnya, aplikasi dengan filter intent berikut akan lolos verifikasi untuk setiap subnama example.com (seperti foo.example.com) selama file assetlinks.json dipublikasikan di 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>

Periksa beberapa aplikasi yang terkait dengan domain yang sama

Jika Anda memublikasikan beberapa aplikasi yang masing-masing terhubung dengan domain yang sama, aplikasi tersebut masing-masing dapat diverifikasi dengan sukses. Namun, jika aplikasi dapat menyelesaikan host domain dan jalurnya yang sama persis, seperti yang terjadi pada aplikasi versi ringan dan lengkap, hanya aplikasi yang baru saja diinstal yang dapat menyelesaikan intent web untuk domain tersebut.

Dalam kasus seperti ini, periksa kemungkinan adanya aplikasi yang bentrok di perangkat pengguna, asalkan Anda memiliki visibilitas paket yang diperlukan. Kemudian, di aplikasi Anda, tampilkan dialog pemilih kustom yang berisi hasil dari memanggil queryIntentActivities. Pengguna dapat memilih aplikasi yang disukai dari daftar aplikasi yang cocok yang muncul dalam dialog.