État de transmission dans les actions d'e-mail

Vous pouvez transmettre l'état via une URL de poursuite lorsque vous envoyez des actions par e-mail pour réinitialiser un mot de passe ou valider l'adresse e-mail d'un utilisateur. Cela permet à l'utilisateur d'être redirigé vers l'application une fois l'action terminée. De plus, vous pouvez spécifier si le lien d'action de l'e-mail doit être géré directement depuis une application mobile lorsqu'elle est installée, au lieu d'une page Web.

Cela peut s'avérer extrêmement utile dans les scénarios courants suivants :

  • Un utilisateur qui n'est pas connecté tente peut-être d'accéder à un contenu qui nécessite qu'il soit connecté. Toutefois, il est possible que l'utilisateur ait oublié son mot de passe et déclenche donc le processus de réinitialisation. À la fin du flux, l'utilisateur s'attend à revenir à la section de l'application à laquelle il essayait d'accéder.

  • Une application ne peut proposer l'accès qu'à des comptes validés. Par exemple, une application de newsletter peut exiger que l'utilisateur valide son adresse e-mail avant de s'abonner. L'utilisateur suit le flux de validation de l'adresse e-mail et s'attend à être redirigé vers l'application pour finaliser son abonnement.

  • En général, lorsqu'un utilisateur lance un flux de réinitialisation de mot de passe ou de validation d'adresse e-mail dans une application Apple, il s'attend à le terminer dans l'application. La possibilité de transmettre l'état via l'URL de poursuite le permet.

La possibilité de transmettre l'état via une URL de poursuite est une fonctionnalité puissante fournie par Firebase Auth, qui peut améliorer considérablement l'expérience utilisateur.

Transmettre l'état d'une URL de poursuite dans les actions par e-mail

Pour transmettre une URL d'action de manière sécurisée, le domaine de l'URL doit être ajouté à la liste blanche dans la console Firebase. Pour ce faire, dans la section Authentification, ajoutez ce domaine à la liste des Domaines autorisés sous l'onglet Méthode de connexion, s'il n'y figure pas déjà.

Une instance FIRActionCodeSettings doit être fournie lors de l'envoi d'un e-mail de réinitialisation du mot de passe ou d'un e-mail de validation. Cette interface utilise les paramètres suivants :

Swift

Paramètre Type Description
URL Chaîne

