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.

Menambahkan filter intent untuk link masuk

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

<action>
Menetapkan tindakan intent ACTION_VIEW sehingga filter intent dapat diakses dari Google Penelusuran.
<data>
Menambahkan satu atau beberapa tag <data>, yang masing-masing merepresentasikan format URI yang dicocokkan 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, namun hanya dibedakan menurut nama lokasi. Dalam hal ini, gunakan atribut android:path atau varian pathPattern maupun pathPrefix guna membedakan aktivitas yang harus dibuka sistem untuk lokasi URI berbeda.

<category>
Menyertakan kategori BROWSABLE. Diperlukan agar filter intent dapat diakses dari browser web. Tanpanya, klik link di browser tidak dapat dicocokkan ke aplikasi Anda.

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

Cuplikan XML berikut ini menunjukkan cara agar Anda dapat menentukan filter intent dalam manifes untuk deep linking. URI “example://gizmos” dan “http://www.example.com/gizmos” diselesaikan 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 dari segi elemen <data>. Meskipun penyertaan beberapa elemen <data> dalam filter yang sama dimungkinkan, penting bagi Anda untuk membuat filter terpisah jika maksud Anda adalah mendeklarasikan URL unik (seperti kombinasi spesifik scheme dan host), karena beberapa elemen <data> dalam filter intent yang sama sebenarnya digabungkan untuk memperhitungkan semua variasi atribut gabungannya. Misalnya, perhatikan kode berikut:

    <intent-filter>
      ...
      <data android:scheme="https" android:host="www.example.com" />
      <data android:scheme="app" android:host="open.my.app" />
    </intent-filter>
    

Ini tampak hanya mendukung https://www.example.com dan app://open.my.app. Tetapi kode tersebut sebenarnya mendukung keduanya, dan juga: 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 mana pun yang memiliki URI yang cocok dengan aplikasi Anda saat runtime.

Untuk mempelajari selengkapnya tentang penentuan 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 dikaitkan dengan Intent masuk. Anda dapat memanggil metode tersebut kapan saja selama siklus aktivitas, namun 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. Ini adalah prinsip yang sama dengan pengalaman klik pertama gratis untuk situs web.
  • Ikuti panduan desain yang dijelaskan di Navigasi Mundur 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 fitur pengelola aktivitas (am) untuk menguji bahwa URI filter intent yang Anda tentukan untuk deep linking cocok dengan 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 di bawah ini mencoba untuk melihat aktivitas aplikasi target yang berkaitan 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 masuk. Akan tetapi, untuk meminta sistem memperlakukan aplikasi Anda sebagai pengendali default bagi seperangkat URI, Anda juga harus meminta sistem agar memverifikasi koneksi ini. Tutorial selanjutnya menjelaskan cara menerapkan verifikasi ini.

Untuk mempelajari selengkapnya tentang intent dan link aplikasi, lihat referensi berikut: