Recevoir Firebase Dynamic Links dans une application Flutter

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

  1. Installez et initialisez les SDK Firebase pour Flutter si ce n'est pas déjà fait.

  2. À partir du répertoire racine de votre projet Flutter, exécutez la commande suivante pour installer le plug-in Dynamic Links :

    flutter pub add firebase_dynamic_links
    
  3. Si vous développez 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 des liens d'application, spécifiez également votre clé SHA-256.

Intégration à une plate-forme

Suivez les étapes d'intégration de la plate-forme pour celles sur lesquelles vous développez votre application.

Android

Sur Android, vous devez ajouter un filtre d'intent pour capturer les liens profonds de votre domaine, car le lien dynamique redirigera vers votre domaine si votre application est installée. Cette étape est nécessaire pour que votre application reçoive les données Dynamic Links après son installation/mise à jour depuis le Play Store et lorsqu'un utilisateur appuie 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'intent pour gérer le lien.

L'étape suivante consiste à s'assurer que l'empreinte SHA-256 du certificat de signature est enregistrée dans la console Firebase pour l'application. Pour savoir comment récupérer votre empreinte SHA-256, consultez la page Authenticating Your Client (Authentifier votre client).

Plates-formes Apple

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

  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 en activant la fonctionnalité "Domaines associés".

  4. Dans Xcode, procédez comme suit :

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

    2. Sur la page "Signing & Capabilities" (Signature et fonctionnalités), assurez-vous que votre équipe est enregistrée et que votre profil de provisionnement est défini.

    3. Sur la page "Signing & Capabilities" (Signature et fonctionnalités), activez Associated Domains (Domaines associés) et ajoutez les éléments suivants à la liste "Associated Domains" (Domaines associés) (remplacez l'exemple par votre domaine) :

      applinks:example.page.link
      
    4. Sur la page "Info", ajoutez un type d'URL à votre projet. Définissez le champ "URL Schemes" (Schémas d'URL) sur l'ID du 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 de lien dynamique 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-papiers 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, les liens dynamiques peuvent s'assurer que lorsqu'un utilisateur ouvre un lien dynamique, mais doit d'abord installer votre application, il peut accéder immédiatement au contenu lié d'origine lorsqu'il ouvre l'application pour la première fois après l'installation.

      L'inconvénient est que l'utilisation du presse-papiers déclenche une notification sur iOS 14 et versions ultérieures. Ainsi, la première fois que les utilisateurs ouvrent votre application, s'ils voient une notification indiquant que votre application a accédé au presse-papiers, cela peut les dérouter.

      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 lien dynamique dans votre application, vous devez implémenter deux scénarios.

État résilié

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 arrêté, mais ce n'est pas garanti sur iOS. Il est donc préférable de les configurer dans l'ordre suivant pour vous assurer que votre application reçoit 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 ensuite 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 / de 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
});

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 arrêté (c'est-à-dire que l'application a été fermée en la balayant).