Flutter uygulamasında Firebase Dinamik Bağlantılarını alın

Oluşturduğunuz Firebase Dinamik Bağlantıları almak için uygulamanıza Dinamik Bağlantılar SDK'sını eklemeniz ve uygulamanız yüklendiğinde Dinamik Bağlantı'da iletilen verileri almak için 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 Dinamik Bağlantılar eklentisini yüklemek için aşağıdaki komutu çalıştırın:

    flutter pub add firebase_dynamic_links
    
  3. Bir Android uygulaması oluşturuyorsanız Firebase konsolunun Proje ayarları sayfasını açın ve SHA-1 imzalama anahtarınızı belirttiğinizden emin olun. Uygulama Bağlantılarını 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

Android'de, uygulamanız yüklüyse Dinamik Bağlantı alanınıza yönlendireceğinden, alan adınızın derin bağlantılarını yakalayan yeni bir amaç filtresi eklemeniz gerekir. Bu, uygulamanızın Play Store'dan yüklendikten/güncellendikten ve Devam düğmesine bastıktan sonra Dinamik Bağlantı verilerini alması için gereklidir. 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>

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

Bir sonraki adım, imzalama sertifikasının SHA-256 parmak izinin uygulamanın Firebase konsolunda kayıtlı olmasını sağlamaktır. SHA-256 parmak izinizi nasıl alacağınıza ilişkin daha fazla ayrıntıyı İstemcinizin Kimlik Doğrulaması sayfasında bulabilirsiniz.

Apple platformları

  1. Henüz bir Apple geliştirici hesabınız yoksa bir 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, uygulamanız için İlişkili Etki Alanı özelliği etkinleştirilmiş bir temel hazırlık profili oluşturun.

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

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

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

    3. İmzalama ve Yetenekler sayfasında, İlişkili Etki Alanları'nı etkinleştirin ve aşağıdakileri İlişkili Etki Alanları listesine ekleyin (örneği etki 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 bir alan adı ayarladıysanız FirebaseDynamicLinksCustomDomains anahtarını kullanarak Dinamik Bağlantı URL'si önekini iOS projenizin Info.plist dosyasına 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'nın iOS çalışma alanını kullanmasını devre dışı bırakın.

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

      Bunun dezavantajı, çalışma alanının kullanımının iOS 14 ve sonraki sürümlerde bir bildirimi tetiklemesidir. Bu nedenle, kullanıcılar uygulamanızı ilk kez açtıklarında, çalışma alanı bir Dinamik Bağlantı URL'si içeriyorsa uygulamanızın çalışma alanına eriştiğine dair bir bildirim görürler ve bu da 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ızda bir Dinamik Bağlantıyı yönetmek için iki senaryonun uygulanması gerekir.

Feshedilmiş Durum

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

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

Android, bağlantıyı her zaman FirebaseDynamicLinks.getInitialLink aracılığıyla sonlandırılmış bir durumdan alır, ancak iOS'ta 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 faydalı olacaktır:

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ız dahilinde bir bağlantının işlenip işlenmediğini kontrol edebilir ve bir eylem 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 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 bir Dinamik Bağlantının 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));

İOS'ta dinamik bir bağlantıyı test etmek için gerçek bir cihaz kullanmanız gerekir. Sonlandırılmış (örn. uygulama kaydırılarak kapatılmış) bir uygulama durumundan dinamik bir bağlantı test ediliyorsa, uygulamayı yayın modunda (örn. flutter run --release .) çalıştırmanız gerekecektir.