Membuat deep link

Deep linking memungkinkan Anda mengarahkan pengguna langsung ke aplikasi Anda dari browser web, notifikasi, media sosial, iklan, dan sumber lainnya. Deep link menyediakan transisi langsung dari aplikasi ke aplikasi dan web ke aplikasi yang dapat membantu Anda meningkatkan engagement melalui konten kontekstual yang ditargetkan.

Panduan ini menjelaskan cara kerja deep linking serta cara membuat dan menguji deep link ke konten Anda.

Untuk deep link yang merujuk ke situs atau domain Anda sendiri, sebaiknya gunakan Link Aplikasi, 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. Library ini memanfaatkan sistem Intent Android untuk merutekan deep link ke aplikasi yang tertarik. Aplikasi yang ingin menangani URI deep link tertentu mendeklarasikan filter Intent yang cocok dalam file manifes aplikasinya.

Saat runtime, ketika 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 berikut, dalam urutan ini, untuk merutekan intent:

  1. Membuka aplikasi default pengguna yang dapat menangani URI, jika ada yang ditetapkan.
  2. Membuka satu-satunya aplikasi yang tersedia yang dapat menangani URI.
  3. Mengizinkan pengguna memilih aplikasi dari dialog disambiguasi.

Artinya, meskipun filter intent Anda cocok dengan URI tertentu, tidak ada jaminan bahwa sistem akan mengarahkan intent deep link ke aplikasi Anda. Pengguna memiliki peran penting dalam mengelola aplikasi yang menangani intent, yang 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 default, sistem tidak lagi menampilkan dialog untuk intent spesifik tersebut, dan aplikasi yang dipilih akan terbuka secara otomatis.

Dialog disambiguasi sistem Android yang menampilkan opsi aplikasi untuk link.
Gambar 1. Dialog disambiguasi

Perilaku dialog disambiguasi telah berkembang di berbagai versi Android. Misalnya, di Android 12 dan yang lebih tinggi, link web yang bukan Link Aplikasi terverifikasi umumnya akan terbuka di browser web secara default, sedangkan pada versi sebelumnya, dialog disambiguasi mungkin muncul jika aplikasi dapat menangani link web.

Jenis deep link

Ada tiga jenis deep link yang dapat Anda dukung di Android:

  • Deep link kustom: Deep link ini menggunakan skema URI kustom (seperti example://products/123) untuk mengarahkan pengguna langsung ke bagian 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 dan https standar. Link ini lebih fleksibel karena merupakan URL standar, tetapi di Android 12 dan yang lebih tinggi, link ini hampir selalu memicu dialog disambiguasi, yang berarti kemungkinan akan ditangani oleh browser web pengguna secara default, bukan dirutekan ke aplikasi Anda.
  • Link Aplikasi: Tersedia sejak Android 6.0 (level API 23), link ini adalah link web yang diverifikasi. Melalui proses pengaitan situs, Anda dapat membuktikan kepada sistem Android bahwa Anda adalah pemilik domain tersebut. Setelah diverifikasi, sistem akan otomatis mengarahkan link untuk domain tersebut langsung ke aplikasi Anda, sehingga melewati dialog disambiguasi sepenuhnya. Hal ini menciptakan pengalaman yang tepercaya dan lancar bagi pengguna Anda.

Menambahkan filter intent untuk link masuk

Untuk membuat link ke konten aplikasi, tambahkan filter intent yang berisi elemen dan nilai atribut ini dalam manifes Anda:

<action>

Tentukan tindakan intent ACTION_VIEW agar filter intent dapat dijangkau dari Google Penelusuran.

<data>

Tambahkan satu atau beberapa tag <data>, yang masing-masing mewakili format URI yang di-resolve ke aktivitas. Setidaknya, tag <data> harus menyertakan atribut android:scheme.

Anda dapat menambahkan lebih banyak atribut untuk lebih menyaring jenis URI yang diterima aktivitas. Misalnya, Anda mungkin memiliki beberapa aktivitas yang menerima URI serupa, tetapi berbeda berdasarkan jalurnya. Dalam hal ini, gunakan atribut android:path atau varian pathPattern atau pathPrefix-nya untuk membedakan aktivitas yang harus dibuka sistem untuk jalur URI yang berbeda.

<category>

Sertakan kategori BROWSABLE. Filter intent diperlukan agar filter intent dapat diakses dari browser web. Tanpa filter intent, mengklik link di browser tidak dapat mengarah ke aplikasi Anda.

Sertakan juga kategori DEFAULT. Hal ini memungkinkan aplikasi Anda merespons intent implisit. Tanpa ini, aktivitas hanya dapat dimulai jika intent menentukan nama komponen aplikasi Anda.

Cuplikan XML berikut menunjukkan cara menentukan filter intent dalam manifes Anda untuk deep linking. URI "example://gizmos" dan "http://www.example.com/gizmos" di-resolve ke 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, sebenarnya Gemini mendukung keduanya, ditambah: app://www.example.com dan https://open.my.app.

Setelah Anda menambahkan filter intent dengan URI untuk konten aktivitas ke manifes aplikasi, Android dapat merutekan Intent yang memiliki URI yang cocok ke aplikasi Anda saat runtime.

Untuk mempelajari lebih lanjut cara menentukan filter intent, lihat Mengizinkan Aplikasi Lain Memulai Aktivitas Anda.

Membaca data dari intent masuk

Setelah sistem memulai aktivitas Anda melalui filter intent, Anda dapat menggunakan data yang disediakan oleh Intent untuk menentukan apa yang perlu Anda render. 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 sebaiknya lakukan selama callback awal seperti 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 dialog, halaman interstisial, atau login. Pastikan bahwa pengguna dapat melihat konten aplikasi, meski belum pernah membuka aplikasi tersebut. Anda dapat menampilkan dialog kepada pengguna di interaksi berikutnya atau saat pengguna membuka aplikasi dari Peluncur.
  • Ikuti panduan desain yang dijelaskan dalam Navigasi dengan tombol Kembali dan Atas agar aplikasi Anda memenuhi harapan pengguna untuk navigasi mundur setelah pengguna masuk ke aplikasi melalui deep link.

Menguji deep link Anda

Anda dapat menggunakan Android Debug Bridge dengan alat pengelola aktivitas (am) untuk menguji apakah URI filter intent yang Anda tentukan untuk deep linking di-resolve ke aktivitas aplikasi yang benar. 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

Mulai Android 17, Anda juga dapat menggunakan flag --debug-link dengan am start untuk mendiagnosis cara sistem me-resolve URL dan memeriksa filter intent yang cocok atau aturan Link Aplikasi Dinamis. Untuk mengetahui informasi selengkapnya, lihat Mendiagnosis resolusi link dengan flag debug-link.

Deklarasi manifes dan pengendali intent yang Anda tetapkan menentukan koneksi antara aplikasi dan situs Anda serta tindakan yang harus dilakukan dengan link yang masuk. Namun, agar sistem memperlakukan aplikasi Anda sebagai pengendali default untuk sekumpulan URI, Anda juga harus meminta sistem memverifikasi koneksi ini. Memverifikasi Link Aplikasi menjelaskan cara menerapkan verifikasi ini.

Untuk mempelajari intent dan link aplikasi lebih lanjut, lihat referensi berikut: