Flutter uygulamasında Firebase Dynamic Links alma

Oluşturduğunuz Firebase Dynamic Links'i almak için uygulamanıza Dynamic Links SDK'sını eklemeniz ve Dynamic Link'te iletilen verileri almak için uygulamanız yüklendiğinde FirebaseDynamicLinks.getDynamicLink() yöntemini çağırmanız gerekir.

  1. Henüz yapmadıysanız Flutter için Firebase SDK'larını yükleyin ve başlatın.

  2. Flutter projenizin kök dizininden aşağıdaki komutu çalıştırarak Dynamic Links eklentisini yükleyin:

    flutter pub add firebase_dynamic_links
    
  3. Android uygulaması oluşturuyorsanız Firebase konsolunun Proje ayarları sayfasını açın ve SHA-1 imzalama anahtarınızı belirttiğinizden emin olun. App Links kullanıyorsanız SHA-256 anahtarınızı da belirtin.

Platform entegrasyonu

Uygulamanızı geliştirdiğiniz platformlar için aşağıdaki platform entegrasyonu adımlarını tamamlayın.

Android

Uygulamanız yüklüyse Dinamik Bağlantı sizi alanınıza yönlendireceğinden, Android'de alanınızın derin bağlantılarını yakalayan yeni bir intent filtresi eklemeniz gerekir. Bu, uygulamanızın Play Store'dan yüklendikten/güncellendikten sonra Dinamik Bağlantı verilerini alması ve Devam düğmesine bir kez dokunulması için gereklidir. AndroidManifest.xml ürününde:

<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>

Kullanıcılar, belirttiğiniz şema ve ana makineye derin bağlantı içeren bir Dinamik Bağlantı'yı açtığında uygulamanız bağlantıyı işlemek için etkinliği bu intent filtresiyle başlatır.

Bir sonraki adım, imza sertifikasının SHA-256 parmak izinin uygulamanın Firebase konsoluna kaydedildiğinden emin olmaktır. SHA-256 parmak izinizi nasıl alacağınız hakkında daha fazla bilgiyi İstemcinizin Kimlik Doğrulaması sayfasında bulabilirsiniz.

Apple platformları

  1. Henüz hesabınız yoksa Apple geliştirici hesabı oluşturun.

  2. Firebase konsolunun Proje ayarları sayfasında, iOS uygulamanızın App Store Kimliği ve Ekip Kimliği ile doğru şekilde yapılandırıldığından emin olun.

  3. Apple Geliştirici sitesinde, İlişkili Alan adı özelliği etkinleştirilmiş olarak uygulamanız için bir temel hazırlık profili oluşturun.

  4. Xcode'da aşağıdakileri yapın:

    1. HEDEFLER başlığının altında uygulamanızı açın.

    2. İmzalama ve Özellikler sayfasında, Ekibinizin kayıtlı olduğundan ve Temel Hazırlık Profilinizin ayarlandığından emin olun.

    3. İmzalama ve Özellikler sayfasında, İlişkili Alanlar'ı etkinleştirin ve aşağıdakileri İlişkilendirilen Alanlar listesine ekleyin (örneği kendi alanınızla değiştirin):

      applinks:example.page.link
      
    4. Bilgi sayfasında projenize bir URL Türü ekleyin. URL Şemaları alanını uygulamanızın paket kimliğine ayarlayın. (Tanımlayıcı, Bundle ID veya istediğiniz herhangi bir şey olabilir.)

    5. Firebase projeniz için özel alan oluşturduysanız FirebaseDynamicLinksCustomDomains anahtarını kullanarak iOS projenizin Info.plist dosyasına Dinamik Bağlantı URL'si ön ekini ekleyin.

      <?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. İsteğe bağlı: Dynamic Links SDK'sının iOS yapıştırma panosu kullanımını devre dışı bırakın.

      Varsayılan olarak Dynamic Links SDK'sı, yükleme sonrası derin bağlantıların güvenilirliğini artırmak için yapıştırma panosunu kullanır. Dinamik Bağlantılar, yapıştırma panosunu kullanarak bir kullanıcı bir Dinamik Bağlantı açtığında ancak önce uygulamanızı yüklemesi gerektiğinde, uygulamayı yüklemeden sonra ilk kez açarken hemen orijinal bağlantılı içeriğe gitmesini sağlayabilir.

      Bunun olumsuz tarafı, yapıştırma panosu kullanımının iOS 14 ve sonraki sürümlerde bir bildirimi tetiklemesidir. Dolayısıyla, kullanıcılar uygulamanızı ilk kez açtıklarında, yapıştırma panosunda bir Dinamik Bağlantı URL'si varsa uygulamanızın yapıştırma panosuna eriştiğine dair bir bildirim görürler. Bu durum karışıklığa neden olabilir.

      Bu davranışı devre dışı bırakmak için Xcode projenizin Info.plist dosyasını düzenleyin ve FirebaseDeepLinkPasteboardRetrievalEnabled anahtarını NO olarak ayarlayın.

Uygulamanızdaki bir Dinamik Bağlantı'yı işlemek için iki senaryo uygulanması gerekir.

Feshedilmiş Durum

Aşağıdaki yöntemleri ayarlayın:

  1. FirebaseDynamicLinks.getInitialLink - Future<PendingDynamicLinkData?> döndürür
  2. FirebaseDynamicLinks.onLink - PendingDynamicLinkData? içeren bir Stream döndüren etkinlik işleyici

Android, kapatılmış bir durumda bağlantıyı her zaman FirebaseDynamicLinks.getInitialLink aracılığıyla alır ancak iOS'te bu garanti edilmez. Bu nedenle, uygulamanızın bağlantıyı aldığından emin olmak için her ikisini de aşağıdaki sırayla ayarlamanız gerekir:

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));
}

Uygulama mantığınızda bir bağlantının işlenip işlenmediğini kontrol edebilir ve bir işlem gerçekleştirebilirsiniz. Örneğin:

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);
}

Arka Plan / Ön Plan Durumu

Uygulama açık veya arka planda çalışırken FirebaseDynamicLinks.onLink alıcısını kullanın:

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

Alternatif olarak, uygulamayı açmak için tam olarak bir Dinamik Bağlantı kullanılıp kullanılmadığını belirlemek istiyorsanız bunu getDynamicLink yöntemine iletin:

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

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

iOS'te bir dinamik bağlantıyı test etmek için gerçek bir cihaz kullanmanız gerekir. Ayrıca sonlandırılmış bir uygulama durumundaki dinamik bağlantı test ediliyorsa (ör. uygulama kaydırılarak kapatılmışsa) uygulamayı sürüm modunda (ör. flutter run --release.) çalıştırmanız gerekir.