Deep linking memungkinkan Anda mengarahkan pengguna langsung ke aplikasi dari browser web, notifikasi, media sosial, iklan, dan sumber lainnya. Deep link menyediakan transisi langsung dari aplikasi ke aplikasi dan dari web ke aplikasi yang dapat membantu Anda meningkatkan engagement melalui konten yang kontekstual dan bertarget.
Panduan ini menjelaskan cara kerja deep linking serta cara membuat dan menguji deep link ke konten Anda.
Untuk deep link yang mereferensikan situs atau domain Anda sendiri, sebaiknya gunakan App Links, yang memberikan pengalaman yang lancar dan tepercaya bagi pengguna Anda.
Cara kerja deep linking
Deep linking adalah kemampuan sistem umum Android, yang didukung di semua versi, di semua perangkat. Fitur ini memanfaatkan sistem Intent Android untuk merutekan deep link ke aplikasi yang diminati. Aplikasi yang ingin menangani URI deep link tertentu mendeklarasikan filter Intent yang cocok dalam file manifes aplikasi.
Saat runtime, saat pengguna mengetuk link, Android akan memicu intent dan mencoba merutekannya ke aplikasi. Karena beberapa aplikasi dapat mendeklarasikan filter intent yang cocok dengan URI tertentu, Android akan melakukan tindakan ini, dalam urutan ini, untuk merutekan intent:
- Membuka aplikasi default pengguna yang dapat menangani URI, jika ada yang ditetapkan.
- Membuka satu-satunya aplikasi yang tersedia yang dapat menangani URI.
- Mengizinkan pengguna memilih aplikasi dari dialog disambiguasi.
Artinya, meskipun filter intent Anda cocok dengan URI tertentu, tidak ada jaminan bahwa sistem akan merutekan intent deep link ke aplikasi Anda. Pengguna memiliki peran penting dalam mengelola aplikasi mana yang menangani intent, sehingga memberi mereka kontrol dan menawarkan pilihan. Untuk kontrol yang lebih besar atas deep link ke situs dan domain Anda sendiri, coba gunakan Link Aplikasi.
Dialog disambiguasi Android memungkinkan pengguna melihat semua aplikasi terinstal yang telah terdaftar untuk menangani intent deep link. Pengguna juga dapat memilih aplikasi sebagai default untuk jenis link ini. Setelah pengguna menetapkan aplikasi default, sistem tidak akan lagi menampilkan dialog untuk intent tertentu tersebut, dan aplikasi yang dipilih akan terbuka secara otomatis.
Gambar 1. Dialog disambiguasi
Perilaku dialog penghilangan ambiguitas telah berkembang di seluruh versi Android. Misalnya, di Android 12 dan yang lebih tinggi, link web yang bukan Link Aplikasi terverifikasi umumnya akan dibuka di browser web secara default, sedangkan di versi sebelumnya, dialog disambiguasi mungkin muncul jika aplikasi dapat menangani link web.
Catatan: Mulai Android 12 (level API 31), intent web generik berubah menjadi aktivitas dalam aplikasi Anda hanya jika aplikasi disetujui untuk domain tertentu yang terdapat dalam intent web tersebut. Jika aplikasi Anda untuk domain tidak disetujui, intent web akan ditetapkan ke aplikasi browser default pengguna.
Jenis deep link
Ada tiga jenis deep link yang dapat Anda dukung di Android:
- Deep link kustom: Ini adalah deep link yang menggunakan skema URI kustom (seperti
example://products/123
) untuk mengarahkan pengguna langsung ke konten tertentu dalam aplikasi. Deep link ini sangat berguna untuk navigasi internal atau link dari sumber yang Anda kontrol, tetapi bukan link web standar dan masih dapat memicu dialog disambiguasi jika aplikasi lain mendaftarkan skema kustom yang sama. - Link web: Ini adalah deep link yang menggunakan skema
http
danhttps
standar. URL ini lebih serbaguna karena merupakan URL standar, tetapi di Android 12 dan yang lebih tinggi, URL ini hampir selalu memicu dialog disambiguasi, yang berarti bahwa URL ini kemungkinan akan ditangani oleh browser web pengguna secara default, bukan dirutekan ke aplikasi Anda. - Link Aplikasi: Tersedia sejak Android 6.0 (level API 23), ini adalah link web yang terverifikasi. Melalui proses asosiasi situs, Anda dapat membuktikan kepada sistem Android bahwa Anda memiliki domain tersebut. Setelah diverifikasi, sistem akan otomatis mengarahkan link untuk domain tersebut langsung ke aplikasi Anda, sehingga dialog disambiguasi tidak ditampilkan. Hal ini menciptakan pengalaman yang tepercaya dan lancar bagi pengguna Anda.
Menambahkan filter intent untuk link masuk
Untuk membuat link ke konten aplikasi Anda, tambahkan filter intent yang berisi elemen dan nilai atribut berikut dalam manifes Anda:
Menetapkan tindakan intent ACTION_VIEW
sehingga filter intent dapat diakses dari Google Penelusuran.
Tambahkan satu atau beberapa tag <data>
, yang masing-masing merepresentasikan format URI yang ditetapkan ke aktivitas. Setidaknya, tag <data>
harus menyertakan atribut
android:scheme
.
Anda dapat menambahkan atribut lainnya untuk lebih mempersempit jenis URI yang diterima aktivitas. Misalnya, Anda mungkin memiliki beberapa aktivitas yang menerima URI serupa, tetapi hanya dibedakan menurut nama jalur. Dalam hal ini, gunakan atribut
android:path
atau varian pathPattern
atau pathPrefix
-nya untuk
membedakan aktivitas mana yang harus dibuka sistem untuk jalur URI yang berbeda.
Sertakan kategori BROWSABLE
. Diperlukan agar filter intent dapat diakses dari browser web. Tanpanya, mengklik link di browser tidak dapat membawanya ke aplikasi Anda.
Sertakan juga kategori DEFAULT
. Elemen ini memungkinkan aplikasi Anda merespons
intent implisit. Tanpanya, aktivitas hanya dapat dimulai jika intent
menentukan nama komponen aplikasi Anda.
Cuplikan XML berikut menunjukkan cara agar Anda dapat menentukan filter intent dalam
manifes untuk deep linking. URI "example://gizmos"
dan
"http://www.example.com/gizmos"
keduanya ditetapkan untuk aktivitas ini.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
Perhatikan bahwa dua filter intent hanya berbeda berdasarkan elemen <data>
. Meskipun
Anda dapat menyertakan beberapa elemen <data>
dalam filter yang sama, Anda
harus membuat filter terpisah jika ingin mendeklarasikan
URL unik (seperti kombinasi scheme
dan host
tertentu), karena
beberapa elemen <data>
dalam filter intent yang sama sebenarnya digabungkan
untuk memperhitungkan semua variasi atribut gabungannya. Misalnya, pertimbangkan hal berikut:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
Sepertinya ini hanya mendukung https://www.example.com
dan
app://open.my.app
. Namun, hal tersebut sebenarnya mendukung keduanya, ditambah ini: app://www.example.com
dan https://open.my.app
.
Perhatian: Jika beberapa aktivitas berisi filter intent yang ditetapkan ke Android App Link terverifikasi yang sama, maka tidak ada jaminan mengenai aktivitas mana yang menangani link tersebut.
Setelah Anda menambahkan filter intent dengan URI untuk konten aktivitas ke manifes aplikasi, Android dapat merutekan Intent
mana pun yang memiliki URI yang cocok dengan aplikasi Anda saat runtime.
Untuk mempelajari lebih lanjut cara menentukan filter intent, lihat Mengizinkan Aplikasi Lain untuk Memulai Aktivitas Anda.
Membaca data dari intent masuk
Setelah sistem memulai aktivitas melalui filter intent, Anda dapat menggunakan data yang disediakan oleh Intent
untuk menentukan apa yang perlu dirender. Panggil metode
getData()
dan getAction()
untuk mengambil data dan
tindakan yang terkait dengan Intent
yang masuk. Anda dapat memanggil metode ini kapan saja selama siklus proses aktivitas, tetapi umumnya hal ini harus dilakukan selama callback awal, misalnya onCreate()
atau onStart
.
Berikut cuplikan yang menunjukkan cara mengambil data dari Intent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
Ikuti praktik terbaik berikut untuk meningkatkan pengalaman pengguna:
- Deep link harus mengarahkan pengguna langsung ke konten, tanpa konfirmasi, halaman interstisial, atau login. Pastikan bahwa pengguna dapat melihat konten aplikasi, meskipun belum pernah membuka aplikasi tersebut. Anda dapat meminta konfirmasi kepada pengguna di interaksi berikutnya atau saat pengguna membuka aplikasi dari Peluncur.
- Ikuti panduan desain yang dijelaskan di Navigasi Mundur dan Naik sehingga aplikasi Anda sesuai dengan harapan pengguna untuk navigasi mundur setelah mereka masuk ke aplikasi Anda melalui deep link.
Menguji deep link Anda
Anda dapat menggunakan Android Debug Bridge dengan alat pengelola aktivitas (am) untuk menguji bahwa URI filter intent yang Anda tentukan untuk deep linking ditetapkan ke aktivitas aplikasi yang tepat. Anda dapat menjalankan perintah adb pada perangkat atau emulator.
Sintaks umum untuk menguji URI filter intent dengan adb adalah:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
Misalnya, perintah berikut mencoba melihat aktivitas aplikasi target yang terkait dengan URI yang ditentukan.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
Catatan: Saat menentukan kumpulan jenis primitif dalam rute, seperti
**@Serializable data class Product(val colors: List)**
, format URL deep link yang dibuat
secara otomatis adalah **basePath?colors={value**}
. Jika Anda mencoba
menentukan URI dengan beberapa parameter kueri (misalnya,
**basepath?colors=red&colors=blue**
), Anda harus meng-escape ampersand
(misalnya, **basepath?colors=red\&colors=blue**
).
Deklarasi manifes dan pengendali intent yang Anda tetapkan menentukan koneksi antara aplikasi dan situs web Anda serta apa yang harus dilakukan dengan link yang masuk. Namun, untuk meminta sistem memperlakukan aplikasi Anda sebagai pengendali default bagi seperangkat URI, Anda juga harus meminta sistem agar memverifikasi koneksi ini. Memverifikasi Link Aplikasi menjelaskan cara menerapkan verifikasi ini.
Untuk mempelajari intent dan link aplikasi lebih lanjut, lihat referensi berikut:
- Intent dan Filter Intent
- Mengizinkan Aplikasi Lain Memulai Aktivitas Anda
- Menambahkan Link Aplikasi Android dengan Android Studio