Link Aplikasi Android adalah jenis deep link khusus yang memungkinkan URL situs Anda segera membuka konten terkait di aplikasi Android (tanpa mengharuskan pengguna memilih aplikasi).
Untuk menambahkan Link Aplikasi Android ke aplikasi Anda, tentukan filter intent yang membuka konten aplikasi Anda menggunakan URL HTTP (seperti yang dijelaskan dalam Membuat Deep Link ke Konten Aplikasi), dan pastikan bahwa Anda memiliki aplikasi dan URL situs (seperti yang dijelaskan dalam panduan ini). Jika sistem berhasil memverifikasi bahwa URL adalah milik Anda, sistem akan secara otomatis mengarahkan intent URL tersebut ke aplikasi Anda.
Untuk memverifikasi kepemilikan aplikasi dan situs Anda, diperlukan langkah-langkah berikut:
- Minta verifikasi link aplikasi otomatis di manifes Anda. Hal ini akan memberi sinyal ke sistem Android bahwa sistem harus memastikan bahwa aplikasi Anda adalah milik domain URL yang digunakan dalam filter intent.
- Deklarasikan hubungan antara situs web 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:
Perbedaan antara deep link dan link aplikasi
Deep link adalah filter intent yang memungkinkan pengguna untuk secara langsung memasukkan aktivitas tertentu dalam aplikasi Android Anda. Mengklik salah satu link ini dapat membuka dialog disambiguasi, yang memungkinkan pengguna memilih salah satu dari beberapa aplikasi (termasuk milik Anda) yang dapat menangani URL yang ditentukan. Misalnya, gambar 1 menunjukkan dialog disambiguasi setelah pengguna mengklik link peta, yang menanyakan apakah akan membuka link di Maps atau Chrome.

Gambar 1. Dialog disambiguasi
Link Aplikasi Android adalah deep link yang didasarkan pada URL situs yang telah diverifikasi sebagai bagian dari situs Anda. Jadi, mengklik salah satunya akan langsung membuka aplikasi Anda jika sudah diinstal, dan dialog disambiguasi tidak akan muncul. Meskipun begitu, pengguna tetap dapat mengubah preferensi untuk menangani link ini.
Tabel berikut menjelaskan perbedaan yang lebih spesifik.
Deep link | Link aplikasi | |
---|---|---|
http , https , atau skema kustom |
Memerlukan http atau https |
|
Tindakan intent | Tindakan apa pun | Memerlukan android.intent.action.VIEW |
Kategori intent | Kategori apa pun | Memerlukan android.intent.category.BROWSABLE
dan android.intent.category.DEFAULT |
Verifikasi link | Tak Ada | Membutuhkan file Digital Asset Links yang tersedia di situs Anda dengan HTTPS |
Pengalaman pengguna | Dapat menampilkan dialog disambiguasi bagi pengguna untuk memilih aplikasi mana yang dipakai untuk membuka link | Tidak ada dialog; aplikasi akan terbuka untuk menangani link situs Anda |
Kompatibilitas | Semua versi Android | Android 6.0 dan lebih tinggi |
Meminta verifikasi link aplikasi
Untuk mengaktifkan verifikasi penanganan link untuk aplikasi Anda, tetapkan android:autoVerify="true"
pada salah satu filter intent URL web di manifes aplikasi Anda
yang menyertakan tindakan intent android.intent.action.VIEW
dan
kategori intent android.intent.category.BROWSABLE
,
seperti yang ditampilkan dalam cuplikan kode manifes berikut:
<activity ...> <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" android:host="www.example.com" /> <data android:scheme="https" /> </intent-filter> </activity>
Jika android:autoVerify="true"
ada di salah satu filter intent Anda,
menginstal aplikasi di perangkat dengan Android 6.0 dan versi yang lebih tinggi menyebabkan sistem
mencoba memverifikasi semua host yang terkait dengan URL pada salah satu filter intent aplikasi Anda.
Verifikasi mencakup hal-hal berikut:
- Sistem memeriksa semua filter intent yang meliputi:
- 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
.
Hanya jika sistem menemukan file Digital Asset Links yang cocok untuk semua host di manifes, barulah sistem menetapkan aplikasi Anda sebagai pengendali default untuk pola URL yang ditentukan.
Mendukung penautan aplikasi untuk beberapa host
Sistem harus dapat memverifikasi setiap host yang ditetapkan dalam elemen data filter intent URL aplikasi dengan file Digital Asset Links yang dihosting pada semua domain web masing-masing. Jika ada verifikasi yang gagal, aplikasi tidak akan diverifikasi sebagai pengendali default untuk pola URL mana pun yang ditentukan dalam filter intent aplikasi tersebut. Sistem kemudian secara default kembali ke perilaku standar untuk menyelesaikan intent, seperti yang dijelaskan dalam Membuat Deep Link ke Konten Aplikasi.
Contohnya, aplikasi dengan filter intent
berikut akan gagal verifikasi jika file assetlinks.json
tidak ditemukan di
https://www.example.com/.well-known/assetlinks.json
dan
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" android:host="www.example.com" /> <data android:scheme="https" /> </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" android:host="www.example.net" /> </intent-filter> </activity> </application>
Ingat bahwa 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 menyatakan
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" android:host="www.example.com" /> <data android:scheme="https" 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 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" android:host="*.example.com" /> </intent-filter> </activity> </application>
Mendeklarasikan keterkaitan situs
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:$ keytool -list -v -keystore my-release-key.keystore
Kolom ini mendukung beberapa sidik jari, yang dapat digunakan untuk mendukung versi aplikasi Anda yang berbeda, seperti build produksi dan debug.
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:
https://www.example.com/.well-known/assetlinks.json
[{ "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
):
https://www.example.net/.well-known/assetlinks.json
[{ "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) dan dapat diakses oleh bot (robots.txt
Anda harus mengizinkan crawling/.well-known/assetlinks.json
. - 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.
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
Menguji intent URL
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 agar 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"
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 semua situs yang Anda tetapkan dalam filter intent aplikasi, dan 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" android:host="www.example.com" /> <data android:scheme="https" 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" 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" 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" 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" 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.