Link Aplikasi adalah deep link yang menggunakan skema HTTP atau HTTPS dan diverifikasi oleh Android sebagai terkait dengan situs Anda. Untuk mendaftar menangani Link Aplikasi, ikuti langkah-langkah berikut:
- Tambahkan satu atau beberapa filter Intent ke manifes aplikasi Anda yang menentukan domain atau URL situs Anda.
- Tambahkan
autoVerify="true"attributeke elemen filter Intent. Hal ini memberi sinyal kepada sistem bahwa sistem harus mencoba memverifikasi skema dan domain host terhadap konfigurasiassetlinks.jsonsitus Anda. - Deklarasikan keterkaitan situs.
Berikut adalah contoh deklarasi Link Aplikasi dengan skema dan host serta
well as 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-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 tambahkanautoVerify="true" ke setiap filter Intent yang ingin Anda verifikasi. - Elemen data: Setiap filter Intent Link Aplikasi harus menyertakan satu atau beberapa
<data>elemen yang menentukan skema dan format host yang cocok dengan domain situs Anda yang dapat diverifikasi. - Skema: Filter intent harus menyertakan elemen
<data>untuk skemahttpdanhttps. 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 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 host diverifikasi, aplikasi akan menjadi pengendali default untuk link dari host yang diverifikasi tersebut. Di Android 11 dan yang lebih rendah, verifikasi akan gagal jika satu host tidak dapat diverifikasi.
Beberapa filter Intent: Penting untuk membuat filter terpisah jika maksud Anda adalah mendeklarasikan URL unik (seperti kombinasi spesifik skema dan host), karena beberapa
<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 Dynamic App Links 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 akan dapat menambahkan jalur Link Aplikasi 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 standar 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.
Contohnya, aplikasi dengan filter intent berikut hanya akan meneruskan verifikasi
hanya untuk https://www.example.com jika file assetlinks.json ditemukan di
https://www.example.com/.well-known/assetlinks.json, tetapi tidak di
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
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>
Selain itu, 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 meneruskan verifikasi untuk setiap sub-nama 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>
Memeriksa 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.
Kompatibilitas mundur Dynamic App Links untuk Android 14 dan yang lebih rendah
Fitur Dynamic App Link, termasuk aturan pencocokan lanjutan di
assetlinks.json dan penggunaan <uri-relative-filter-group>, hanya didukung sepenuhnya di Android 15 (level API 35) dan yang lebih tinggi.
Di Android 14 (level API 34) dan yang lebih rendah, sistem hanya mempertimbangkan scheme
dan host yang dideklarasikan dalam elemen <data> manifes Anda untuk verifikasi Link Aplikasi. Aturan, pengecualian, dan update dinamis khusus jalur dari assetlinks.json tidak diterapkan.
Artinya, jika manifes Anda hanya menentukan scheme dan host, aplikasi Anda mungkin secara tidak terduga akan menangkap semua jalur untuk domain yang diverifikasi di Android 14 dan yang lebih rendah, terlepas dari aturan khusus jalur yang ditentukan dalam assetlinks.json untuk Android 15 dan yang lebih tinggi.
Strategi penggantian untuk versi Android yang lebih rendah yang akan dikonfigurasi tanpa deep link
Untuk mencegah aplikasi Anda menangani semua link untuk domain di Android 14 dan yang lebih rendah saat Anda ingin menggunakan Dynamic App Links untuk jalur yang lebih spesifik di Android 15 dan yang lebih tinggi, sertakan jalur yang tidak cocok dalam filter intent manifes Anda.
Tambahkan elemen <data> dengan atribut android:path yang kemungkinan tidak akan
pernah menjadi jalur yang valid untuk link Anda. Hal ini memastikan bahwa filter intent tidak cocok dengan semua jalur pada versi yang lebih rendah.
Contoh:
<activity
android:name=".MainActivity"
android:exported="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" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<!-- Add a non-matching path for backward compatibility -->
<data android:path="/no_match_for_older_android_versions" />
<uri-relative-filter-group android:allow="true">
<data android:pathPattern="/.*"/>
</uri-relative-filter-group>
</intent-filter>
</activity>
Dengan menambahkan <data android:path="/no_match_for_older_android_versions" />, Anda
memastikan bahwa di Android 14 dan yang lebih rendah, filter intent ini tidak cocok dengan
link masuk, sekaligus memungkinkan domain diverifikasi untuk digunakan dengan
Dynamic App Links di Android 15 dan yang lebih tinggi berdasarkan aturan pencocokan lanjutan
dalam aturan assetlinks.json Anda.
Migrasi Link Aplikasi yang ada
Jika Anda sudah memiliki Link Aplikasi dengan aturan jalur tertentu (seperti
android:pathPrefix) dalam manifes dan ingin mulai menggunakan Dynamic App Links
di Android 15 dan yang lebih tinggi, Anda dapat menambahkan elemen <uri-relative-filter-group>
secara langsung ke filter intent yang ada.
Karena Android 14 dan yang lebih rendah mengabaikan elemen <uri-relative-filter-group>,
Link Aplikasi yang ada akan terus berfungsi seperti sekarang di perangkat
yang menjalankan Android versi yang lebih rendah.
Namun, Anda harus mempertimbangkan dengan cermat cara Android 15 dan yang lebih tinggi mengevaluasi konfigurasi "campuran":
- Pemfilteran dua lapis: Di Android 15 dan yang lebih tinggi, sistem mengevaluasi filter intent sebagai gabungan. URL akan lulus pemeriksaan manifes jika memenuhi
tag
<data>statis lama atau aturan luas di<uri-relative-filter-group>. Setelah URL lulus pemeriksaan manifes awal ini, sistem akan menerapkan aturan dinamis yang ditentukan dalam fileassetlinks.jsonsebagai lapisan kedua pemfilteran mendetail. Artinya, aturan JSON sisi server pada akhirnya akan menentukan URL yang cocok yang benar-benar membuka aplikasi.
Contoh konfigurasi hybrid:
<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="www.example.com" />
<!-- Legacy rule: Android 14 and lower use this. Android 15 and higher
also use this. -->
<data android:pathPrefix="/store" />
<!--
Dynamic rule: Android 14 and lower ignore this. Android 15 and higher
evaluate this as a union between all paths and the configuration
specified in the assetlinks.json file. Make sure to apply further
refinements in the assetlinks.json file to prevent all URL paths from
opening in the app.
-->
<uri-relative-filter-group android:allow="true">
<data android:pathPrefix="/" />
</uri-relative-filter-group>
</intent-filter>