Menerima Firebase Dynamic Links di aplikasi Flutter

Untuk menerima Firebase Dynamic Links yang Anda buat, Anda harus menyertakan Dynamic Links SDK dalam aplikasi dan memanggil metode FirebaseDynamicLinks.getDynamicLink() saat aplikasi tersebut dimuat agar data diteruskan dalam Dynamic Link.

  1. Instal dan inisialisasi Firebase SDK untuk Flutter jika Anda belum melakukannya.

  2. Dari direktori utama project Flutter Anda, jalankan perintah berikut untuk menginstal plugin Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. Jika Anda mem-build aplikasi Android, buka halaman Setelan project di Firebase console dan pastikan Anda telah menentukan kunci penandatanganan SHA-1. Jika Anda menggunakan App Links, tentukan juga kunci SHA-256 Anda.

Integrasi platform

Selesaikan langkah-langkah integrasi platform berikut untuk platform tempat Anda membuat aplikasi.

Android

Di Android, Anda harus menambahkan filter intent baru menangkap deep link domain Anda, karena Dynamic Link akan mengalihkan ke domain Anda jika aplikasi diinstal. Hal ini diperlukan agar aplikasi Anda dapat menerima data Dynamic Link setelah diinstal/diupdate dari Play Store dan pengguna mengetuk tombol Continue. Di AndroidManifest.xml:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

Ketika pengguna membuka Dynamic Link dengan deep link ke skema dan host yang Anda tentukan, aplikasi Anda akan memulai aktivitas dengan filter intent ini untuk menangani link tersebut.

Langkah berikutnya adalah memastikan sidik jari SHA-256 sertifikat penandatanganan didaftarkan di Firebase console untuk aplikasi. Anda dapat menemukan detail selengkapnya tentang cara mengambil sidik jari SHA-256 di halaman Mengautentikasi Klien Anda.

Platform Apple

  1. Buat akun developer Apple jika Anda belum memilikinya.

  2. Di halaman Setelan project Firebase console, pastikan aplikasi iOS Anda dikonfigurasi dengan benar dengan ID App Store dan ID Tim.

  3. Di situs Apple Developer, buat profil penyediaan untuk aplikasi Anda dengan mengaktifkan kemampuan Associated Domain.

  4. Di Xcode, lakukan hal berikut:

    1. Buka aplikasi pada header TARGETS.

    2. Di halaman Penandatanganan & Kemampuan, pastikan Tim Anda terdaftar, dan Profil Penyediaan telah ditetapkan.

    3. Di halaman Penandatanganan & Kemampuan, aktifkan Associated Domains dan tambahkan berikut ini ke daftar Associated Domains (ganti contoh dengan domain Anda):

      applinks:example.page.link
      
    4. Di halaman Info, tambahkan Jenis URL ke project Anda. Tetapkan kolom Skema URL ke ID paket aplikasi Anda. (ID dapat berupa Bundle ID atau apa pun yang Anda inginkan.)

    5. Jika Anda telah menyiapkan domain kustom untuk project Firebase, tambahkan awalan URL Dynamic Link ke file Info.plist project iOS Anda menggunakan kunci FirebaseDynamicLinksCustomDomains.

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. Opsional: Nonaktifkan penggunaan pasteboard iOS oleh Dynamic Links SDK.

      Secara default, Dynamic Links SDK menggunakan pasteboard untuk meningkatkan keandalan deep link setelah penginstalan. Dengan menggunakan pasteboard, Dynamic Links dapat memastikan bahwa saat pengguna membuka Dynamic Link tetapi perlu menginstal aplikasi Anda terlebih dahulu, pengguna dapat langsung membuka konten asli yang tertaut saat membuka aplikasi untuk pertama kali setelah penginstalan.

      Kekurangannya adalah penggunaan pasteboard memicu notifikasi pada iOS 14 dan versi yang lebih baru. Jadi, saat pengguna membuka aplikasi Anda untuk pertama kalinya, jika pasteboard berisi URL Dynamic Link, mereka akan melihat notifikasi bahwa aplikasi Anda telah mengakses pasteboard, yang dapat menyebabkan kebingungan.

      Untuk menonaktifkan perilaku ini, edit file Info.plist pada project Xcode Anda dan setel kunci FirebaseDeepLinkPasteboardRetrievalEnabled ke NO.

Untuk menangani Dynamic Link dalam aplikasi Anda, dua skenario memerlukan implementasi.

Status Dihentikan

Siapkan metode berikut:

  1. FirebaseDynamicLinks.getInitialLink - menampilkan nilai Future<PendingDynamicLinkData?>.
  2. FirebaseDynamicLinks.onLink - pengendali peristiwa yang menampilkan Stream yang berisi PendingDynamicLinkData?

Android akan selalu menerima link melalui FirebaseDynamicLinks.getInitialLink dari status dihentikan, tetapi tidak terjamin di iOS. Oleh karena itu, ada baiknya Anda menyiapkan keduanya dalam urutan berikut untuk memastikan aplikasi menerima link:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Check if you received the link via `getInitialLink` first
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  if (initialLink != null) {
    final Uri deepLink = initialLink.link;
    // Example of using the dynamic link to push the user to a different screen
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink.listen(
        (pendingDynamicLinkData) {
          // Set up the `onLink` event listener next as it may be received here
          if (pendingDynamicLinkData != null) {
            final Uri deepLink = pendingDynamicLinkData.link;
            // Example of using the dynamic link to push the user to a different screen
            Navigator.pushNamed(context, deepLink.path);
          }
        },
      );

  runApp(MyApp(initialLink));
}

Dalam logika aplikasi, Anda dapat memeriksa apakah link ditangani dan melakukan tindakan, misalnya:

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

Status Latar Belakang / Latar Depan

Saat aplikasi terbuka, atau di latar belakang, gunakan pengambil FirebaseDynamicLinks.onLink:

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

Atau, jika Anda ingin mengidentifikasi apakah Dynamic Link yang tepat digunakan untuk membuka aplikasi, teruskan link tersebut ke metode getDynamicLink:

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

Untuk menguji link dinamis di iOS, Anda harus menggunakan perangkat yang sebenarnya. Anda juga harus menjalankan aplikasi dalam mode rilis (yaitu flutter run --release.), jika menguji link dinamis dari status aplikasi yang dihentikan (yaitu aplikasi telah ditutup).