Membuat Deep Link ke Konten Aplikasi

Saat link yang diklik atau permintaan terprogram memanggil intent URI web, sistem Android akan mencoba setiap tindakan berikut, secara berurutan, hingga permintaan berhasil:

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

Ikuti langkah-langkah di bawah untuk membuat dan menguji link ke konten Anda. Anda juga dapat menggunakan App Links Assistant di Android Studio untuk menambahkan Link Aplikasi Android.

Catatan: Mulai Android 12 (API level 31), intent web generik di-resolve menjadi aktivitas di aplikasi Anda hanya jika aplikasi disetujui untuk domain tertentu yang terdapat dalam intent web tersebut. Jika aplikasi Anda tidak disetujui untuk domain, intent web akan ditetapkan ke aplikasi browser default pengguna.

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:

<action>
Tentukan tindakan intent ACTION_VIEW sehingga filter intent dapat diakses dari Google Penelusuran.
<data>
Menambahkan satu atau beberapa tag <data>, yang masing-masing mewakili format URI yang di-resolve untuk aktivitas. Setidaknya, tag <data> harus menyertakan atribut android:scheme.

Anda dapat menambahkan atribut tambahan untuk lebih mempersempit jenis URI yang diterima aktivitas. Misalnya, Anda mungkin memiliki beberapa aktivitas yang menerima URI serupa, tetapi hanya berbeda berdasarkan nama jalurnya. 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.

<category>
Sertakan kategori BROWSABLE. Hal ini diperlukan agar filter intent dapat diakses dari browser web. Tanpanya, klik link di browser tidak dapat membawanya ke aplikasi Anda.

Juga menyertakan kategori DEFAULT. Elemen ini memungkinkan aplikasi Anda merespons intent implisit. Tanpanya, aktivitas hanya dapat dimulai jika intent tersebut menentukan nama komponen aplikasi Anda.

Cuplikan XML berikut menunjukkan cara menentukan filter intent dalam manifes untuk deep linking. URI “example://gizmos” dan “http://www.example.com/gizmos” URI 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 spesifik scheme dan host), karena beberapa elemen <data> dalam filter intent yang sama benar-benar 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, library ini sebenarnya mendukung keduanya, ditambah: app://www.example.com dan https://open.my.app.

Perhatian: Jika beberapa aktivitas berisi filter intent yang di-resolve menjadi Link Aplikasi Android terverifikasi yang sama, tidak ada jaminan aktivitas mana yang akan menangani link tersebut.

Setelah Anda menambahkan filter intent dengan URI untuk konten aktivitas ke manifes aplikasi, Android dapat merutekan Intent apa pun 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 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 secara umum Anda harus melakukannya selama callback awal seperti onCreate() atau onStart().

Berikut adalah 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 perintah, halaman interstisial, atau login. Pastikan pengguna dapat melihat konten aplikasi meskipun belum pernah membuka aplikasi tersebut. Anda dapat meminta konfirmasi pengguna pada interaksi berikutnya atau saat mereka membuka aplikasi dari Peluncur.
  • Ikuti panduan desain yang dijelaskan di Menavigasi dengan Kembali dan Naik sehingga aplikasi Anda sesuai dengan harapan pengguna untuk navigasi mundur setelah masuk ke aplikasi Anda 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 ditetapkan ke aktivitas aplikasi yang tepat. Anda dapat menjalankan perintah adb di 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 di bawah ini 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

Deklarasi manifes dan pengendali intent yang ditetapkan di atas menentukan koneksi antara aplikasi Anda dan situs web serta apa 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. Tutorial berikutnya menjelaskan cara menerapkan verifikasi ini.

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