Vous pouvez permettre à vos utilisateurs de s'authentifier auprès de Firebase à l'aide de leur identifiant Apple en utilisant le SDK Firebase pour effectuer le flux de connexion OAuth 2.0 de bout en bout.
Avant de commencer
Pour connecter les utilisateurs à l'aide d'Apple, configurez d'abord "Se connecter avec Apple" sur le site pour les développeurs d'Apple, puis activez Apple en tant que fournisseur de connexion pour votre projet Firebase.
Rejoindre l'Apple Developer Program
Seuls les membres du programme Apple Developer peuvent configurer "Se connecter avec Apple".
Configurer "Se connecter avec Apple"
La connexion avec Apple doit être activée et correctement configurée dans votre projet Firebase. La configuration Apple Developer varie selon les plates-formes Android et Apple. Veuillez suivre la section "Configurer Sign In with Apple" des guides iOS+ et/ou Android avant de continuer.Activer Apple en tant que fournisseur d'identité
- Dans la console Firebase, ouvrez la section Authentification. Dans l'onglet Méthode de connexion, activez le fournisseur Apple.
- Configurez les paramètres du fournisseur Apple Sign In :
- Si vous ne déployez votre application que sur les plates-formes Apple, vous pouvez laisser vides les champs "ID de service", "ID d'équipe Apple", "Clé privée" et "ID de clé".
- Pour obtenir de l'aide sur les appareils Android :
- Ajoutez Firebase à votre projet Android. Veillez à enregistrer la signature SHA-1 de votre application lorsque vous la configurez dans la console Firebase.
- Dans la console Firebase, ouvrez la section Authentification. Dans l'onglet Méthode de connexion, activez le fournisseur Apple. Indiquez l'ID de service que vous avez créé dans la section précédente. De plus, dans la section de configuration du flux de code OAuth, spécifiez votre ID d'équipe Apple, ainsi que la clé privée et l'ID de clé que vous avez créés dans la section précédente.
Respecter les exigences d'Apple concernant les données anonymisées
La fonctionnalité Se connecter avec Apple permet aux utilisateurs d'anonymiser leurs données, y compris leur adresse e-mail, lorsqu'ils se connectent. Les utilisateurs qui choisissent cette option disposent d'adresses e-mail avec le domaine privaterelay.appleid.com
. Lorsque vous utilisez S'identifier avec Apple dans votre application, vous devez respecter le règlement pour les développeurs ou les conditions d'utilisation d'Apple concernant ces identifiants Apple anonymes.
Cela inclut l'obtention de l'autorisation de l'utilisateur avant d'associer des informations personnelles permettant d'identifier directement l'utilisateur à un identifiant Apple anonyme. Lorsque vous utilisez Firebase Authentication, cela peut inclure les actions suivantes :
- Associer une adresse e-mail à un identifiant Apple anonyme, ou inversement
- Associer un numéro de téléphone à un identifiant Apple anonyme, ou inversement
- Associez un identifiant de réseau social non anonyme (Facebook, Google, etc.) à un identifiant Apple anonyme, ou inversement.
La liste ci-dessus n'est pas exhaustive. Consultez le Contrat de licence du programme Apple Developer dans la section "Abonnement" de votre compte de développeur pour vous assurer que votre application répond aux exigences d'Apple.
Accéder au cours Firebase.Auth.FirebaseAuth
La classe FirebaseAuth
est la passerelle pour tous les appels d'API.
Il est accessible via FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Gérer le flux de connexion avec le SDK Firebase
La procédure de connexion avec Apple varie selon les plates-formes Apple et Android.
Sur les plates-formes Apple
Installez un plug-in tiers pour gérer la génération du nonce et du jeton de connexion avec Apple, comme le package Unity's Sign In With Apple Asset Storage. Vous devrez peut-être modifier le code pour acheminer la chaîne de nonce aléatoire générée dans son état de chaîne brute afin de l'utiliser dans les opérations Firebase (c'est-à-dire stocker une copie avant la création du formulaire de résumé SHA256 du nonce).
Utilisez la chaîne de jeton et le nonce brut obtenus pour créer un identifiant Firebase et vous connecter à Firebase.
Firebase.Auth.Credential credential = Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Le même schéma peut être utilisé avec
ReauthenticateAsync
, qui peut servir à récupérer des identifiants récents pour les opérations sensibles nécessitant une connexion récente. Pour en savoir plus, consultez Gérer les utilisateurs.Lorsque vous associez votre compte Apple à Firebase sur les plates-formes Apple, il est possible qu'un message d'erreur s'affiche indiquant qu'un compte Firebase existant a déjà été associé au compte Apple. Dans ce cas, une
Firebase.Auth.FirebaseAccountLinkException
sera générée au lieu de laFirebase.FirebaseException
standard. Dans ce cas, l'exception inclut une propriétéUserInfo.UpdatedCredential
qui, si elle est valide, peut être utilisée pour connecter l'utilisateur associé à Apple viaFirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
. L'identifiant mis à jour permet d'éviter de générer un jeton Apple Sign-In avec un nonce pour l'opération de connexion.auth.CurrentUser.LinkWithCredentialAsync( Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null)) .ContinueWithOnMainThread( task => { if (task.IsCompletedSuccessfully) { // Link Success } else { if (task.Exception != null) { foreach (Exception exception in task.Exception.Flatten().InnerExceptions) { Firebase.Auth.FirebaseAccountLinkException firebaseEx = exception as Firebase.Auth.FirebaseAccountLinkException; if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) { // Attempt to sign in with the updated credential. auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential). ContinueWithOnMainThread( authResultTask => { // Handle Auth result. }); } else { Debug.Log("Link with Apple failed:" + firebaseEx ); } } // end for loop } } });
Sur Android
Sur Android, authentifiez vos utilisateurs avec Firebase en intégrant une connexion OAuth générique basée sur le Web à votre application à l'aide du SDK Firebase pour effectuer le flux de connexion de bout en bout.
Pour gérer le flux de connexion avec le SDK Firebase, procédez comme suit :
Créez une instance de
FederatedOAuthProviderData
configurée avec l'ID de fournisseur approprié pour Apple.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = "apple.com";
Facultatif : Spécifiez des niveaux d'accès OAuth 2.0 supplémentaires en plus de ceux par défaut que vous souhaitez demander au fournisseur d'authentification.
providerData.Scopes = new List<string>(); providerData.Scopes.Add("email"); providerData.Scopes.Add("name");
Facultatif : Si vous souhaitez afficher l'écran de connexion d'Apple dans une autre langue que l'anglais, définissez le paramètre
locale
. Consultez la documentation sur S'identifier avec Apple pour connaître les langues disponibles.providerData.CustomParameters = new Dictionary<string,string>; // Localize to French. providerData.CustomParameters.Add("language", "fr");
Une fois les données de votre fournisseur configurées, utilisez-les pour créer un FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
Authentifiez-vous avec Firebase à l'aide de l'objet du fournisseur d'authentification. Notez que, contrairement à d'autres opérations FirebaseAuth, celle-ci prendra le contrôle de votre UI en affichant une vue Web dans laquelle l'utilisateur pourra saisir ses identifiants.
Pour démarrer le flux de connexion, appelez
signInWithProvider
:auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User signed in successfully: {0} ({1})", user.DisplayName, user.UserId); });
Le même schéma peut être utilisé avec
ReauthenticateWithProvider
, qui peut servir à récupérer des identifiants récents pour les opérations sensibles nécessitant une connexion récente.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
Vous pouvez également utiliser
LinkWithCredentialAsync()
pour associer différents fournisseurs d'identité à des comptes existants.Notez qu'Apple vous demande d'obtenir le consentement explicite des utilisateurs avant d'associer leurs comptes Apple à d'autres données.
Par exemple, pour associer un compte Facebook au compte Firebase actuel, utilisez le jeton d'accès que vous avez obtenu en connectant l'utilisateur à Facebook :
// Initialize a Facebook credential with a Facebook access token. Firebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token); // Assuming the current user is an Apple user linking a Facebook provider. user.LinkWithCredentialAsync(credential) .ContinueWithOnMainThread( task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Firebase.Auth.FirebaseUser user = result.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
Se connecter avec Notes Apple
Contrairement aux autres fournisseurs acceptés par Firebase Auth, Apple ne fournit pas d'URL de photo.
De plus, lorsque l'utilisateur choisit de ne pas partager son adresse e-mail avec l'application, Apple provisionne une adresse e-mail unique pour cet utilisateur (au format xyz@privaterelay.appleid.com
) et la partage avec votre application. Si vous avez configuré le service de relais de messagerie privé, Apple transfère les e-mails envoyés à l'adresse anonyme à l'adresse e-mail réelle de l'utilisateur.
Apple ne partage des informations utilisateur, telles que le nom à afficher, qu'avec les applications la première fois qu'un utilisateur se connecte. En règle générale, Firebase stocke le nom à afficher la première fois qu'un utilisateur se connecte avec Apple. Vous pouvez l'obtenir avec auth.CurrentUser.DisplayName
.
Toutefois, si vous avez déjà utilisé Apple pour connecter un utilisateur à l'application sans utiliser Firebase, Apple ne fournira pas le nom à afficher de l'utilisateur à Firebase.
Étapes suivantes
Lorsqu'un utilisateur se connecte pour la première fois, un compte est créé et associé aux identifiants (nom d'utilisateur et mot de passe, numéro de téléphone ou informations du fournisseur d'authentification) avec lesquels il s'est connecté. Ce nouveau compte est stocké dans votre projet Firebase. Il peut être utilisé pour identifier un utilisateur dans toutes les applications de votre projet, quelle que soit la méthode de connexion de l'utilisateur.Dans vos applications, vous pouvez obtenir les informations de profil de base de l'utilisateur à partir de l'objet Firebase.Auth.FirebaseUser. Consultez Gérer les utilisateurs.
Dans vos règles de sécurité Firebase Realtime Database et Cloud Storage, vous pouvez obtenir l'ID utilisateur unique de l'utilisateur connecté à partir de la variable auth et l'utiliser pour contrôler les données auxquelles un utilisateur peut accéder.