Recevez des liens dynamiques Firebase dans une application Flutter

Pour recevoir les liens dynamiques Firebase que vous avez créés , vous devez inclure le SDK Dynamic Links dans votre application et appeler la méthode FirebaseDynamicLinks.getDynamicLink() lors du chargement de votre application pour obtenir les données transmises dans le lien dynamique.

  1. Installez et initialisez les SDK Firebase pour Flutter si vous ne l'avez pas déjà fait.

  2. Depuis le répertoire racine de votre projet Flutter, exécutez la commande suivante pour installer le plugin Dynamic Links :

    flutter pub add firebase_dynamic_links
    
  3. Si vous créez une application Android, ouvrez la page Paramètres du projet de la console Firebase et assurez-vous d'avoir spécifié votre clé de signature SHA-1. Si vous utilisez App Links, spécifiez également votre clé SHA-256.

Intégration de plateforme

Effectuez les étapes d’intégration de plateforme suivantes pour les plateformes pour lesquelles vous créez votre application.

Android

Sur Android, vous devez ajouter un nouveau filtre d'intention pour capturer les liens profonds de votre domaine, car le lien dynamique redirigera vers votre domaine si votre application est installée. Ceci est requis pour que votre application reçoive les données Dynamic Link après son installation/mise à jour à partir du Play Store et en appuyant sur le bouton Continuer. Dans 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>

Lorsque les utilisateurs ouvrent un lien dynamique avec un lien profond vers le schéma et l'hôte que vous spécifiez, votre application démarre l'activité avec ce filtre d'intention pour gérer le lien.

L'étape suivante consiste à s'assurer que l'empreinte digitale SHA-256 du certificat de signature est enregistrée dans la console Firebase de l'application. Vous pouvez trouver plus de détails sur la façon de récupérer votre empreinte digitale SHA-256 sur la page Authentification de votre client .

Plateformes Apple

  1. Créez un compte développeur Apple si vous n'en avez pas déjà un.

  2. Sur la page Paramètres du projet de la console Firebase, assurez-vous que votre application iOS est correctement configurée avec votre identifiant App Store et votre identifiant d'équipe.

  3. Sur le site Apple Developer, créez un profil de provisionnement pour votre application avec la fonctionnalité de domaine associé activée.

  4. Dans Xcode, procédez comme suit :

    1. Ouvrez votre application sous l'en-tête TARGETS .

    2. Sur la page Signature et capacités, assurez-vous que votre équipe est enregistrée et que votre profil de provisionnement est défini.

    3. Sur la page Signature et capacités, activez Domaines associés et ajoutez ce qui suit à la liste Domaines associés (remplacez l'exemple par votre domaine) :

      applinks:example.page.link
      
    4. Sur la page Informations, ajoutez un type d'URL à votre projet. Définissez le champ Schémas d'URL sur l'ID de bundle de votre application. (L'identifiant peut être Bundle ID ou ce que vous souhaitez.)

    5. Si vous avez configuré un domaine personnalisé pour votre projet Firebase, ajoutez le préfixe d'URL Dynamic Link dans le fichier Info.plist de votre projet iOS à l'aide de la clé 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. Facultatif : désactivez l'utilisation du presse-papier iOS par le SDK Dynamic Links.

      Par défaut, le SDK Dynamic Links utilise le presse-papiers pour améliorer la fiabilité des liens profonds post-installation. En utilisant le presse-papiers, Dynamic Links peut garantir que lorsqu'un utilisateur ouvre un Dynamic Link mais doit d'abord installer votre application, l'utilisateur peut accéder immédiatement au contenu lié d'origine lors de la première ouverture de l'application après l'installation.

      L’inconvénient est que l’utilisation du presse-papier déclenche une notification sur iOS 14 et versions ultérieures. Ainsi, la première fois que les utilisateurs ouvrent votre application, si le presse-papiers contient une URL de lien dynamique, ils verront une notification indiquant que votre application a accédé au presse-papiers, ce qui peut prêter à confusion.

      Pour désactiver ce comportement, modifiez le fichier Info.plist de votre projet Xcode et définissez la clé FirebaseDeepLinkPasteboardRetrievalEnabled sur NO .

Pour gérer un Dynamic Link dans votre application, deux scénarios nécessitent la mise en œuvre.

État terminé

Configurez les méthodes suivantes :

  1. FirebaseDynamicLinks.getInitialLink - renvoie un Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink - gestionnaire d'événements qui renvoie un Stream contenant un PendingDynamicLinkData?

Android recevra toujours le lien via FirebaseDynamicLinks.getInitialLink à partir d'un état terminé, mais sur iOS, cela n'est pas garanti. Par conséquent, il vaut la peine de les configurer tous les deux dans l’ordre suivant pour garantir que votre candidature reçoive le lien :

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

Dans la logique de votre application, vous pouvez alors vérifier si un lien a été géré et effectuer une action, par exemple :

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

État d’arrière-plan/premier plan

Lorsque l'application est ouverte ou en arrière-plan, utilisez le getter FirebaseDynamicLinks.onLink :

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

Alternativement, si vous souhaitez identifier si un lien dynamique exact a été utilisé pour ouvrir l'application, transmettez-le plutôt à la méthode getDynamicLink :

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

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

Pour tester un lien dynamique sur iOS, vous devez utiliser un appareil réel. Vous devrez également exécuter l'application en mode release (c'est-à-dire flutter run --release .), si vous testez un lien dynamique à partir d'un état d'application terminé (c'est-à-dire que l'application a été fermée par glissement).