Recevoir Firebase Dynamic Links 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() 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 créez une application Android, ouvrez les paramètres du projet de la console Firebase et assurez-vous d'avoir spécifié votre certificat SHA-1 de signature d'application. Si vous utilisez des liens vers une application, spécifiez également votre clé SHA-256.

Intégration à une plate-forme

Suivez les étapes d'intégration ci-dessous pour les plates-formes que vous pour la création de votre application.

Android

Sur Android, vous devez ajouter un nouveau filtre d'intent qui détecte les liens profonds de votre domaine, Le lien dynamique redirigera les utilisateurs vers votre domaine si votre application est installée. Cela 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 qu'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 à vous assurer que l'empreinte SHA-256 du certificat de signature est enregistrée dans la console Firebase pour l'application. Pour en savoir plus sur la récupération de votre empreinte SHA-256, consultez la page Authentifier votre client.

Plates-formes Apple

  1. Créez un compte de 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 ID App Store et votre ID 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 (CIBLES).

    2. Sur la page Signature et Fonctions, vérifiez que votre équipe est inscrite et votre profil de provisionnement est configuré.

    3. Sur la page "Signature et fonctionnalités", activez Domaines associés et ajoutez ce qui suit à la liste des 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" sur l'ID de groupe de votre application. (L'identifiant peut être Bundle ID ou tout autre élément de votre choix.)

    5. Si vous avez configuré un domaine personnalisé pour votre projet Firebase, ajoutez le Préfixe de l'URL du 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. À l'aide du presse-papiers, Grâce aux liens, lorsqu'un utilisateur ouvre un lien dynamique, mais qu'il doit installent d'abord votre application, l'utilisateur peut accéder immédiatement à la version d'origine le contenu associé lors de la première ouverture de l'application 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 application, si le presse-papiers contient une URL de lien dynamique, un une notification indiquant que votre application a accédé au presse-papiers, ce qui peut entraîner la 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 lien dynamique dans votre application, deux scénarios sont à mettre en œuvre.

É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 conseillé 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 votre logique d'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);
}

Arrière-plan / Premier plan

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

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 publication (par exemple, flutter run --release). en cas de test d'un lien dynamique à partir d'un état d'application arrêté (l'application a été fermée par balayage).