Créer des liens dynamiques sur iOS

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

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

Prérequis

Avant de commencer, veillez à ajouter Firebase à votre projet iOS.

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

  1. Dans Xcode, à partir de 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. Consultez nos questions fréquentes sur la dernière organisation des modules dans le Google Analytics pour le SDK Firebase.
  7. Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.

Effectuez maintenant quelques étapes de configuration :

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

    Si vous avez déjà un préfixe d'URI Dynamic Links, notez-le. Vous devez le fournir lorsque vous créez des Dynamic Links de manière programmatique.

  3. Recommandation : spécifiez les formats d'URL autorisés pour vos liens profonds et liens de remplacement. Vous empêchez ainsi des tiers non autorisés de créer des Dynamic Links qui redirigent de votre domaine vers des sites que vous ne contrôlez pas. Consultez Autoriser des modèles d'URL spécifiques.
  4. 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 Paramètres de votre projet Firebase, puis sélectionnez votre application iOS.

    Vérifiez 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 diffusera le fichier apple-app-site-association à la racine du domaine ainsi que dans le sous-répertoire .well-known. 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 de l'ID d'application et à l'ID du bundle de votre application. Exemple :

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

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

Ajoutez Firebase à votre application

  1. Importez le module FirebaseCore dans votre UIApplicationDelegate, ainsi que tous les autres modules Firebase utilisés par le délégué de votre 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;
    // ...
          
  2. Configurez une instance partagée FirebaseApp dans la méthode application(_:didFinishLaunchingWithOptions:) du délégué de votre 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];
  3. Si vous utilisez SwiftUI, vous devez créer un délégué d'application et l'associer à votre structure App via UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor. Vous devez également désactiver le swizzling du délégué 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()
          }
        }
      }
    }
          

Utiliser la console Firebase

Si vous souhaitez générer un seul Dynamic Link, que ce soit à des fins de test ou pour permettre à votre équipe marketing de créer facilement un lien à utiliser dans un post sur les réseaux sociaux, par exemple, le moyen le plus simple consiste à accéder à la console Firebase et à en créer un manuellement en suivant le formulaire pas à pas.

Utiliser l'API iOS Builder

Vous pouvez utiliser l'API iOS Builder pour créer des Dynamic Links à partir de paramètres ou pour raccourcir un Dynamic Link long.

Pour créer un Dynamic Link, créez un 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 le lien court en appelant shorten().

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

Swift

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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)")

Objective-C

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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 Short Dynamic Link, créez un DynamicLinkComponents de la même manière, puis appelez shorten().

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

Swift

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

Objective-C

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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 Dynamic Links courts sont générés avec des suffixes de lien de 17 caractères, ce qui rend extrêmement improbable qu'une personne puisse deviner un Dynamic Link valide. Si, pour votre cas d'utilisation, il n'y a aucun risque à ce qu'une personne devine un lien raccourci, vous pouvez préférer générer des suffixes qui ne sont pas plus longs que nécessaire pour être uniques. Pour ce faire, définissez la propriété dynamicLinkComponentsOptions :

Swift

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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)")
}

Objective-C

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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 Builder Dynamic Link pour créer des Dynamic Links avec l'un des paramètres compatibles. Pour en savoir plus, consultez la documentation de référence de l'API.

L'exemple suivant crée un Dynamic Link avec plusieurs paramètres courants définis :

Swift

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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)")

Objective-C

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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 :

DynamicLinkComponents
lien

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 déclenche une logique spécifique à l'application (par exemple, créditer un bon de réduction à l'utilisateur ou afficher un écran d'accueil). Ce lien doit être une URL bien mise en forme, correctement encodée, utilisant HTTP ou HTTPS, et ne peut pas être un autre lien dynamique.

