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 uygulamanız yüklendiğinde FirebaseDynamicLinks.getDynamicLink() yöntemini çağırarak Dynamic Link'te iletilen verileri almanız gerekir.

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

  2. Dynamic Links eklentisini yüklemek için Flutter projenizin kök dizininden aşağıdaki komutu çalıştırın:

    flutter pub add firebase_dynamic_links
    
  3. Android uygulaması geliştiriyorsanız Firebase konsolunun Proje ayarları sayfasını açın ve SHA-1 imzalama anahtarınızı belirttiğinizden emin olun. Uygulama Bağlantıları kullanıyorsanız SHA-256 anahtarınızı da belirtin.

Platform entegrasyonu

Uygulamanızı oluşturduğunuz platformlar için aşağıdaki platform entegrasyonu adımlarını tamamlayın.

Android

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

<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 şemaya ve ana makineye derin bağlantı içeren bir Dinamik Bağlantı açtığında uygulamanız, bağlantıyı işlemek için etkinliği bu amaç filtresiyle başlatır.

Bir sonraki adım, imzalama sertifikasının SHA-256 parmak izinin Firebase Console'da uygulama için kaydedildiğinden emin olmaktır. SHA-256 parmak izinizi nasıl alacağınızla ilgili daha fazla bilgiyi İstemcinizin Kimliğini Doğrulama sayfasında bulabilirsiniz.

Apple platformları

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

  2. Firebase konsolunun Proje ayarları sayfasında iOS uygulamanızın App Store kimliğiniz ve ekip kimliğinizle doğru şekilde yapılandırıldığından emin olun.

  3. Apple Developer sitesinde, İlişkili Alan Adı özelliği etkinleştirilmiş olarak uygulamanız için bir sağlama profili oluşturun.

  4. Xcode'da şunları yapın:

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

    2. İmzalama ve Özellikler sayfasında, ekibinizin kayıtlı olduğundan ve sağlama profilinizin ayarlandığından emin olun.

    3. İmzalama ve Özellikler sayfasında İlişkili Alanlar'ı etkinleştirin ve İlişkili Alanlar listesine aşağıdakileri ekleyin (örnek yerine alan adınızı kullanın):

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

    5. Firebase projeniz için özel bir alan adı ayarladıysanız Info.plist anahtarını kullanarak iOS projenizin Info.plist dosyasına Dinamik Bağlantı URL ön ekini ekleyin.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. İsteğe bağlı: Dynamic Links SDK'nın iOS yapıştırma panosunu kullanması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 pano kullanır. Dinamik Bağlantılar, pano kullanarak bir kullanıcının dinamik bağlantıyı açtığında ancak önce uygulamanızı yüklemesi gerektiğinde, yüklemeden sonra uygulamayı ilk kez açtığında doğrudan orijinal bağlantılı içeriğe gidebilmesini sağlayabilir.

      Bunun dezavantajı, pano kullanımının iOS 14 ve sonraki sürümlerde bildirime neden olmasıdır. Bu nedenle, kullanıcılar uygulamanızı ilk kez açtığında ve pano bir dinamik bağlantı URL'si içeriyorsa uygulamanızın panoya eriştiğini belirten bir bildirim görürler. Bu durum kafa karışıklığına 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ızda bir Dinamik Bağlantı işlemek için iki senaryonun uygulanması gerekir.

Sonlandırılmış Durum

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

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

Android, bağlantıyı her zaman FirebaseDynamicLinks.getInitialLink üzerinden sonlandırılmış bir durumdan alır ancak iOS'te bu garanti edilmez. Bu nedenle, uygulamanızın bağlantıyı almasını sağlamak için her ikisini de aşağıdaki sırayla ayarlamanız önerilir:

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, 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çıkken veya arka planda çalışırken FirebaseDynamicLinks.onLinkgetter'ı 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 bir Dinamik Bağlantı kullanılıp kullanılmadığını belirlemek istiyorsanız bağlantıyı bunun yerine 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. Sonlandırılmış bir uygulama durumundan (ör. uygulama kapatılmak için kaydırılmıştır) dinamik bağlantı testi yapıyorsanız uygulamayı yayın modunda (ör. flutter run --release) da çalıştırmanız gerekir.