Tutorial Android Deep Link
Untuk dapat Intent ke aplikasi diluar aplikasi kita, kita dapat menggunakan Intent dengan parameter nama kelas Activity yang ingin di tuju, namun apabila Activity yang di tuju telah mengeset android:exported="false"
pada manifest nya maka kita tidak dapat menggunakan cara ini. Cara lainnya adalah dengan menggunakan deep link.
Deep Link adalah cara lain yang dapat kita gunakan untuk masuk kedalam screen spesifik pada aplikasi diluar aplikasi kita.
Contoh kasus yang pernah saya alami adalah ketika saya mengembangkan aplikasi Selly.
Di aplikasi Selly terdapat sebuah fitur untuk mengingatkan pembeli mengenai transaksi yang belum dibayar berdasarkan channel transaksi percakapan terjadi. Channel-channel saat ini yang disupport oleh Selly antara lain:
- WhatsApp Business
- Line
- Line@
Dengan fitur ini penjual dapat dengan mudah mengingatkan pembeli yang belum melakukan pembayaran hanya cukup klik tombol ingatkan pada item transaksi tertentu. Biar lebih jelas, penampakannya seperti video ini:
Cara seperti diatas dapat kita lakukan menggunakan deep link. Syarat-syarat untuk bisa melakukan mekanisme deep link adalah:
- Aplikasi tujuan support deep link.
- Kita mengetahui scheme URL aplikasi yang akan di tuju.
Dalam kasus ini, untuk dapat masuk ke dalam nya kita hanya perlu menggunakan kode seperti di bawah ini:
val phoneNumber = "0821111111"val text = "Halo, jangan lupa untuk melakukan pembayaran langsung di tempat sebesar Rp 50.000 ya. Terima kasih!"val uri = Uri.parse("whatsapp://send?text=${text.encodeURL()}")val intent = Intent(Intent.ACTION_VIEW, uri)try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
toast("Aplikasi Whatsapp belum terpasang di device kamu. Harap install terlebih dahulu.")
}
Mudah bukan?
Nah, pada kali ini saya akan memberikan sebuah tutorial sederhana membuat aplikasi yang dapat melakukan mekanisme deep link seperti halnya aplikasi WhatsApp.
Pada tutorial ini saya akan menggunakan library DeepLinkDispatch buatan Airbnb. Karena penggunaannya cukup mudah.
Airbnb DeepLinkDispatch is a simple annotation-based library for making deep link handling better on Android.
Pertama-tama kita tambahkan library nya di build.gradle
kita.
implementation 'com.airbnb:deeplinkdispatch:3.1.1'
kapt 'com.airbnb:deeplinkdispatch-processor:3.1.1'
Kemudian, jangan lupa apply plugin: 'kotlin-kapt'
khusus pengguna kotlin.
Setelah itu, kita buat loader kelas sebagai kelas yang menampung list URL yang kita miliki. Cukup dengan menggunakan annotation @DeepLinkModule. Seperti di bawah ini.
@DeepLinkModule
class AppDeepLinkModule
Setelah itu kita buat sebuah method static dengan annotation @DeepLink sebagai aksi spesifik terhadap URL yang masuk ke aplikasi kita. Seperti di bawah ini.
@DeepLink("wisnu://awesome")
fun startActivity1(context: Context): Intent {
return Intent(context, Activity1::class.java)
}// Add another URL scheme method handler
Setelah itu, kita buat sebuah activity baru, guna sebagai router yang mengarahkan deep link yang masuk ke aplikasi kita. Seperti di bawah ini.
@DeepLinkHandler(AppDeepLinkModule::class)
class DeepLinkActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val deepLinkDelegate = DeepLinkDelegate(AppDeepLinkModuleLoader())
deepLinkDelegate.dispatchFrom(this)
finish()
}
}
Kemudian jangan lupa kita set scheme yang kita support di file manifest kita khusus untuk kelas DeepLinkActivity
. Seperti di bawah ini.
<activity
android:name=".DeepLinkActivity"
android:theme="@android:style/Theme.NoDisplay">
<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:host="awesome"
android:scheme="wisnu" />
</intent-filter>
</activity>
Yap selesai, jangan lupa build appnya untuk mengenerate code dari annotation yang kita deklarasikan diatas.
Contoh penggunaan nya seperti di bawah ini.
val phoneNumber = "0821111111"val text = "Halo, jangan lupa untuk melakukan pembayaran langsung di tempat sebesar Rp 50.000 ya. Terima kasih!"val textEncoded = URLEncoder.encode(text, "UTF-8")
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("wisnu://awesome?phone=$phoneNumber&text=$textEncoded"))try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
// Handle exception
}
Demo
Full source code dapat dilihat disini.
Sumber:
https://medium.com/airbnb-engineering/deeplinkdispatch-778bc2fd54b7
Thanks for reading this article! claps ❤ if this article helpful.