Définit le lien (URL d'état/de poursuite) qui a différentes significations selon le contexte :

  • Lorsque le lien est géré dans les widgets d'action Web, il s'agit du lien profond dans le paramètre de requête continueUrl.
  • Lorsque le lien est géré directement dans l'application, il s'agit du paramètre de requête continueUrl dans le lien profond du lien Hosting.
iOSBundleID Chaîne Définit l'ID de bundle iOS pour aider Firebase Authentication à déterminer s'il doit créer un lien Web uniquement ou un lien mobile qui s'ouvre sur un appareil Apple.
androidPackageName Chaîne Définit le nom du package Android pour aider Firebase Authentication à déterminer s'il doit créer un lien Web uniquement ou un lien mobile qui s'ouvre sur un appareil Android.
handleCodeInApp Bool Indique si le lien d'action de l'e-mail sera d'abord ouvert dans une application mobile ou un lien Web. La valeur par défaut est "false" (inactif). Si la valeur est définie sur "true", le lien du code d'action sera envoyé en tant que lien universel ou lien d'application Android, et sera ouvert par l'application si elle est installée. Dans le cas "false", le code sera d'abord envoyé au widget Web, puis, si l'application est installée, l'utilisateur sera redirigé vers celle-ci lorsqu'il cliquera sur "Continuer".
linkDomain Chaîne Lorsque des domaines de liens d'hébergement personnalisés sont définis pour un projet, spécifiez celui à utiliser lorsque le lien doit être ouvert par une application mobile spécifique. Sinon, le domaine par défaut est automatiquement sélectionné (par exemple, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain Chaîne Obsolète. Ne spécifiez pas ce paramètre.

Objective-C

Paramètre Type Description
URL NSString

Définit le lien (URL d'état/de poursuite) qui a différentes significations selon le contexte :

  • Lorsque le lien est géré dans les widgets d'action Web, il s'agit du lien profond dans le paramètre de requête continueUrl.
  • Lorsque le lien est géré directement dans l'application, il s'agit du paramètre de requête continueUrl dans le lien profond du lien Hosting.
iOSBundleID NSString Définit l'ID du bundle iOS pour aider Firebase Authentication à déterminer s'il doit créer un lien Web uniquement ou un lien mobile qui s'ouvre sur un appareil Android ou Apple.
androidPackageName NSString Définit le nom du package Android pour aider Firebase Authentication à déterminer s'il doit créer un lien Web uniquement ou un lien mobile qui s'ouvre sur un appareil Android ou Apple.
handleCodeInApp BOOL Indique si le lien d'action de l'e-mail sera d'abord ouvert dans une application mobile ou un lien Web. La valeur par défaut est "false" (inactif). Si la valeur est définie sur "true", le lien du code d'action sera envoyé en tant que lien universel ou lien d'application Android, et sera ouvert par l'application si elle est installée. Dans le cas "false", le code sera d'abord envoyé au widget Web, puis, si l'application est installée, l'utilisateur sera redirigé vers celle-ci lorsqu'il cliquera sur "Continuer".
linkDomain NSString Lorsque des domaines de liens Hosting personnalisés sont définis pour un projet, spécifiez celui à utiliser lorsque le lien doit être ouvert par une application mobile spécifique. Sinon, le domaine par défaut est automatiquement sélectionné (par exemple, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain NSString Obsolète. Ne spécifiez pas ce paramètre.

L'exemple suivant montre comment envoyer un lien de validation d'adresse e-mail qui s'ouvrira d'abord dans une application mobile à l'aide du domaine de lien Hosting personnalisé custom-domain.com. Le lien profond contiendra la charge utile de l'URL de poursuite https://www.example.com/?email=user@example.com.

Swift

var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android")
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
actionCodeSettings.linkDomain = "custom-domain.com"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Objective-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
 actionCodeSettings.linkDomain = @"custom-domain.com";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

Firebase Authentication utilise Firebase Hosting lorsqu'il envoie un lien destiné à être ouvert dans une application mobile. Pour utiliser cette fonctionnalité, vous devez configurer les liens Hosting dans la console Firebase.

  1. Configurer les applications Apple :

    1. Si vous prévoyez de gérer ces liens depuis votre application, vous devrez configurer le domaine de lien Hosting en tant que domaine associé dans les fonctionnalités de votre application.
    2. Pour en savoir plus, consultez les instructions pour recevoir des liens d'hébergement iOS.
  2. Configurer les applications Android :

    1. Si vous prévoyez de gérer ces liens depuis votre application Android, le nom du package de votre application doit être spécifié dans les paramètres du projet de la console Firebase. De plus, les empreintes SHA-1 et SHA-256 du certificat de l'application doivent être fournies.
    2. Vous devrez également configurer le filtre d'intent pour le lien profond dans votre fichier AndroidManifest.xml.
    3. Pour en savoir plus, consultez les instructions pour recevoir des liens d'hébergement Android.

Gérer les actions d'e-mail dans une application Web

Vous pouvez spécifier si vous souhaitez d'abord gérer le lien du code d'action à partir d'une application Web, puis rediriger l'utilisateur vers une autre page Web ou application mobile une fois l'opération terminée, à condition que l'application mobile soit disponible. Pour ce faire, définissez handleCodeInApp sur false dans l'objet FIRActionCodeSettings (Obj-C) ou ActionCodeSettings (Swift). Bien qu'un ID de bundle ou un nom de package Android ne soient pas obligatoires, les fournir permettra à l'utilisateur d'être redirigé vers l'application spécifiée une fois le code d'action par e-mail terminé.

L'URL Web utilisée ici est celle configurée dans la section "Modèles d'actions d'e-mail". Une instance par défaut est provisionnée pour tous les projets. Pour savoir comment personnaliser le gestionnaire d'actions de messagerie, consultez Personnaliser les gestionnaires d'e-mails.

Dans ce cas, le lien dans le paramètre de requête continueURL sera un lien Hosting dont la charge utile est le URL spécifié dans l'objet ActionCodeSettings.

Lors du traitement des actions par e-mail, telles que la validation d'adresse e-mail, le code d'action du paramètre de requête oobCode doit être analysé à partir du lien profond, puis appliqué via applyActionCode pour que la modification prenne effet (c'est-à-dire que l'adresse e-mail soit validée).

Gérer les actions d'e-mail dans une application mobile

Vous pouvez spécifier si vous souhaitez d'abord gérer le lien du code d'action dans votre application mobile, à condition qu'elle soit installée. Si l'utilisateur clique sur le lien depuis un appareil qui n'est pas compatible avec l'application mobile, il est redirigé vers une page Web. Pour ce faire, définissez handleCodeInApp sur true dans l'objet FIRActionCodeSettings (Obj-C) ou ActionCodeSettings (Swift). Vous devrez également spécifier le nom du package Android ou l'ID du bundle de l'application mobile. L'URL Web de remplacement utilisée ici, lorsqu'aucune application mobile n'est disponible, est celle configurée dans la section des modèles d'actions par e-mail. Une configuration par défaut est provisionnée pour tous les projets. Pour savoir comment personnaliser le gestionnaire d'actions de messagerie, consultez Personnaliser les gestionnaires d'e-mails.

Dans ce cas, le lien vers l'application mobile envoyé à l'utilisateur sera un lien Hosting dont la charge utile est l'URL du code d'action, configurée dans la console, avec les paramètres de requête oobCode, mode, apiKey et continueUrl. Ce dernier sera le URL d'origine spécifié dans l'objet FIRActionCodeSettings (Obj-C) ou ActionCodeSettings (Swift). Le code d'action peut être appliqué directement à partir d'une application mobile, de la même manière qu'il est géré à partir du flux Web décrit dans la section Personnaliser les gestionnaires d'e-mails.

Lors du traitement des actions par e-mail, telles que la validation d'adresse e-mail, le code d'action du paramètre de requête oobCode doit être analysé à partir du lien profond, puis appliqué via applyActionCode pour que la modification prenne effet (c'est-à-dire que l'adresse e-mail soit validée).