Saat menerapkan fitur penautan aplikasi, Anda harus menguji fungsi penautan untuk memastikan sistem dapat mengaitkan aplikasi dengan situs Anda, dan menangani permintaan URL, seperti yang Anda harapkan.
Untuk menguji file pernyataan yang ada, Anda dapat menggunakan alat Generator dan Penguji Daftar Pernyataan.
Bagian berikut menjelaskan cara menguji verifikasi Link Aplikasi secara manual. Jika mau, Anda dapat menguji verifikasi dari alat Deep Link Play atau Asisten Link Aplikasi Android Studio.
Mengonfirmasi daftar host yang akan diverifikasi
Saat menguji, Anda harus mengonfirmasi daftar host terkait yang harus diverifikasi sistem untuk aplikasi Anda. Buat daftar semua URL yang filter intent terkaitnya menyertakan atribut dan elemen berikut:
- Atribut
android:schemedengan nilaihttpatauhttps - Atribut
android:hostdengan pola URL domain - Elemen tindakan
android.intent.action.VIEW - Elemen kategori
android.intent.category.BROWSABLE
Gunakan daftar ini untuk memeriksa apakah file JSON Digital Asset Links disediakan di setiap host dan subdomain yang disebutkan.
Mengonfirmasi file Digital Asset Links
Untuk setiap situs, gunakan Digital Asset Links API untuk mengonfirmasi bahwa file JSON Digital Asset Links dihosting dan ditentukan dengan benar:
https://digitalassetlinks.googleapis.com/v1/statements:list?
source.web.site=https://<var>domain.name</var>:<var>optional_port</var>&
relation=delegate_permission/common.handle_all_urls
Untuk Link Aplikasi Dinamis, Anda juga dapat memeriksa ekstensi relasi.
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.example.com&relation=delegate_permission/common.handle_all_urls&return_relation_extensions=true
Memeriksa kebijakan link
Sebagai bagian dari proses pengujian, Anda dapat memeriksa setelan sistem saat ini untuk penanganan link. Gunakan perintah berikut untuk mendapatkan daftar kebijakan penanganan link yang ada untuk semua aplikasi di perangkat terhubung Anda:
adb shell dumpsys package domain-preferred-apps
Perintah berikut melakukan hal yang sama:
adb shell dumpsys package d
Perintah ini menampilkan daftar setiap pengguna atau profil yang ditentukan di perangkat, yang diawali dengan header dalam format berikut:
App linkages for user 0:
Setelah header ini, output menggunakan format berikut untuk mencantumkan setelan penanganan link untuk pengguna tersebut:
Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002
Listingan ini menunjukkan aplikasi mana yang terkait dengan domain mana untuk pengguna tersebut:
Package- Mengidentifikasi aplikasi berdasarkan nama paketnya, seperti yang dideklarasikan dalam manifesnya.Domains- Menampilkan daftar lengkap host yang link webnya ditangani oleh aplikasi ini, menggunakan spasi kosong sebagai pembatas.Status- Menampilkan setelan penanganan link saat ini untuk aplikasi ini. Aplikasi yang telah lulus verifikasi, dan yang manifesnya berisiandroid:autoVerify="true", akan menampilkan statusalways. Angka heksadesimal setelah status ini terkait dengan data sistem Android tentang preferensi penautan aplikasi pengguna. Nilai ini tidak menunjukkan apakah verifikasi berhasil.
Contoh pengujian
Agar verifikasi link aplikasi berhasil, sistem harus dapat memverifikasi aplikasi Anda dengan setiap situs yang Anda tentukan dalam filter intent tertentu yang memenuhi kriteria untuk link aplikasi. Contoh berikut menunjukkan konfigurasi manifes dengan beberapa link aplikasi yang ditentukan:
<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>
Daftar host yang akan dicoba diverifikasi oleh platform dari manifes sebelumnya adalah:
www.example.com
mobile.example.com
www.example2.com
account.example.com
Daftar host yang tidak akan dicoba diverifikasi oleh platform dari manifes sebelumnya adalah:
map.example.com (it does not have android.intent.category.BROWSABLE)
market://example.com (it does not have either an "http" or "https" scheme)
Untuk mempelajari lebih lanjut daftar pernyataan, lihat Membuat Daftar Pernyataan.
Mendiagnosis resolusi link dengan flag debug-link
Mulai Android 17, Anda dapat menggunakan flag --debug-link dengan perintah pengelola
aktivitas (am start) untuk mendiagnosis cara sistem me-resolve URL
tertentu. Alat ini memberikan perincian mendetail tentang aplikasi kandidat yang cocok dengan
intent, beserta aturan spesifik dari manifes aplikasi dan
file assetlinks.json (untuk Link Aplikasi Dinamis) yang dievaluasi selama
resolusi.
Untuk menguji resolusi link untuk URL tertentu, jalankan perintah berikut di jendela terminal:
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://xyz.com/foo"
Output diagnostik dicetak di bawah header App Link Resolution Debug
dan berisi bagian berikut untuk membantu Anda memahami proses
penyelesaian:
- Detail target: Mengidentifikasi setiap aplikasi kandidat yang cocok berdasarkan nama paket dan aktivitas targetnya.
- Kecocokan Filter Intent (
AndroidManifest.xml): Menunjukkan atribut statis mana dalam filter intent manifes (sepertischeme,host,path,pathPrefix, ataupathPattern) yang cocok dengan URI. - Verifikasi Link Aplikasi: Menampilkan status verifikasi domain saat ini (seperti
STATE_SUCCESS). - Link Aplikasi Dinamis: Jika aplikasi menggunakan aturan pencocokan Link Aplikasi Dinamis dalam
file
assetlinks.json-nya, bagian ini mencantumkan setiap aturan yang dievaluasi terhadap URI. Setiap aturan menunjukkan filter URI yang cocok (seperti awalan atau pola jalur) dan kolomallow:allow = 0: Aturan izinkan/penyertaan (allow: true). Jika aturan ini cocok, aplikasi diizinkan untuk membuka URI.allow = 1: Aturan pemblokiran/pengecualian (allow: false/exclude: true). Jika aturan ini cocok, aplikasi akan dicegah membuka URI.- Catatan: String filter kosong (
filter =) menunjukkan awalan jalur kosong yang cocok dengan semua jalur di domain (bertindak sebagai karakter pengganti atau penangkap semua).
Contoh output debug
Pertimbangkan aplikasi (com.example.xyzapp) yang terkait dengan domain
https://xyz.com yang menentukan aturan dinamis dalam file assetlinks.json untuk
mengecualikan /foo* sekaligus mengizinkan semua jalur lainnya:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.xyzapp",
"sha256_cert_fingerprints": ["..."]
},
"relation_extensions": {
"delegate_permission/common.handle_all_urls": {
"dynamic_app_link_components": [
{"/": "/foo*", "exclude": true},
{"/": "*"}
]
}
}
}
]
Saat mendiagnosis URL https://xyz.com/foo menggunakan --debug-link:
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://xyz.com/foo"
Output perintah menghasilkan perincian diagnostik berikut:
--- App Link Resolution Debug ---
URI: https://xyz.com/foo
Resolution: Ambiguous (Multiple apps or Browser fallback)
This usually happens when multiple apps can handle the link and no default is set.
All Matching Candidates:
Target:
Package: com.example.xyzapp
Activity: com.example.xyzapp.MainActivity
Intent Filter Match (AndroidManifest.xml)
Scheme: 'https' matched android:scheme="https"
Host: 'xyz.com' matched android:host="xyz.com"
App Link Verification:
Verification status: STATE_SUCCESS
Dynamic App Links:
-> Matched Rule 0: UriRelativeFilterGroup { allow = 1, uri_filters = {UriRelativeFilter { uriPart = PATH, patternType = PREFIX, filter = /foo }}, }
-> Matched Rule 1: UriRelativeFilterGroup { allow = 0, uri_filters = {UriRelativeFilter { uriPart = PATH, patternType = PREFIX, filter = }}, }
Target:
Package: org.chromium.webview_shell
Activity: org.chromium.webview_shell.WebViewBrowserActivity
Intent Filter Match (AndroidManifest.xml)
Scheme: 'https' matched android:scheme="https"
---------------------------------
Starting: Intent { act=android.intent.action.VIEW dat=https://xyz.com/foo }
Dalam contoh ini, sistem mengevaluasi dua aturan Link Aplikasi Dinamis dari
assetlinks.json:
- Aturan 0 (
allow = 1,filter = /foo): Dibuat dari{"/": "/foo*", "exclude": true}, ini adalah aturan pengecualian (allow: false) yang memblokir URL yang diawali dengan awalan jalur/foo. - Aturan 1 (
allow = 0,filter =): Dibuat dari{"/": "*"}, ini adalah aturan penyertaan (allow: true) dengan awalan jalur kosong (filter =), yang cocok dengan semua jalur di bagianxyz.com(tangkap semua).
Cara kerja penyelesaian dalam skenario ini:
- Aturan 0 dan Aturan 1 cocok dengan URL
https://xyz.com/foo. - Aturan Link Aplikasi Dinamis dievaluasi dalam urutan berurutan dari atas ke bawah (aturan pertama yang cocok akan menang).
- Karena Aturan 0 muncul pertama dalam daftar pernyataan dan merupakan aturan pengecualian (
allow = 1), aturan ini lebih diutamakan daripada aturan izin umum (Aturan 1). - Oleh karena itu, aplikasi dikecualikan dari penanganan
https://xyz.com/foo, sehingga sistem akan beralih ke browser atau menampilkan dialog disambiguasi.