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:
- 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. - 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 tambahkanautoVerify="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 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 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.
Kompatibilitas mundur Link Aplikasi Dinamis untuk Android 14 dan yang lebih rendah
Fitur Deep Link Dinamis, 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 pembaruan dinamis khusus jalur dari
assetlinks.json tidak diterapkan.
Artinya, jika manifes Anda hanya menentukan scheme dan host, aplikasi Anda mungkin
secara tidak terduga mengambil semua jalur untuk domain terverifikasi di Android 14 dan yang lebih lama,
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 Link Aplikasi Dinamis 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 mana pun, sekaligus tetap memungkinkan domain diverifikasi untuk digunakan dengan
Link Aplikasi Dinamis di Android 15 dan yang lebih tinggi berdasarkan aturan pencocokan lanjutan dalam aturan assetlinks.json Anda.
Memigrasikan Link Aplikasi yang ada
Jika sudah memiliki Link Aplikasi dengan aturan jalur tertentu (seperti
android:pathPrefix) dalam manifes dan ingin mulai menggunakan Link Aplikasi Dinamis
di Android 15 dan yang lebih tinggi, Anda dapat menambahkan elemen <uri-relative-filter-group>
langsung ke filter intent yang ada dengan aman.
Karena Android 14 dan yang lebih rendah mengabaikan elemen <uri-relative-filter-group>, Link Aplikasi yang ada akan terus berfungsi persis seperti sekarang di perangkat yang menjalankan Android versi 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 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.jsonAnda sebagai lapisan kedua pemfilteran terperinci. Artinya, aturan JSON sisi server pada akhirnya 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>