domainURIPrefix Le préfixe de votre URL Dynamic Link, que vous trouverez dans la console Firebase. Un domaine Dynamic Link ressemble aux exemples suivants :
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
fallbackURL Lien à ouvrir lorsque l'application n'est pas installée. Spécifiez cette valeur pour effectuer une action autre que l'installation de votre application depuis le Play Store lorsque l'application n'est pas installée. Par exemple, ouvrez la version Web mobile du contenu ou affichez une page promotionnelle pour votre application.
minimumVersion 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 la mettre à niveau.
DynamicLinkIOSParameters
appStoreID ID App Store de votre application, utilisé pour rediriger les utilisateurs vers l'App Store lorsque l'application n'est pas installée
fallbackURL Lien à ouvrir lorsque l'application n'est pas installée. Spécifiez cette valeur pour effectuer une action autre que l'installation de votre application depuis l'App Store lorsque l'application n'est pas installée. Par exemple, ouvrez la version Web mobile du contenu ou affichez une page promotionnelle pour votre application.
customScheme Schéma d'URL personnalisé de votre application, s'il est défini sur une valeur autre que l'ID du bundle de votre application
iPadFallbackURL Lien à ouvrir sur les iPad lorsque l'application n'est pas installée. Spécifiez cette option pour effectuer une action autre que l'installation de votre application depuis l'App Store lorsque l'application n'est pas installée. Par exemple, ouvrez la version Web du contenu ou affichez une page promotionnelle pour votre application.
iPadBundleID ID du bundle de l'application iOS à utiliser sur les iPad pour ouvrir le lien. L'application doit être associée à votre projet depuis la page "Présentation" de la console Firebase.
minimumAppVersion Le numéro de version de la version minimale de votre application qui peut ouvrir le lien. Cet indicateur est transmis à votre application lorsqu'elle est ouverte, et votre application doit décider de ce qu'elle doit en faire.
DynamicLinkNavigationInfoParameters
forcedRedirectEnabled Si la valeur est définie sur "1", la page d'aperçu de l'application est ignorée lorsque Dynamic Link est ouvert, et l'utilisateur est redirigé vers l'application ou le Play Store. La page d'aperçu de l'application (activée par défaut) peut envoyer les utilisateurs plus efficacement vers la destination la plus appropriée lorsqu'ils ouvrent Dynamic Links dans les applications. Toutefois, si vous prévoyez qu'un Dynamic Link ne soit ouvert que dans les applications qui peuvent ouvrir Dynamic Links de manière fiable sans cette page, vous pouvez la désactiver avec ce paramètre. Ce paramètre n'affecte le comportement de Dynamic Link que sur iOS.
DynamicLinkSocialMetaTagParameters
titre Titre à utiliser lorsque le Dynamic Link est partagé dans un post sur les réseaux sociaux.
descriptionText Description à utiliser lorsque le Dynamic Link est partagé dans un post sur les réseaux sociaux.
imageURL URL d'une image associée à ce lien. L'image doit faire au moins 300 x 200 pixels et moins de 300 Ko.
DynamicLinkGoogleAnalyticsParameters
source
medium
campaign
term
content
Paramètres d'analyse Google Play. Ces paramètres (utm_source, utm_medium, utm_campaign, utm_term, utm_content) sont également transmis au Play Store et ajoutés à la charge utile du lien.
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
campaignToken
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 à shortenURL(url:options:) avec un objet DynamicLinkComponentsOptions si vous souhaitez générer un lien avec un suffixe court :Dynamic Link

Swift

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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)")
}

Objective-C

Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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 simplifier votre implémentation.

Toutefois, les développeurs qui utilisent déjà un schéma d'URL personnalisé à d'autres fins peuvent souhaiter utiliser ce même schéma d'URL personnalisé pour leur Dynamic Links. Dans ce cas, vous pouvez spécifier un autre schéma d'URL pour votre Firebase Dynamic Links en procédant comme suit :

  1. Lorsque vous configurez 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 :

    Swift

    Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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
    }

    Objective-C

    Remarque : Ce produit Firebase n'est pas disponible sur les cibles macOS, Mac Catalyst, tvOS ni 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 Dynamic Link, vous devez spécifier le schéma d'URL personnalisé utilisé par votre application. Pour ce faire, vous pouvez utiliser la console Firebase, définir customScheme dans l'API Builder, spécifier le paramètre ius dans votre URL ou envoyer le paramètre iosCustomScheme à l'API REST.

Étapes suivantes

Maintenant que vous avez créé Dynamic Links, vous devez configurer votre application pour qu'elle reçoive Dynamic Links et redirige les utilisateurs vers le bon endroit dans votre application après qu'ils les ont ouverts.

Pour recevoir Dynamic Links dans votre application, consultez la documentation pour iOS, Android, C++ et Unity.