Jika android:autoVerify="true"
ada di setidaknya salah satu filter
intent aplikasi Anda, menginstal aplikasi Anda 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 mencakup hal berikut:
- Sistem memeriksa semua filter intent yang menyertakan salah satu dari berikut ini:
- Tindakan:
android.intent.action.VIEW
- Kategori:
android.intent.category.BROWSABLE
danandroid.intent.category.DEFAULT
- Skema data:
http
atauhttps
- Tindakan:
- Untuk setiap nama host unik yang ditemukan pada filter intent di atas, Android akan mengkueri situs yang sesuai untuk file Digital Asset Links di
https:///.well-known/assetlinks.json
.
Setelah mengonfirmasi daftar situs yang akan dikaitkan dengan aplikasi Anda, dan Anda 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 Anda 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 radio 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 dihubungkan 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.