Recevoir des liens dynamiques sur iOS

Pour recevoir le Firebase Dynamic Links que vous avez créé, vous devez inclure le SDK Dynamic Links dans votre application et appeler les méthodes handleUniversalLink: et dynamicLinkFromCustomSchemeURL: lors du chargement de votre application afin d'obtenir les données transmises dans Dynamic Link.

Prérequis

Avant de commencer, assurez-vous d'ajouter Firebase à votre projet iOS.

Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.

  1. Dans Xcode, avec votre projet d'application ouvert, accédez à File > Add Packages (Fichier > Ajouter des packages).
  2. Lorsque vous y êtes invité, ajoutez le dépôt du SDK des plates-formes Firebase pour Apple :
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Choisissez la bibliothèque Dynamic Links.
  5. Ajoutez l'indicateur -ObjC à la section Other Linker Flags (Autres indicateurs Linker) des paramètres de compilation de votre cible.
  6. Pour une expérience optimale avec Dynamic Links, nous vous recommandons d'activer Google Analytics dans votre projet Firebase et d'ajouter le SDK Firebase pour Google Analytics à votre application. Vous pouvez sélectionner la bibliothèque sans collecte de l'IDFA ou avec collecte de l'IDFA.
  7. Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.

Effectuez maintenant les étapes de configuration suivantes :

  1. Dans la console Firebase, ouvrez la section Dynamic Links. Acceptez les conditions d'utilisation si vous y êtes invité.
  2. Assurez-vous que l'ID App Store et le préfixe de l'ID de votre application sont spécifiés dans les paramètres de votre application. Pour afficher et modifier les paramètres de votre application, accédez à la page des paramètres de votre projet Firebase, puis sélectionnez votre application iOS.

    Pour vérifier que votre projet Firebase est correctement configuré pour utiliser Dynamic Links dans votre application iOS, ouvrez l'URL suivante :

    https://your_dynamic_links_domain/apple-app-site-association

    Si votre application est connectée, le fichier apple-app-site-association contient une référence au préfixe de l'ID d'application et à l'ID du bundle de votre application. Exemple :

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}

    Si le champ details est vide, vérifiez que vous avez spécifié le préfixe de votre ID d'application. Notez que le préfixe de votre ID d'application peut être différent de votre ID d'équipe.

  3. 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, Dynamic Links peut s'assurer que lorsqu'un utilisateur ouvre un Dynamic Link, mais doit d'abord installer votre application, il peut accéder immédiatement au contenu associé 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, si le presse-papiers contient une URL, une notification s'affiche indiquant que votre application y a accédé, 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.

  1. Dans l'onglet Info du projet Xcode de votre application, créez un type d'URL à utiliser pour Dynamic Links. Définissez le champ Identifier sur une valeur unique et le champ URL scheme sur votre identifiant de groupe, qui est le schéma d'URL par défaut utilisé par Dynamic Links.
  2. Dans l'onglet Fonctionnalités du projet Xcode de votre application, activez les domaines associés et ajoutez les éléments suivants à la liste Domaines associés :
    applinks:your_dynamic_links_domain
  3. Si vous souhaitez recevoir Dynamic Links avec un domaine entièrement personnalisé, dans le fichier Info.plist de votre projet Xcode, créez une clé appelée FirebaseDynamicLinksCustomDomains et définissez-la sur les préfixes d'URL Dynamic Links de votre application. Exemple :
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
  4. Importez le module FirebaseCore dans votre UIApplicationDelegate, ainsi que dans tout autre module Firebase utilisé par votre délégué d'application. Par exemple, pour utiliser Cloud Firestore et Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Configurez une instance partagée FirebaseApp dans la méthode application(_:didFinishLaunchingWithOptions:) de votre délégué d'application :

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Si vous utilisez SwiftUI, vous devez créer un délégué d'application et l'associer à votre struct App via UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor. Vous devez également désactiver le mélange des délégués d'application. Pour en savoir plus, consultez les instructions SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Ensuite, dans la méthode application:continueUserActivity:restorationHandler: , gérez les liens reçus en tant que liens universels lorsque l'application est déjà installée :

    Swift

    Remarque : Ce produit n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks()
        .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in
          // ...
        }
    
      return handled
    }

    Objective-C

    Remarque : Ce produit n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
    - (BOOL)application:(UIApplication *)application
    continueUserActivity:(nonnull NSUserActivity *)userActivity
     restorationHandler:
    #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
    (nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler {
    #else
        (nonnull void (^)(NSArray *_Nullable))restorationHandler {
    #endif  // __IPHONE_12_0
      BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
                                                              completion:^(FIRDynamicLink * _Nullable dynamicLink,
                                                                           NSError * _Nullable error) {
                                                                // ...
                                                              }];
      return handled;
    }
  8. Enfin, dans application:openURL:options:, gérez les liens reçus via le schéma d'URL personnalisé de votre application. Cette méthode est appelée lorsque votre application est ouverte pour la première fois après l'installation.

    Si le Dynamic Link n'est pas trouvé lors du premier lancement de votre application, cette méthode sera appelée avec le url de DynamicLink défini sur nil, ce qui indique que le SDK n'a pas trouvé de Dynamic Link en attente correspondant.

    Swift

    Remarque : Ce produit n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
      return application(app, open: url,
                         sourceApplication: options[UIApplication.OpenURLOptionsKey
                           .sourceApplication] as? String,
                         annotation: "")
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
                     annotation: Any) -> Bool {
      if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
        // Handle the deep link. For example, show the deep-linked content or
        // apply a promotional offer to the user's account.
        // ...
        return true
      }
      return false
    }

    Objective-C

    Remarque : Ce produit n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
    - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary<NSString *, id> *)options {
      return [self application:app
                       openURL:url
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                    annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    }
    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
      FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
    
      if (dynamicLink) {
        if (dynamicLink.url) {
          // Handle the deep link. For example, show the deep-linked content,
          // apply a promotional offer to the user's account or show customized onboarding view.
          // ...
        } else {
          // Dynamic link has empty deep link. This situation will happens if
          // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link,
          // but pending link is not available for this device/App combination.
          // At this point you may display default onboarding view.
        }
        return YES;
      }
      return NO;
    }