Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Menyiapkan domain kustom untuk Dynamic Link

Anda dapat memiliki kontrol yang lebih baik terhadap branding Dynamic Link dengan menggunakan domain Anda sendiri, bukan subdomain page.link. Dengan domain kustom, Anda dapat membuat Dynamic Link seperti contoh berikut:

https://example.com/link-suffix
https://example.com/links/promos/link-suffix
https://links.example.com/link-suffix
https://ex.amp.le/link-suffix

Bagian URL sebelum link-suffix disebut awalan URL, dan berisi domain Dynamic Link kustom serta awalan jalur. Anda harus menyediakan awalan URL saat membuat Dynamic Link.

Menyiapkan domain kustom membutuhkan izin Editor atau Pemilik di project Firebase Anda.

Menggunakan domain web Anda untuk Dynamic Link

Anda dapat menggunakan domain yang sama untuk Dynamic Link dan halaman web, Universal Links, dan App Links, tetapi jika Anda melakukannya, perhatikan agar URL Dynamic Link tidak bertentangan dengan URL web. Saat Anda mengonfigurasi Dynamic Link untuk menggunakan awalan URL tertentu, semua URL yang dimulai dengan awalan tersebut diperlakukan sebagai Dynamic Link, sehingga Anda tidak dapat menggunakan URL dengan awalan tersebut untuk mengarah ke konten dihosting yang biasa.

Misalnya, jika Anda ingin membuat Dynamic Link ke resource https://example.com/my-resource (halaman web, Universal Link, atau App Link), Anda tidak dapat menggunakan https://example.com/ sebagai awalan URL Dynamic Link, karena akan menyebabkan https://example.com/my-resource diperlakukan sebagai Dynamic Link. Sebagai gantinya, Anda harus menggunakan awalan URL dengan domain yang berbeda atau awalan jalur yang berbeda.

Jadi, Dynamic Link bentuk panjang berikut (dan link pendeknya yang setara) tidak akan berfungsi sebagaimana mestinya karena URL yang ditetapkan oleh parameter link diawali dengan awalan URL Dynamic Link, https://example.com/:

 https://example.com/?link=https://example.com/my-resource
 https://example.com/?link=https://example.com/resources/my-resource

Sedangkan Dynamic Link bentuk panjang berikut (dan link pendeknya yang setara) dapat berfungsi, karena awalan URL-nya tidak bertentangan dengan URL link:

 https://link.example.com/?link=https://example.com/my-resource
 https://example.com/links/?link=https://example.com/my-resource
 https://ex.amp.le/?link=https://example.com/my-resource

Menyiapkan domain kustom di Firebase console

Anda biasanya dapat menyiapkan domain kustom sepenuhnya di Firebase console. Untuk melakukannya:

  1. Jika Anda belum menyiapkan Firebase Hosting untuk project yang dimiliki, buka halaman Hosting di Firebase console, klik Mulai, lalu ikuti petunjuk penyiapan. Anda tidak harus menyelesaikan langkah-langkah yang ditunjukkan saat ini.

  2. Buka halaman Dynamic Links di Firebase console.

  3. Jika Anda belum pernah menggunakan Dynamic Links, klik Mulai. Jika sudah pernah, klik Tambahkan awalan URL dari menu drop-down.

    Kemudian, selesaikan wizard penyiapan, dengan menentukan domain dan awalan jalur yang ingin Anda gunakan saat diminta.

  4. Khusus iOS: Di file Info.plist project Xcode, buat kunci dengan nama FirebaseDynamicLinksCustomDomains, lalu tetapkan ke awalan URL Dynamic Link aplikasi Anda. Contoh:

    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
      <string>https://example.com/link</string>
      <string>https://example.com/promos</string>
    </array>
    

Menyiapkan domain kustom secara manual

Di beberapa situasi, misalnya jika Anda sudah menyiapkan domain kustom untuk Dynamic Link dan ingin menambahkan domain lain, atau jika Anda menambahkan domain yang sudah terhubung ke situs Hosting, Anda harus menyiapkan domain kustom secara manual.

