Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Recevez des liens dynamiques sur iOS

Pour recevoir le Firebase Dynamic Liens que vous avez créé , vous devez inclure les liens dynamiques SDK dans votre application et appelez le handleUniversalLink: et dynamicLinkFromCustomSchemeURL: méthodes lorsque vos charges d'application pour obtenir les données transmises dans le Dynamic Link.

Conditions préalables

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

  1. Ajouter Firebase à votre projet iOS .
  2. Inclure la nacelle suivante dans votre Podfile :
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  3. Exécuter pod install et ouvrir le créé .xcworkspace fichier.
  4. Dans la console Firebase , ouvrez la section des liens dynamiques. Acceptez les conditions d'utilisation si vous y êtes invité.
  5. Assurez-vous que l'ID App Store de votre application et le préfixe de votre ID d'application sont spécifiés dans les paramètres de votre application. Pour afficher et modifier les paramètres de votre application, accédez à votre projet de Firebase la page Paramètres et sélectionnez votre application iOS.

    Vous pouvez vérifier que votre projet Firebase est correctement configuré pour utiliser les liens dynamiques dans votre application iOS en ouvrant l'URL suivante :

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

    Si votre application est connecté, l' apple-app-site-association fichier contient une référence au préfixe App ID et l' ID bundle de votre application. Par exemple:

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

    Si le details champ est vide, vérifiez que vous avez spécifié préfixe App ID. Notez que votre préfixe d'ID d'application peut ne pas être le même que votre ID d'équipe.

  6. En option: Désactiver l'utilisation du SDK de liens dynamiques pasteboard iOS.

    Par défaut, le SDK Dynamic Links utilise la table de montage pour améliorer la fiabilité des liens profonds post-installation. En utilisant la table de montage, Dynamic Links peut s'assurer 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 la table de montage contient une URL de lien dynamique, ils verront une notification indiquant que votre application a accédé à la table de montage, ce qui peut prêter à confusion.

    Pour désactiver ce comportement, modifier votre projet de Xcode Info.plist fichier et définir la FirebaseDeepLinkPasteboardRetrievalEnabled clé de NO .

  1. Dans l'onglet Infos du projet Xcode de votre application, créez un nouveau type d'URL à utiliser pour Dynamic Links. Définissez le champ identificateur à une valeur unique et le champ de schéma d'URL pour être votre identifiant bundle, 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 des domaines associés et ajouter ce qui suit à la liste des domaines associés:
    applinks:your_dynamic_links_domain
  3. Si vous souhaitez recevoir des liens dynamiques avec un domaine entièrement sur mesure , dans votre projet de Xcode Info.plist fichier, créer une clé appelée FirebaseDynamicLinksCustomDomains et le mettre aux préfixes URL des liens dynamiques de votre application. Par exemple:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Importer le module Firebase dans votre UIApplicationDelegate :

    Rapide

    import Firebase

    Objectif c

    @import Firebase;
  5. Configurer une FirebaseApp instance partagée, généralement dans votre application application:didFinishLaunchingWithOptions: méthode:

    Rapide

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

    Objectif c

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Ensuite, dans la application:continueUserActivity:restorationHandler: méthode, liens poignée reçus comme Liens Universal lorsque l'application est déjà installée (sur iOS 9 et plus récent):

    Rapide

    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks()
        .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in
          // ...
        }
    
      return handled
    }
    

    Objectif c

    - (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;
    }
  7. Enfin, dans la application:openURL:sourceApplication:annotation: (iOS 8 ans et plus) et l' application:openURL:options: (iOS 9 et plus) des méthodes, des liens de poignée reçus par le système d'URL personnalisée de votre application. Ces méthodes sont appelées lorsque votre application reçoit un lien sur iOS 8 et versions antérieures, et lorsque votre application est ouverte pour la première fois après l'installation sur n'importe quelle version d'iOS.

    Si le Dynamic Link ne se trouve pas sur le premier lancement de votre application (sur une version d'iOS), cette méthode sera appelée avec la FIRDynamicLink de url mis à nil , ce qui indique que le SDK n'a pas réussi à trouver un correspondant en attente Dynamic Link.

    Rapide

    @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
    }
    

    Objectif c

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