Saat mengimplementasikan fitur penautan aplikasi, Anda harus menguji fungsi penautan untuk memastikan sistem dapat mengaitkan aplikasi Anda dengan situs web, dan menangani permintaan URL, seperti yang Anda harapkan.
Untuk menguji file pernyataan yang ada, Anda dapat menggunakan alat Generator dan Tester Daftar Pernyataan.
Bagian berikut menjelaskan cara menguji verifikasi Link Aplikasi Anda 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 berisi 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 telah tersedia di setiap host dan subdomain yang ditentukan.
Mengonfirmasi file Digital Asset Links
Untuk setiap situs, gunakan Digital Asset Links API untuk mengonfirmasi bahwa file JSON Digital Asset Links telah di-host dan didefinisikan 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 bagi semua aplikasi di perangkat Anda yang terhubung:
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 pada perangkat, diawali oleh header dalam format berikut:
App linkages for user 0:
Setelah header ini, output menggunakan format berikut untuk mencantumkan setelan penanganan link bagi pengguna tersebut:
Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002
Daftar ini menunjukkan aplikasi mana yang terkait dengan domain untuk pengguna tersebut:
Package- Mengidentifikasi aplikasi menurut nama paket, seperti yang dideklarasikan dalam manifesnya.Domains- Menampilkan daftar lengkap host yang link webnya ditangani aplikasi ini, menggunakan spasi kosong sebagai pembatasnya.Status- Menunjukkan setelan penanganan link saat ini untuk aplikasi ini. Aplikasi yang telah lolos verifikasi, dan manifesnya berisiandroid:autoVerify="true", akan menunjukkan statusalways. Angka heksadesimal setelah status ini berkaitan dengan catatan sistem Android atas 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 tetapkan dalam filter intent tertentu yang memenuhi kriteria untuk link aplikasi. Contoh berikut menunjukkan konfigurasi manifes dengan beberapa link aplikasi yang telah 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 coba diverifikasi oleh platform dari manifes sebelumnya adalah:
www.example.com
mobile.example.com
www.example2.com
account.example.com
Daftar host yang tidak akan coba 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 daftar pernyataan lebih lanjut, lihat Membuat Daftar Pernyataan.
Mendiagnosis resolusi link dengan tanda debug-link
Mulai Android 17, Anda dapat menggunakan tanda --debug-link dengan perintah
pengelola aktivitas (am start) untuk mendiagnosis cara sistem menyelesaikan URL
tertentu. Alat ini memberikan perincian mendetail tentang aplikasi kandidat yang cocok dengan maksud, beserta aturan spesifik dari manifes aplikasi dan file assetlinks.json (untuk Deep Link Dinamis) yang dievaluasi selama penyelesaian.
Untuk menguji penyelesaian 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): Menampilkan atribut statis 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/sertakan (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 bawah domain (berfungsi sebagai karakter pengganti atau mencakup 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"
Perintah akan menampilkan 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 Deep 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 dixyz.com(catch-all).
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 izinkan umum (Aturan 1). - Oleh karena itu, aplikasi dikecualikan dari penanganan
https://xyz.com/foo, sehingga sistem akan kembali ke browser atau menampilkan dialog disambiguasi.