Untuk melakukannya:

  1. Hubungkan domain Anda ke Firebase Hosting jika belum melakukannya.

    Penyiapan domain dengan Firebase Hosting meliputi pembuatan file konfigurasi firebase.json di direktori project lokal Anda.

  2. Update ke Firebase CLI versi terbaru (v6.5.0 atau yang lebih baru).

  3. Konfigurasikan situs Hosting untuk Dynamic Link di file firebase.json project Anda. Jika project memiliki beberapa situs, pastikan Anda mengonfigurasi situs yang terhubung ke domain yang ingin digunakan.

    • Tetapkan appAssociation ke AUTO. Dengan setelan ini, Hosting menghasilkan file assetlinks.json dan apple-app-site-association secara dinamis saat diminta.

    • Tentukan awalan jalur yang ingin Anda gunakan untuk Dynamic Link dengan menetapkan aturan penulisan ulang menggunakan dynamicLinks yang ditetapkan ke true. Permintaan ke jalur ini di-proxy-kan ke Dynamic Link.

      Tidak seperti aturan yang menulis ulang jalur ke URL, aturan penulisan ulang Dynamic Link tidak dapat berisi ekspresi reguler.

      Jika Anda memiliki beberapa aturan penulisan ulang untuk situs Anda, perhatikan bahwa Hosting menjalankan aturan penulisan ulang pertama yang sesuai dengan permintaan.

    Misalnya:

    "hosting": {
      // ...
      "appAssociation": "AUTO",
      "rewrites": [
        {
          "source": "/promos/**",
          "dynamicLinks": true
        },
        {
          "source": "/links/share/**",
          "dynamicLinks": true
        }
      ]
    }
    

    Dengan konfigurasi di atas, Anda dapat membuat Dynamic Link dengan awalan URL seperti contoh berikut:

    https://your-domain/promos/link-suffix
    https://your-domain/links/share/link-suffix
    

    Jika menggunakan domain ini hanya untuk Dynamic Link, Anda dapat menggunakan jalur sumber /** untuk membuat Dynamic Link tanpa awalan jalur:

    {
      "source": "/**",
      "dynamicLinks": true
    }
    

    Dengan aturan di atas, Anda dapat membuat Dynamic Link seperti contoh berikut:

    https://your-domain/link-suffix

  4. Deploy perubahan konfigurasi Hosting Anda:

    firebase deploy --only hosting

    (opsional) Anda dapat memeriksa konten firebase.json yang di-deploy menggunakan Hosting REST API.

  5. Khusus iOS: Di file Info.plist project Xcode, buat kunci dengan nama FirebaseDynamicLinksCustomDomains, lalu tetapkan ke awalan URL Dynamic Link aplikasi Anda. Contoh:

    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
      <string>https://example.com/promos</string>
      <string>https://example.com/links/share</string>
    </array>
    

Urutan prioritas untuk Dynamic Links dan Hosting

Untuk Dynamic Links, perhatikan urutan prioritas hosting.

  • Pastikan awalan URL Dynamic Link Anda tidak bertentangan dengan konfigurasi hosting yang berprioritas lebih tinggi (misalnya konten statis yang dihosting selalu memiliki prioritas yang lebih tinggi dibandingkan penulisan ulang).
  • Dalam atribut rewrites, respons Hosting akan mematuhi aturan yang ditentukan oleh glob source pertama yang menangkap jalur yang diminta.

Misalnya, jika Anda menyiapkan Dynamic Link untuk your-domain/source-path/link-suffix tetapi Anda juga memiliki konten statis di your-domain/source-path/index.html, konten statis akan lebih diprioritaskan. Pengguna akhir akan melihat index.html, bukan Dynamic Link tersebut. Demikian pula, jika Anda memiliki konten statis di your-domain/source-path/link-suffix, pengguna akhir akan melihat konten statis tersebut, bukan Dynamic Link.

Jika Anda ingin menggunakan branding yang sama untuk Dynamic Links dan Hosting, pertimbangkan salah satu opsi berikut untuk awalan URL Dynamic Link Anda:

  • Tetapkan atribut source Anda agar cocok dengan awalan jalur. Misalnya, jika Anda memiliki domain kustom example.com, aturan penulisan ulang Anda adalah:

    // Domain is example.com
    "rewrites": [ {
      "source": "/links/**",  // Dynamic Links start with "https://example.com/links/"
      "dynamicLinks": true
    } ]
    
  • Siapkan subdomain yang akan digunakan untuk Dynamic Link, lalu tetapkan atribut source agar cocok dengan subdomain tersebut. Misalnya, jika Anda memiliki subdomain links.example.com, aturan penulisan ulang Anda adalah:

    // Domain is links.example.com
    "rewrites": [ {
      "source": "/**",  // Dynamic Links start with "https://links.example.com/"
      "dynamicLinks": true
    } ]