S'authentifier de manière anonyme avec Firebase sur Android

Vous pouvez utiliser Firebase Authentication pour créer et utiliser des comptes anonymes temporaires afin de vous authentifier auprès de Firebase. Ces comptes anonymes temporaires peuvent être utilisés pour permettre aux utilisateurs qui ne se sont pas encore inscrits à votre application d'utiliser des données protégées par des règles de sécurité. Si un utilisateur anonyme décide de s'inscrire à votre application, vous pouvez associer ses identifiants de connexion au compte anonyme afin qu'il puisse continuer à utiliser ses données protégées lors de futures sessions.

Avant de commencer

  1. Si ce n'est pas déjà fait, ajoutez Firebase à votre projet Android.
  2. Dans le fichier Gradle de votre module (au niveau de l'application) (généralement <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), ajoutez la dépendance pour la bibliothèque Firebase Authentication pour Android. Nous vous recommandons d'utiliser la Firebase Android BoM pour contrôler la gestion des versions de la bibliothèque.
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }

    En utilisant les Firebase Android BoM, votre application utilisera toujours des versions compatibles des bibliothèques Firebase Android.

    (Alternative)  Ajouter des dépendances de bibliothèque Firebase sans utiliser la BoM

    Si vous choisissez de ne pas utiliser la Firebase BoM, vous devez spécifier chaque version de la bibliothèque Firebase dans sa ligne de dépendance.

    Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons vivement d'utiliser la BoM pour gérer les versions des bibliothèques, ce qui garantit que toutes les versions sont compatibles.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:24.0.1")
    }
  3. Si vous n'avez pas encore associé votre application à votre projet Firebase, faites-le depuis la Firebase console.
  4. Activez l'authentification anonyme :
    1. Dans la Firebase console, ouvrez la section Auth (Authentification).
    2. Sur la page Sign-in Methods (Méthodes de connexion), activez la méthode de connexion Anonymous (Anonyme).
    3. Facultatif : Si vous avez mis à niveau votre projet vers Firebase Authentication with Identity Platform, vous pouvez activer le nettoyage automatique. Lorsque vous activez ce paramètre, les comptes anonymes datant de plus de 30 jours sont automatiquement supprimés. Dans les projets pour lesquels le nettoyage automatique est activé, l'authentification anonyme n'est plus comptabilisée dans les limites d'utilisation ni dans les quotas de facturation. Consultez la section Nettoyage automatique.

S'authentifier auprès de Firebase de manière anonyme

Lorsqu'un utilisateur déconnecté utilise une fonctionnalité d'application qui nécessite une authentification auprès de Firebase, connectez-le de manière anonyme en procédant comme suit :

  1. Dans la méthode onCreate de votre activité, obtenez l'instance partagée de l'objet FirebaseAuth :

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. Lors de l'initialisation de votre activité, vérifiez si l'utilisateur est actuellement connecté :

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
  3. Enfin, appelez signInAnonymously pour vous connecter en tant qu'utilisateur anonyme utilisateur :

    Kotlin

    auth.signInAnonymously()
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInAnonymously:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInAnonymously:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.signInAnonymously()
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    Si la connexion aboutit, vous pouvez utiliser la méthode getCurrentUser pour obtenir les données de compte de l'utilisateur.

Convertir un compte anonyme en compte permanent

Lorsqu'un utilisateur anonyme s'inscrit à votre application, vous pouvez lui permettre de continuer à travailler avec son nouveau compte. Par exemple, vous pouvez rendre les articles que l'utilisateur a ajoutés à son panier avant de s'inscrire disponibles dans le panier de son nouveau compte. Pour cela, procédez comme suit :

  1. Lorsque l'utilisateur s'inscrit, effectuez le flux de connexion pour le fournisseur d'authentification de l'utilisateur jusqu'à l'appel de l'une des méthodes FirebaseAuth.signInWith, mais sans l'inclure. Par exemple, obtenez le jeton d'ID Google de l'utilisateur, jeton d'accès Facebook, ou adresse e-mail et mot de passe.
  2. Obtenez un AuthCredential pour le nouveau fournisseur d'authentification :

    Google Sign-In

    Kotlin

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    Facebook Login

    Kotlin

    val credential = FacebookAuthProvider.getCredential(token.token)

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    Connexion avec une adresse e-mail et un mot de passe

    Kotlin

    val credential = EmailAuthProvider.getCredential(email, password)

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
  3. Transmettez l'objet AuthCredential à la méthode linkWithCredential de l'utilisateur connecté :

    Kotlin

    auth.currentUser!!.linkWithCredential(credential)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "linkWithCredential:success")
                val user = task.result?.user
                updateUI(user)
            } else {
                Log.w(TAG, "linkWithCredential:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

Si l'appel à linkWithCredential aboutit, le nouveau compte de l'utilisateur peut accéder aux données Firebase du compte anonyme.

Nettoyage automatique

Si vous avez mis à niveau votre projet vers Firebase Authentication with Identity Platform, vous pouvez activer le nettoyage automatique dans la Firebase console. Lorsque vous activez cette fonctionnalité, vous autorisez Firebase à supprimer automatiquement les comptes anonymes datant de plus de 30 jours. Dans les projets pour lesquels le nettoyage automatique est activé, l'authentification anonyme n'est pas comptabilisée dans les limites d'utilisation ni dans les quotas de facturation.

  • Tous les comptes anonymes créés après l'activation du nettoyage automatique peuvent être supprimés automatiquement à tout moment après 30 jours suivant leur création.
  • Les comptes anonymes existants pourront être supprimés automatiquement 30 jours après l'activation du nettoyage automatique.
  • Si vous désactivez le nettoyage automatique, tous les comptes anonymes dont la suppression est programmée le resteront programmés pour être supprimés.
  • Si vous "mettez à niveau" un compte anonyme en l'associant à une méthode de connexion, il ne sera pas supprimé automatiquement.

Si vous souhaitez voir le nombre d'utilisateurs concernés avant d'activer cette fonctionnalité et que vous avez mis à niveau votre projet vers Firebase Authentication with Identity Platform, vous pouvez filtrer par is_anon dans Cloud Logging.

Étapes suivantes

Maintenant que les utilisateurs peuvent s'authentifier auprès de Firebase, vous pouvez contrôler leur accès aux données de votre base de données Firebase à l'aide des règles Firebase.