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

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

Cela peut être extrêmement utile dans les scénarios courants suivants :

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

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

  • Dans d'autres cas, l'utilisateur a peut-être démarré le flux depuis son appareil mobile et s'attend, après validation, à revenir à son application mobile au lieu du navigateur.

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

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

Pour transmettre une URL d'action de manière sécurisée, vous devez ajouter le domaine de l'URL en tant que domaine autorisé :

  1. Dans la console Firebase, accédez à l'onglet Sécurité > Authentification > Paramètres.

  2. Dans la section Domaines autorisés, cliquez sur Ajouter un domaine, puis ajoutez l'URL.

Une instance ActionCodeSettings 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. Elle peut être créée avec la classe ActionCodeSettings.Builder associée, qui contient les méthodes suivantes :

Méthode Description
setUrl(String url)

Définit le lien (état/URL d'action) 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 continueUrl paramètre de requête.
  • Lorsque le lien est géré directement dans l'application, il s'agit du continueUrl paramètre de requête dans le lien profond du Hosting lien.
setIOSBundleId(String iOSBundleId) 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 Apple.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) 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 .
setHandleCodeInApp(boolean status) Indique si le lien d'action par e-mail s'ouvre d'abord dans une application mobile ou dans un lien Web. La valeur par défaut est "false" (inactif). Lorsque la valeur est définie sur "true" (actif), le lien du code d'action est envoyé en tant que lien universel ou lien vers une application Android, et il est ouvert par l'application si elle est installée. Dans le cas où la valeur est "false" (inactif), le code est d'abord envoyé au widget Web, puis, en cas de continuation, il est redirigé vers l'application si elle est installée.
setLinkDomain(String customDomain) 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écifiée. Sinon, le domaine par défaut est automatiquement sélectionné (par exemple, PROJECT_ID.firebaseapp.com).
setDynamicLinkDomain(String dynamicLinkDomain) Obsolète. Ne spécifiez pas ce paramètre.

L'exemple suivant montre comment envoyer un lien de validation par e-mail qui s'ouvre d'abord dans une application mobile. Le lien profond contient la charge utile de l'URL d'action http://www.example.com/verify?uid=1234.

Kotlin

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Firebase Authentication utilise Firebase Hosting lors de l'envoi d'un lien destiné à être ouvert dans une application mobile. Pour utiliser cette fonctionnalité, les liens d'hébergement doivent être configurés dans la Firebase console.

  1. Configurer des applications Android :

    1. Si vous prévoyez de gérer ces liens à partir de votre application Android, le nom de package de votre application doit être spécifié dans les Firebase paramètres du projet de la console. De plus, vous devez fournir les empreintes SHA-1 et SHA-256 du certificat de l'application.
    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 concernant la réception de liens d'hébergement Android.
  2. Configurer des applications iOS :

    1. Si vous prévoyez de gérer ces liens à partir de votre application iOS, vous devrez configurer le Hosting domaine du lien en tant que domaine associé dans les fonctionnalités de votre application.
    2. Pour en savoir plus, consultez les instructions concernant la réception de liens d'hébergement iOS.

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

Vous pouvez spécifier si vous souhaitez gérer d'abord le lien du code d'action à partir d'une application Web, puis rediriger l'utilisateur vers une autre page Web ou une application mobile une fois l'opération terminée, à condition que l'application mobile soit disponible. Pour ce faire, appelez setHandleCodeInApp(false) dans l' objet ActionCodeSettings.Builder. Bien qu'un ID de bundle iOS 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 des modèles d'actions par e-mail. Une URL par défaut est provisionnée pour tous les projets. Pour savoir comment personnaliser le gestionnaire d'actions par e-mail, 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 la URL spécifiée dans l' objet ActionCodeSettings.

Lors de la gestion d'actions par e-mail telles que la validation par 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'e-mail soit validé.

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

Vous pouvez spécifier si vous souhaitez gérer d'abord le lien du code d'action dans votre application mobile, à condition qu'elle soit installée. Si l'utilisateur clique sur le lien à partir d'un appareil qui n'est pas compatible avec l'application mobile, il est ouvert à partir d'une page Web. Pour ce faire, appelez setHandleCodeInApp(true) dans l' objet ActionCodeSettings.Builder. Vous devrez également spécifier le nom du package Android ou l'ID du bundle iOS 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 URL par défaut est provisionnée pour tous les projets. Pour savoir comment personnaliser le gestionnaire d'actions par e-mail, consultez Personnaliser les gestionnaires d'e-mails.

Dans ce cas, le lien de 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. Cette dernière sera l'URL d'origine spécifiée dans l'objet ActionCodeSettings. Le code d'action peut être appliqué directement à partir d'une application mobile, de la même manière que dans le flux Web décrit dans la section Personnaliser les gestionnaires d'e-mails.

Lors de la gestion d'actions par e-mail telles que la validation par 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'e-mail soit validé.