Activation de l'authentification multi-applications avec le trousseau Apple partagé

Pour partager les é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 de trousseau et configurez vos applications pour utiliser le trousseau partagé.

Cela permet aux utilisateurs de :

  • Connectez-vous une fois et soyez connecté sur toutes les applications appartenant au même groupe d'accès.
  • Déconnectez-vous une fois et déconnectez-vous de toutes les applications appartenant au même groupe d'accès.

Partager l'état d'authentification entre les applications

Pour partager l'état d'authentification entre les applications :

  1. Configurez un groupe d'accès pour vos applications.

    Vous pouvez utiliser soit un groupe d’accès au trousseau, soit un groupe d’applications. Voir Partage de l'accès aux éléments du trousseau parmi une collection d'applications pour plus de détails.

    Pour configurer un groupe d'accès au trousseau, procédez comme suit pour chaque application :

    1. Dans Xcode, accédez à Project settings > Capabilities .
    2. Activez le partage de trousseau.
    3. Ajoutez un identifiant de groupe de trousseau. Utilisez le même identifiant pour toutes les applications dont vous souhaitez partager l’état.
  2. Dans chaque application, définissez le groupe d'accès sur le groupe d'accès au trousseau ou le groupe d'applications que vous avez créé à l'étape précédente.

    Rapide

    do {
      try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1")
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objectif c

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. Dans au moins une application, connectez un utilisateur avec n’importe quelle méthode de connexion.

    Rapide

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    Objectif c

    [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.

    Rapide

    var user = Auth.auth().currentUser
    

    Objectif c

    FIRUser *user = FIRAuth.auth.currentUser;
    

Revenir à un trousseau non partagé

  1. Définissez le groupe d’accès sur nil pour arrêter de partager l’état d’authentification.

    Rapide

    do {
      try Auth.auth().useUserAccessGroup(nil)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objectif c

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. Connectez un utilisateur avec n’importe quelle méthode de connexion. L'état utilisateur ne sera disponible pour aucune autre application.

    Rapide

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    Objectif c

    [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é :

  1. Faites une référence à l'utilisateur actuel pour une utilisation future.

    Rapide

    var user = Auth.auth().currentUser
    

    Objectif c

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (Facultatif) Vérifiez l'état d'authentification du groupe d'accès que vous souhaitez partager.

    Rapide

    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
    }
    

    Objectif c

    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
    }
    
  3. Utilisez un groupe d'accès que vous avez préalablement défini dans les paramètres du projet.

    Rapide

    do {
      try Auth.auth().useUserAccessGroup(accessGroup)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objectif c

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. Mettez à jour l'utilisateur actuel.

    Rapide

    Auth.auth().updateCurrentUser(user!) { error in
      // Error handling
    }
    

    Objectif c

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. L'utilisateur est désormais accessible par d'autres applications ayant accès au même groupe d'accès.