Link Aplikasi Android adalah jenis deep link khusus yang memungkinkan URL situs Anda segera membuka konten terkait di aplikasi Android, tanpa memerlukan pengguna untuk memilih aplikasi. Link Aplikasi Android menggunakan Digital Asset Links API untuk membangun kepercayaan bahwa aplikasi Anda telah disetujui oleh situs untuk otomatis membuka link untuk domain tersebut. Jika sistem berhasil memverifikasi bahwa Anda memiliki URL, sistem akan secara otomatis mengarahkan intent URL tersebut ke aplikasi Anda.
Untuk memverifikasi bahwa Anda adalah pemilik URL aplikasi dan situs, selesaikan langkah-langkah berikut:
Menambahkan filter intent yang berisi atribut
autoVerify
. Atribut ini memberi sinyal ke sistem bahwa sistem harus memverifikasi apakah aplikasi Anda termasuk dalam domain URL yang digunakan dalam filter intent.Deklarasikan pengaitan antara situs dan filter intent Anda dengan menghosting file JSON Digital Asset Links di lokasi berikut:
https://domain.name/.well-known/assetlinks.json
Anda dapat menemukan informasi terkait dalam referensi berikut:
Menambahkan filter intent untuk verifikasi link aplikasi
Untuk mengaktifkan verifikasi penanganan link untuk aplikasi Anda, tambahkan filter intent yang cocok dengan format berikut:
<!-- 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 shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<!-- Do not include other schemes. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Meskipun menyertakan autoVerify
hanya dalam satu deklarasi <intent-filter>
untuk setiap host sudah dianggap cukup, meskipun host tersebut digunakan di seluruh deklarasi
yang tidak ditandai lainnya, sebaiknya Anda menambahkan autoVerify
ke setiap
elemen <intent-filter>
agar konsisten. Hal ini juga memastikan bahwa, setelah
menghapus atau memfaktorkan ulang elemen dalam file manifes, aplikasi Anda tetap terkait
dengan semua domain yang masih Anda tentukan.
Proses verifikasi domain memerlukan koneksi internet dan dapat memakan waktu beberapa
saat hingga selesai. Untuk membantu meningkatkan efisiensi proses, sistem
akan memverifikasi domain untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi
hanya jika domain tersebut berada dalam elemen <intent-filter>
yang berisi
format persis yang ditentukan dalam cuplikan kode sebelumnya.
Misalnya, skema selain "http" dan "https", seperti <data android:scheme="custom" />
, akan mencegah <intent-filter>
memicu verifikasi domain.
Mendukung penautan aplikasi untuk beberapa host
Sistem harus dapat memverifikasi host yang ditentukan dalam elemen data filter intent URL aplikasi terhadap file Digital Asset Links yang dihosting di masing-masing domain web dalam filter intent tersebut. Jika verifikasi gagal, sistem akan secara default 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 lain aplikasi.
Catatan: Di Android 11 (API level 30) dan yang lebih rendah, sistem tidak memverifikasi aplikasi Anda sebagai pengendali default kecuali jika menemukan file Digital Asset Links yang cocok untuk semua host yang Anda tentukan dalam manifes.
Contohnya, aplikasi dengan filter intent
berikut akan lulus 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>
Catatan: Semua elemen <data>
dalam filter intent yang sama
akan digabungkan untuk memperhitungkan semua variasi atribut gabungannya. Misalnya, filter intent pertama di atas menyertakan elemen <data>
yang hanya mendeklarasikan
skema HTTPS. Namun, filter tersebut dikombinasikan dengan elemen <data>
lainnya sehingga filter intent
mendukung http://www.example.com
dan https://www.example.com
.
Dengan demikian, Anda harus membuat filter intent yang terpisah jika ingin menentukan kombinasi tertentu dari domain dan skema URI.
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 meneruskan
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>
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.
Mendeklarasikan pengaitan situs web
File JSON Digital Asset Links harus dipublikasikan di situs Anda untuk menunjukkan aplikasi Android yang terkait dengan situs dan memverifikasi intent URL aplikasi. File JSON menggunakan kolom berikut untuk mengidentifikasi aplikasi terkait:
package_name
: ID aplikasi yang dideklarasikan dalam filebuild.gradle
aplikasi.sha256_cert_fingerprints
: Sidik jari SHA256 dari sertifikat penandatanganan aplikasi Anda. Anda dapat menggunakan perintah berikut untuk membuat sidik jari melalui keytool Java: Kolom ini mendukung beberapa sidik jari, yang dapat digunakan untuk mendukung versi aplikasi Anda yang berbeda, seperti build produksi dan debug.keytool -list -v -keystore my-release-key.keystore
Jika Anda menggunakan Penandatanganan Aplikasi Play untuk aplikasi, sidik jari sertifikat yang dihasilkan dengan menjalankan
keytool
secara lokal biasanya tidak akan cocok dengan sidik jari yang ada di perangkat pengguna. Anda dapat memverifikasi apakah Anda menggunakan Penandatanganan Aplikasi Play untuk aplikasi Anda di akun developer Konsol Play di bagianRelease > Setup > App signing
; jika ya, Anda juga akan menemukan cuplikan JSON Digital Asset Links yang benar untuk aplikasi Anda di halaman yang sama.
Contoh file assetlinks.json
berikut memberikan hak untuk membuka link ke
aplikasi Android com.example
:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Mengaitkan situs dengan beberapa aplikasi
Situs dapat mendeklarasikan keterkaitan dengan beberapa aplikasi dalam file assetlinks.json
yang sama. Daftar file berikut menunjukkan contoh file pernyataan yang mendeklarasikan keterkaitan
dengan dua aplikasi, secara terpisah, dan berada di
https://www.example.com/.well-known/assetlinks.json
:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.puppies.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }, { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.monkeys.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Aplikasi berbeda dapat menangani link untuk resource yang berbeda dengan host web yang sama. Misalnya,
app1 dapat mendeklarasikan filter intent untuk https://example.com/articles
, dan app2 dapat mendeklarasikan
filter intent untuk https://example.com/videos
.
Catatan: Beberapa aplikasi yang telah dikaitkan dengan domain dapat ditandatangani dengan sertifikat yang sama atau berbeda.
Mengaitkan beberapa situs dengan satu aplikasi
Beberapa situs dapat mendeklarasikan keterkaitan dengan aplikasi yang sama
pada file assetlinks.json
masing-masing. Daftar file berikut menunjukkan
contoh cara mendeklarasikan keterkaitan example.com dan
example.net dengan app1. Daftar pertama menunjukkan keterkaitan example.com
dengan app1:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Daftar berikutnya menunjukkan keterkaitan example.net dengan app1. Yang berbeda
hanya lokasi tempat file-file ini dihosting (.com
dan .net
):
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Memublikasikan file verifikasi JSON
Anda harus memublikasikan file verifikasi JSON Anda di lokasi berikut:
https://domain.name/.well-known/assetlinks.json
Pastikan hal-hal berikut:
- File
assetlinks.json
ditayangkan dengan jenis kontenapplication/json
. - File
assetlinks.json
harus dapat diakses melalui sambungan HTTPS, terlepas apakah filter intent aplikasi Anda mendeklarasikan HTTPS sebagai skema data. - File
assetlinks.json
harus dapat diakses tanpa pengalihan apa pun (tanpa pengalihan 301 atau 302). - Jika link aplikasi Anda mendukung beberapa domain host, Anda harus memublikasikan
file
assetlinks.json
di setiap domain. Lihat Mendukung penautan aplikasi untuk beberapa host. - Jangan memublikasikan aplikasi dengan URL dev/test dalam file manifes yang mungkin tidak dapat diakses oleh publik (seperti yang hanya dapat diakses dengan VPN). Salah satu penyelesaian untuk kasus tersebut adalah mengonfigurasi varian build guna menghasilkan file manifes berbeda untuk build dev.
Verifikasi Link Aplikasi Android
Jika android:autoVerify="true"
ada di setidaknya salah satu filter intent
aplikasi Anda, menginstal aplikasi di perangkat yang menjalankan Android 6.0 (API level 23) atau
yang lebih tinggi akan menyebabkan sistem otomatis memverifikasi host yang terkait dengan
URL di filter intent aplikasi Anda. Di Android 12 dan yang lebih baru, Anda
juga dapat memanggil proses verifikasi secara manual untuk
menguji logika verifikasi.
Verifikasi otomatis
Verifikasi otomatis sistem melibatkan hal-hal berikut:
- Sistem memeriksa semua filter intent yang menyertakan salah satu dari hal berikut:
- Tindakan:
android.intent.action.VIEW
- Kategori:
android.intent.category.BROWSABLE
danandroid.intent.category.DEFAULT
- Skema data:
http
atauhttps
- Tindakan:
- Untuk setiap hostname unik yang ditemukan pada filter intent di atas, Android akan mengkueri
situs yang sesuai untuk file Digital Asset Links di
https://hostname/.well-known/assetlinks.json
.
Setelah mengonfirmasi daftar situs yang akan dikaitkan dengan aplikasi Anda, dan telah mengonfirmasi bahwa file JSON yang dihosting sudah valid, instal aplikasi di perangkat Anda. Tunggu setidaknya 20 detik hingga proses verifikasi asinkron selesai. Gunakan perintah berikut untuk memeriksa apakah sistem telah memverifikasi aplikasi dan menetapkan kebijakan penanganan link yang benar:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
Verifikasi manual
Mulai di Android 12, Anda dapat memanggil verifikasi domain untuk aplikasi yang diinstal di perangkat secara manual. Baik aplikasi Anda menargetkan Android 12 maupun tidak, Anda tetap dapat menjalankan proses ini.
Membuat koneksi internet
Untuk melakukan verifikasi domain, perangkat uji harus terhubung ke internet.
Mendukung proses verifikasi domain yang diupdate
Jika aplikasi Anda menargetkan Android 12 atau yang lebih tinggi, sistem akan menggunakan proses verifikasi domain yang diperbarui secara otomatis.
Jika tidak, Anda dapat mengaktifkan proses verifikasi yang diperbarui secara manual. Untuk melakukannya, jalankan perintah berikut di jendela terminal:
adb shell am compat enable 175408749 PACKAGE_NAME
Mereset status Link Aplikasi Android di perangkat
Sebelum menjalankan verifikasi domain secara manual di perangkat, Anda harus mereset status Link Aplikasi Android di perangkat pengujian. Untuk melakukannya, jalankan perintah berikut di jendela terminal:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
Perintah ini menempatkan perangkat dalam keadaan yang sama seperti sebelum pengguna memilih aplikasi default untuk domain apa pun.
Memanggil proses verifikasi domain
Setelah mereset status Link Aplikasi Android di perangkat, Anda dapat melakukannya sendiri. Untuk melakukannya, jalankan perintah berikut di jendela terminal:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
Meninjau hasil verifikasi
Setelah memberikan waktu kepada agen verifikasi untuk menyelesaikan permintaannya, tinjau hasil verifikasi. Untuk melakukannya, jalankan perintah berikut:
adb shell pm get-app-links PACKAGE_NAME
Output perintah ini mirip dengan contoh berikut:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
Domain yang berhasil lulus verifikasi memiliki status
verifikasi domain verified
. Status lainnya menunjukkan bahwa verifikasi domain tidak dapat
dilakukan. Secara khusus, status none
menunjukkan bahwa agen
verifikasi mungkin belum menyelesaikan proses verifikasi.
Daftar berikut menunjukkan kemungkinan nilai yang dapat ditampilkan oleh verifikasi domain untuk domain tertentu:
none
- Tidak ada yang direkam untuk domain ini. Tunggu beberapa menit lagi agar agen verifikasi menyelesaikan permintaan yang terkait dengan verifikasi domain, lalu aktifkan proses verifikasi domain lagi.
verified
- Domain untuk aplikasi pendeklarasi berhasil diverifikasi.
approved
- Domain disetujui secara paksa, biasanya dengan menjalankan perintah shell.
denied
- Domain ditolak secara paksa, biasanya dengan menjalankan perintah shell.
migrated
- Sistem mempertahankan hasil dari proses sebelumnya yang menggunakan verifikasi domain lama.
restored
- Domain disetujui setelah pengguna melakukan pemulihan data. Domain dianggap telah diverifikasi sebelumnya.
legacy_failure
- Domain ditolak oleh pemverifikasi lama. Alasan kegagalan spesifik tidak diketahui.
system_configured
- Domain disetujui secara otomatis oleh konfigurasi perangkat.
- Kode error dari
1024
atau yang lebih tinggi Kode error kustom yang khusus untuk pemverifikasi perangkat.
Periksa kembali apakah Anda telah membuat koneksi jaringan, lalu panggil proses verifikasi domain lagi.
Meminta pengguna menghubungkan aplikasi dengan domain
Cara lain agar aplikasi untuk suatu domain disetujui adalah dengan meminta pengguna menghubungkan aplikasi Anda dengan domain tersebut.
Memastikan aplikasi untuk domain sudah disetujui
Sebelum meminta pengguna, periksa apakah aplikasi Anda merupakan pengendali default untuk
domain yang Anda tentukan di elemen <intent-filter>
. Anda dapat meminta
status persetujuan menggunakan salah satu metode berikut:
- API
DomainVerificationManager
(pada waktu proses). - Program command line (selama pengujian).
DomainVerificationManager
Cuplikan kode berikut menunjukkan cara menggunakan
API DomainVerificationManager
:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
Program command-line
Saat menguji aplikasi selama pengembangan, Anda dapat menjalankan perintah berikut untuk meminta status verifikasi domain yang dimiliki organisasi Anda:
adb shell pm get-app-links --user cur PACKAGE_NAME
Pada contoh output berikut, meskipun aplikasi gagal melakukan verifikasi untuk domain "example.org", pengguna 0 telah menyetujui aplikasi secara manual di setelan sistem, dan tidak ada paket lain yang diverifikasi untuk domain tersebut.
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
Anda juga dapat menggunakan perintah shell untuk menyimulasikan proses saat pengguna memilih
aplikasi mana yang terkait dengan domain tertentu. Penjelasan lengkap tentang perintah
ini tersedia dari output adb shell pm
.
Memberikan konteks untuk permintaan
Sebelum Anda membuat permintaan persetujuan domain ini, berikan beberapa konteks untuk pengguna. Misalnya, Anda dapat menampilkan layar pembuka, dialog, atau elemen UI serupa yang menjelaskan kepada pengguna mengapa aplikasi Anda harus menjadi pengendali default untuk domain tertentu.
Membuat Permintaan
Setelah pengguna memahami tindakan yang diminta oleh aplikasi Anda, buat permintaan.
Untuk melakukannya, aktifkan intent yang menyertakan tindakan intent
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
,
dan string data yang cocok
package:com.example.pkg
untuk aplikasi target, seperti yang ditampilkan di
cuplikan kode berikut:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
Saat intent dipanggil, pengguna akan melihat layar setelan yang disebut Buka secara default. Layar ini berisi tombol pilihan yang disebut Buka link yang didukung, seperti yang ditunjukkan pada gambar 1.
Saat pengguna mengaktifkan Buka link yang didukung, sekumpulan kotak centang akan muncul di bagian yang disebut Link untuk dibuka di aplikasi ini. Dari sini, pengguna dapat memilih domain yang ingin dikaitkan dengan aplikasi Anda. Mereka juga dapat memilih Tambahkan link untuk menambahkan domain, seperti yang ditunjukkan pada gambar 2. Ketika nantinya pengguna memilih link mana pun di dalam domain yang ditambahkan, link akan terbuka di aplikasi Anda secara otomatis.
Membuka domain di aplikasi Anda yang tidak dapat diverifikasi oleh aplikasi
Fungsi utama aplikasi Anda mungkin untuk membuka link sebagai pihak ketiga, tanpa kemampuan untuk memverifikasi domain yang ditangani. Jika hal ini terjadi, jelaskan kepada pengguna bahwa, pada saat mereka memilih link web, mereka tidak dapat memilih antara aplikasi pihak pertama dan aplikasi (pihak ketiga) Anda. Pengguna harus menghubungkan domain secara manual dengan aplikasi pihak ketiga.
Selain itu, pertimbangkan untuk memperkenalkan aktivitas dialog atau trampolin yang memungkinkan pengguna membuka link di aplikasi pihak pertama jika pengguna lebih memilih untuk melakukannya agar bertindak sebagai proxy. Sebelum menyiapkan dialog atau aktivitas trampolin, siapkan aplikasi Anda sehingga memiliki visibilitas paket ke aplikasi pihak pertama yang cocok dengan filter intent web aplikasi Anda.
Menguji link aplikasi
Saat mengimplementasikan fitur penautan aplikasi, Anda harus menguji fungsi link 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.
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:scheme
dengan nilaihttp
atauhttps
- Atribut
android:host
dengan pola URL domain - Element 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 dihosting dan didefinisikan dengan benar:
https://digitalassetlinks.googleapis.com/v1/statements:list? source.web.site=https://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
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
Selain itu, perintah berikut juga melakukan hal yang sama:
adb shell dumpsys package d
Catatan: Pastikan Anda menunggu setidaknya 20 detik setelah penginstalan aplikasi agar sistem menyelesaikan proses verifikasi.
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 keberhasilan verifikasi.
Catatan: Jika pengguna mengubah setelan link aplikasi untuk suatu aplikasi sebelum verifikasi selesai, Anda mungkin melihat informasi keberhasilan verifikasi yang keliru, meskipun sebenarnya verifikasi gagal. Namun, kegagalan verifikasi ini bukanlah masalah jika pengguna secara eksplisit mengaktifkan aplikasi untuk membuka link yang didukung tanpa bertanya. Hal ini karena preferensi pengguna lebih diutamakan daripada verifikasi program (atau ketiadaan verifikasi ini). Akibatnya, link akan langsung menuju aplikasi Anda, tanpa menampilkan dialog, seakan-akan verifikasi telah berhasil.
Contoh pengujian
Agar verifikasi link aplikasi berhasil, sistem harus dapat memverifikasi aplikasi 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:
<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> <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 di atas adalah:
www.example.com mobile.example.com www.example2.com account.example.com
Daftar host yang tidak akan coba diverifikasi oleh platform dari manifes di atas 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.
Memperbaiki error penerapan umum
Jika Anda tidak dapat memverifikasi Link Aplikasi Android, periksa error umum
berikut. Bagian ini menggunakan example.com
sebagai nama domain placeholder; saat
melakukan pemeriksaan ini, ganti example.com
dengan nama domain
aktual server Anda.
- Penyiapan filter intent salah
- Periksa apakah Anda menyertakan URL yang bukan milik aplikasi Anda dalam
elemen
<intent-filter>
. - Konfigurasi server salah
Periksa konfigurasi JSON server Anda, dan pastikan nilai SHA tepat.
Selain itu, pastikan
example.com.
(dengan titik di akhir) menayangkan konten yang sama denganexample.com
.- Pengalihan sisi server
Sistem tidak memverifikasi Link Aplikasi Android apa pun untuk aplikasi Anda jika Anda menyiapkan pengalihan seperti berikut:
http://example.com
hinggahttps://example.com
example.com
hinggawww.example.com
Perilaku ini melindungi keamanan aplikasi Anda.
- Ketahanan server
Periksa apakah server Anda dapat terhubung ke aplikasi klien.
- Link yang tidak dapat diverifikasi
Untuk tujuan pengujian, Anda mungkin sengaja menambahkan link yang tidak dapat diverifikasi. Perlu diingat bahwa, di Android 11 dan yang lebih lama, link ini menyebabkan sistem tidak memverifikasi semua Link Aplikasi Android untuk aplikasi Anda.
- Tanda tangan salah di assetlinks.json
Pastikan tanda tangan Anda sudah benar dan cocok dengan tanda tangan yang digunakan untuk menandatangani aplikasi. Kesalahan umum meliputi:
- Menandatangani aplikasi dengan sertifikat debug dan hanya memiliki tanda tangan
rilis di
assetlinks.json
. - Memiliki tanda tangan huruf kecil di
assetlinks.json
. Tanda tangan harus dalam huruf besar. - Jika Anda menggunakan Penandatanganan Aplikasi Play, pastikan Anda menggunakan tanda tangan yang digunakan Google untuk menandatangani setiap rilis. Anda dapat memverifikasi detail ini, termasuk cuplikan JSON lengkap, dengan mengikuti petunjuk tentang mendeklarasikan pengaitan situs.
- Menandatangani aplikasi dengan sertifikat debug dan hanya memiliki tanda tangan
rilis di