Créer des liens dynamiques sur iOS

Vous pouvez créer des liens dynamiques courts ou longs avec l'API Firebase Dynamic Links Builder. Cette API accepte soit un lien dynamique long, soit un objet contenant des paramètres de lien dynamique, et renvoie des URL comme dans les exemples suivants :

https://example.com/link/WXYZ
https://example.page.link/WXYZ

Conditions préalables

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 .
  2. Lorsque vous y êtes invité, ajoutez le référentiel SDK des plates-formes Apple Firebase :
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Choisissez la bibliothèque Dynamic Links.
  5. Ajoutez l'indicateur -ObjC à la section Autres indicateurs de l'éditeur de liens des paramètres de construction 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 soit la bibliothèque sans collection IDFA, soit avec la collection IDFA.
  7. Une fois terminé, Xcode commencera automatiquement à résoudre et à télécharger vos dépendances en arrière-plan.

Maintenant, effectuez quelques étapes de configuration :

  1. Dans la console Firebase, ouvrez la section Liens dynamiques .
  2. Si vous n'avez pas encore accepté les conditions d'utilisation et défini un préfixe URI pour vos liens dynamiques, faites-le lorsque vous y êtes invité.

    Si vous disposez déjà d’un préfixe URI Dynamic Links, prenez-en note. Vous devez le fournir lorsque vous créez des liens dynamiques par programme.

  3. Recommandé : Spécifiez les modèles d'URL autorisés dans vos liens profonds et vos liens de secours. Ce faisant, vous empêchez des tiers non autorisés de créer des liens dynamiques qui redirigent depuis votre domaine vers des sites que vous ne contrôlez pas. Voir Autoriser des modèles d'URL spécifiques .
  4. 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 à la page Paramètres de votre projet Firebase et sélectionnez votre application iOS.

    Confirmez que votre projet Firebase est correctement configuré pour utiliser Dynamic Links dans votre application iOS en ouvrant le fichier apple-app-site-association hébergé sur votre domaine Dynamic Links. Firebase servira le fichier apple-app-site-association à partir de la racine du domaine ainsi que du sous-répertoire .well-known . Par exemple:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/apple-app-site-association
        

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

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

    Si la propriété details est vide, vérifiez que vous avez spécifié votre préfixe App ID. Notez que le préfixe de votre App ID peut ne pas être le même que celui de votre Team ID.

Ajoutez Firebase à votre application

  1. Importez le module FirebaseCore dans votre UIApplicationDelegate , ainsi que tous les autres modules Firebase utilisés par votre délégué d'application. Par exemple, pour utiliser Cloud Firestore et l'authentification :

    SwiftUI

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

    Rapide

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objectif c

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 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()

    Rapide

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

    Objectif c

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Si vous utilisez SwiftUI, vous devez créer un délégué d'application et l'attacher à votre structure App via UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor . Vous devez également désactiver le swizzling des délégués d’application. Pour plus d'informations, 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()
          }
        }
      }
    }
          

Utiliser la console Firebase

Si vous souhaitez générer un seul lien dynamique, soit à des fins de test, soit pour que votre équipe marketing puisse créer facilement un lien pouvant être utilisé dans quelque chose comme une publication sur les réseaux sociaux, le moyen le plus simple serait de visiter la console Firebase et d'en créer un. en suivant manuellement le formulaire étape par étape.

Utilisez l'API iOS Builder

Vous pouvez utiliser l'API iOS Builder pour créer des liens dynamiques à partir de paramètres ou pour raccourcir un lien dynamique long.

Pour créer un Dynamic Link, créez un nouvel objet DynamicLinkComponents et spécifiez les paramètres Dynamic Link en définissant les propriétés correspondantes de l'objet. Ensuite, récupérez le lien long à partir de la propriété url de l'objet ou récupérez le lien court en appelant shorten() .

L'exemple minimal suivant crée un long lien dynamique vers https://www.example.com/my-page qui s'ouvre avec votre application iOS sur iOS et l'application com.example.android sur Android :

Rapide

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objectif c

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

Pour créer un lien dynamique court, créez un DynamicLinkComponents de la même manière, puis appelez shorten() .

La création d'un lien court nécessite un appel réseau, donc au lieu de renvoyer directement le lien, shorten() accepte un gestionnaire d'achèvement, qui est appelé lorsque la requête est terminée. Par exemple:

Rapide

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objectif c

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Par défaut, les liens dynamiques courts sont générés avec des suffixes de lien de 17 caractères, ce qui rend extrêmement improbable que quelqu'un puisse deviner un lien dynamique valide. Si, pour votre cas d'utilisation, il n'y a aucun mal à ce que quelqu'un réussisse à deviner un lien court, vous préférerez peut-être générer des suffixes aussi longs que nécessaire pour être uniques, ce que vous pouvez faire en définissant la propriété dynamicLinkComponentsOptions :

Rapide

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
linkBuilder.options = DynamicLinkComponentsOptions()
linkBuilder.options.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objectif c

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Vous pouvez utiliser l'API Dynamic Link Builder pour créer des liens dynamiques avec l'un des paramètres pris en charge. Consultez la référence API pour plus de détails.

L'exemple suivant crée un lien dynamique avec plusieurs paramètres communs définis :

Rapide

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objectif c

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

Vous pouvez définir les paramètres Dynamic Link avec les objets et propriétés suivants :

Composants DynamicLink
lien

Le lien que votre application ouvrira. Spécifiez une URL que votre application peut gérer, généralement le contenu ou la charge utile de l'application, qui lance une logique spécifique à l'application (par exemple, créditer l'utilisateur d'un coupon ou afficher un écran de bienvenue). Ce lien doit être une URL bien formatée, être correctement codée en URL, utiliser HTTP ou HTTPS et ne peut pas être un autre lien dynamique.

domaineURIPréfixe Votre préfixe d'URL Dynamic Link, que vous pouvez trouver dans la console Firebase. Un domaine Dynamic Link ressemble aux exemples suivants :
https://example.com/link
https://example.page.link
Paramètres DynamicLinkAndroid
URL de secours Le lien à ouvrir lorsque l'application n'est pas installée. Spécifiez cette option pour faire autre chose que d'installer votre application à partir du Play Store lorsque l'application n'est pas installée, comme ouvrir la version Web mobile du contenu ou afficher une page promotionnelle pour votre application.
Version minimale Le versionCode de la version minimale de votre application qui peut ouvrir le lien. Si l'application installée est une ancienne version, l'utilisateur est redirigé vers le Play Store pour mettre à niveau l'application.
Paramètres DynamicLinkIOS
ID de l'AppStore L'identifiant App Store de votre application, utilisé pour envoyer les utilisateurs vers l'App Store lorsque l'application n'est pas installée
URL de secours Le lien à ouvrir lorsque l'application n'est pas installée. Spécifiez cette option pour faire autre chose que d'installer votre application depuis l'App Store lorsque l'application n'est pas installée, comme ouvrir la version Web mobile du contenu ou afficher une page promotionnelle pour votre application.
schéma personnalisé Le schéma d'URL personnalisé de votre application, s'il est défini comme étant autre chose que l'ID du bundle de votre application
URL de secours pour iPad Le lien à ouvrir sur les iPad lorsque l'application n'est pas installée. Spécifiez ceci pour faire autre chose que d'installer votre application depuis l'App Store lorsque l'application n'est pas installée, comme ouvrir la version Web du contenu ou afficher une page promotionnelle pour votre application.
iPadBundleID L'ID du bundle de l'application iOS à utiliser sur les iPad pour ouvrir le lien. L'application doit être connectée à votre projet depuis la page Présentation de la console Firebase.
version minimale de l'application Le numéro de version de la version minimale de votre application qui peut ouvrir le lien. Cet indicateur est transmis à votre application lors de son ouverture, et votre application doit décider quoi en faire.
DynamicLinkNavigationInfoParameters
forcéRedirectEnabled S'il est défini sur « 1 », ignorez la page d'aperçu de l'application lorsque le lien dynamique est ouvert et redirigez-le vers l'application ou la boutique. La page d'aperçu de l'application (activée par défaut) peut envoyer de manière plus fiable les utilisateurs vers la destination la plus appropriée lorsqu'ils ouvrent des liens dynamiques dans les applications ; cependant, si vous vous attendez à ce qu'un Dynamic Link soit ouvert uniquement dans les applications capables d'ouvrir des Dynamic Links de manière fiable sans cette page, vous pouvez le désactiver avec ce paramètre. Ce paramètre affectera le comportement du Dynamic Link uniquement sur iOS.
DynamicLinkSocialMetaTagParameters
titre Le titre à utiliser lorsque le lien dynamique est partagé dans une publication sociale.
descriptionTexte Description à utiliser lorsque le lien dynamique est partagé dans une publication sociale.
URL de l'image L'URL d'une image liée à ce lien. L'image doit mesurer au moins 300 x 200 px et moins de 300 Ko.
DynamicLinkGoogleAnalyticsParamètres
source
moyen
campagne
terme
contenu
Paramètres d'analyse de Google Play. Ces paramètres ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) sont transmis au Play Store et ajoutés à la charge utile du lien.
DynamicLinkItunesConnectAnalyticsParameters
fournisseurToken
jeton d'affiliation
jeton de campagne
Paramètres d'analyse iTunes Connect. Ces paramètres ( pt , at , ct ) sont transmis à l'App Store.

Pour raccourcir un Dynamic Link long, transmettez le long Dynamic Link à shortenURL(url:options:) avec un objet DynamicLinkComponentsOptions si vous souhaitez générer un lien avec un suffixe court :

Rapide

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objectif c

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

Par défaut, Dynamic Links utilise l'identifiant du bundle de votre application comme schéma d'URL nécessaire pour ouvrir votre application. Nous vous recommandons de conserver cette valeur par défaut pour que votre implémentation reste simple.

Toutefois, les développeurs qui utilisent déjà un schéma d'URL personnalisé à d'autres fins peuvent également souhaiter utiliser ce même schéma d'URL personnalisé pour leurs liens dynamiques. Si vous êtes dans cette situation, vous pouvez spécifier un schéma d'URL différent pour vos liens dynamiques Firebase en suivant ces étapes :

  1. Lors de la configuration de votre application, assurez-vous de spécifier le schéma d'URL par défaut à utiliser par votre application avant de configurer votre instance partagée FirebaseApp :

    Rapide

    Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication
                       .LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme
      FirebaseApp.configure()
    
      return true
    }
    

    Objectif c

    Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ou watchOS.
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. Chaque fois que vous créez un lien dynamique, vous devrez spécifier le schéma d'URL personnalisé utilisé par votre application. Vous pouvez le faire via la console Firebase, en définissant le customScheme dans l'API Builder, en spécifiant le paramètre ius dans votre URL ou en envoyant le paramètre iosCustomScheme à l'API REST.

Prochaines étapes

Maintenant que vous avez créé des liens dynamiques, vous devez configurer votre application pour recevoir des liens dynamiques et envoyer les utilisateurs au bon endroit dans votre application après qu'un utilisateur les ouvre.

Pour recevoir des liens dynamiques dans votre application, consultez la documentation pour iOS , Android , C++ et Unity .