Pour partager des états d'authentification entre plusieurs applications ou extensions sur les plates-formes Apple, stockez l'état d'authentification dans un trousseau partagé à l'aide des services Keychain et configurez vos applications pour qu'elles utilisent le trousseau partagé.
Cela permet aux utilisateurs d'effectuer les opérations suivantes :
- Il doit se connecter une seule fois pour être connecté à toutes les applications associées au même accès. groupe.
- Déconnectez-vous une fois pour toutes les applications associées au même accès. groupe.
Partager l'état d'authentification entre les applis
Pour partager l'état d'authentification entre les applications:
Configurez un groupe d'accès pour vos applications.
Vous pouvez utiliser un groupe d'accès à un trousseau d'accès ou un groupe d'applications. Pour en savoir plus, consultez la section Partager l'accès aux éléments du trousseau entre une collection d'applications.
Pour configurer un groupe d'accès au trousseau, procédez comme suit pour chaque application :
- Dans Xcode, accédez à Project settings > Capabilities (Paramètres du projet > Fonctionnalités).
- Activez le partage du trousseau.
- Ajoutez un identifiant de groupe de trousseau de clés. Utilisez le même identifiant pour tous les les applications avec lesquelles vous souhaitez partager l'état.
Dans chaque application, définissez le groupe d'accès sur le groupe d'accès du trousseau ou le groupe d'applications que vous avez créé à l'étape précédente.
do { try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1") } catch let error as NSError { print("Error changing user access group: %@", error) }
[FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1" error:nil];
Dans au moins une application, connectez un utilisateur avec n'importe quelle méthode de connexion.
Auth.auth().signInAnonymously { result, error in // User signed in }
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Le même utilisateur actuel est disponible dans toutes les applications du groupe d'accès.
var user = Auth.auth().currentUser
FIRUser *user = FIRAuth.auth.currentUser;
Revenir à un trousseau non partagé
Définissez le groupe d'accès sur
nil
pour arrêter de partager l'état d'authentification.do { try Auth.auth().useUserAccessGroup(nil) } catch let error as NSError { print("Error changing user access group: %@", error) }
[FIRAuth.auth useUserAccessGroup:nil error:nil];
Connectez un utilisateur avec n'importe quelle méthode de connexion. L'état de l'utilisateur ne sera pas disponible à d'autres applications.
Auth.auth().signInAnonymously { result, error in // User signed in }
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Migrer un utilisateur connecté vers un trousseau partagé
Pour migrer un utilisateur déjà connecté vers un état partagé :
Faire référence à l'utilisateur actuel pour une utilisation ultérieure
var user = Auth.auth().currentUser
FIRUser *user = FIRAuth.auth.currentUser;
(Facultatif) Vérifiez l'état d'authentification du groupe d'accès que vous souhaitez partager.
let accessGroup = "TEAMID.com.example.group1" var tempUser: User? do { try tempUser = Auth.auth().getStoredUser(forAccessGroup: accessGroup) } catch let error as NSError { print("Error getting stored user: %@", error) } if tempUser != nil { // A user exists in the access group } else { // No user exists in the access group }
NSString *accessGroup = @"TEAMID.com.example.group1"; FIRUser *tempUser = [FIRAuth getStoredUserForAccessGroup:accessGroup error:nil]; if (tempUser) { // A user exists in the access group } else { // No user exists in the access group }
Utilisez un groupe d'accès que vous avez défini précédemment dans les paramètres du projet.
do { try Auth.auth().useUserAccessGroup(accessGroup) } catch let error as NSError { print("Error changing user access group: %@", error) }
[FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
Mettez à jour l'utilisateur actuel.
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
L'utilisateur peut désormais être consulté par d'autres applications ayant accès au même groupe d'accès.