Membuat deep link untuk sebuah tujuan

Di Android, deep link adalah link yang mengarahkan Anda langsung ke tujuan tertentu dalam aplikasi.

Dengan Komponen navigasi, Anda dapat membuat dua jenis deep link yang berbeda: eksplisit dan implisit.

Membuat deep link eksplisit

Deep link eksplisit adalah satu instance deep link yang menggunakan PendingIntent untuk mengarahkan pengguna ke lokasi tertentu dalam aplikasi. Anda dapat menunjukkan deep link eksplisit sebagai bagian dari, misalnya, notifikasi, pintasan aplikasi, atau widget aplikasi.

Saat pengguna membuka aplikasi Anda melalui deep link eksplisit, back stack tugas akan dihapus dan diganti dengan tujuan deep link. Saat membuat grafik bertingkat, tujuan awal setiap level pembuatan grafik bertingkat, yaitu tujuan awal setiap elemen <navigation> di hierarki, juga akan ditambahkan ke stack. Ini berarti saat menekan tombol Kembali dari tujuan deep link, pengguna akan kembali ke stack navigasi seolah-olah mereka memasuki aplikasi Anda dari titik masuknya.

Anda dapat menggunakan class NavDeepLinkBuilder untuk membuat PendingIntent, seperti yang ditunjukkan dalam contoh di bawah. Perhatikan bahwa jika konteks yang diberikan bukan Activity, konstruktor menggunakan PackageManager.getLaunchIntentForPackage() sebagai aktivitas default yang akan diluncurkan, jika tersedia.

Kotlin

    val pendingIntent = NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent()
    

Java

    PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent();
    

Jika sudah memiliki NavController, Anda juga dapat membuat deep link melalui NavController.createDeepLink().

Membuat deep link implisit

Deep link implisit adalah URI yang mengacu pada tujuan tertentu dalam aplikasi. Saat URI dipanggil, misalnya saat pengguna mengklik link, Android dapat membuka aplikasi Anda ke tujuan yang sesuai.

Saat memicu deep link implisit, status back stack bergantung pada apakah Intent implisit diluncurkan dengan tanda Intent.FLAG_ACTIVITY_NEW_TASK:

  • Jika tanda ini ditentukan, back stack tugas akan dihapus dan diganti dengan tujuan deep link. Seperti pada deep link eksplisit, saat membuat grafik bertingkat, tujuan awal setiap level pembuatan grafik bertingkat, yaitu tujuan awal setiap elemen <navigation> di hierarki, juga akan ditambahkan ke stack. Ini berarti saat menekan tombol Kembali dari tujuan deep link, pengguna akan kembali ke stack navigasi seolah-olah mereka memasuki aplikasi Anda dari titik masuknya.
  • Jika tanda tidak ditentukan, Anda tetap berada di stack tugas aplikasi sebelumnya tempat deep link implisit dipicu. Pada kasus ini, tombol Kembali akan mengembalikan Anda ke aplikasi sebelumnya, sedangkan tombol Atas akan memulai tugas aplikasi pada tujuan induk hierarki dalam grafik navigasi Anda.

Anda dapat menggunakan Editor Navigasi untuk membuat deep link implisit ke tujuan berikut:

  1. Di tab Desain pada Editor Navigasi, pilih tujuan untuk deep link.
  2. Klik + di bagian Deep Link pada panel Atribut.
  3. Di dalam dialog Tambahkan Deep Link yang muncul, masukkan URI.

    Perhatikan hal-hal berikut:

    • URI yang tidak memiliki skema dianggap sebagai http atau https. Misalnya, www.google.com cocok dengan http://www.google.com dan https://www.google.com.
    • Placeholder dalam bentuk {placeholder_name} cocok dengan satu atau beberapa karakter. Misalnya, http://www.example.com/users/{id} cocok dengan http://www.example.com/users/4. Komponen navigasi mencoba mengurai nilai placeholder menjadi jenis yang sesuai dengan mencocokkan nama placeholder dengan argumen yang ditentukan untuk tujuan deep link. Jika tidak ada argumen yang ditentukan dengan nama yang sama, jenis String default digunakan untuk nilai argumen.
    • Anda dapat menggunakan karakter pengganti .* untuk mencocokkan 0 atau beberapa karakter.
  4. (Opsional) Centang Verifikasi Otomatis untuk mengharuskan Google memverifikasi bahwa Anda adalah pemilik URI. Untuk informasi selengkapnya, lihat Memverifikasi Link Aplikasi Android.

  5. Klik Tambahkan. Ikon link muncul di atas tujuan yang dipilih untuk menunjukkan bahwa tujuan memiliki deep link.

  6. Klik tab Teks untuk beralih ke tampilan XML. Elemen <deepLink> yang dibuat bertingkat telah ditambahkan ke tujuan:

    <deepLink app:uri="https://www.google.com" />
        

Untuk mengaktifkan deep link implisit, Anda juga harus memberikan tambahan untuk file manifest.xml aplikasi. Tambahkan satu elemen <nav-graph> ke aktivitas yang mengarah ke grafik navigasi yang sudah ada, seperti yang ditunjukkan dalam contoh di bawah:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">

        <application ... >

            <activity name=".MainActivity" ...>
                ...

                <nav-graph android:value="@navigation/nav_graph" />

                ...

            </activity>
        </application>
    </manifest>
    

Saat mem-build project Anda, komponen Navigasi akan mengganti elemen <nav-graph> dengan elemen <intent-filter> yang dibuat untuk mencocokkan semua deep link dalam grafik navigasi.

Referensi lainnya

Untuk mempelajari navigasi selengkapnya, lihat referensi tambahan berikut.

Contoh

Codelab

Video