App-übergreifende Authentifizierung mit freigegebenem Apple-Schlüsselbund aktivieren

Wenn Sie den Authentifizierungsstatus für mehrere Apps oder Erweiterungen auf Apple-Plattformen freigeben möchten, speichern Sie ihn mithilfe von Keychain Services in einem freigegebenen Schlüsselbund und konfigurieren Sie Ihre Apps so, dass sie den freigegebenen Schlüsselbund verwenden.

So haben Nutzer folgende Möglichkeiten:

  • Einmal anmelden und dann in allen Apps angemeldet, die denselben Zugriff haben Gruppe.
  • Einmal abmelden und dann von allen Apps mit demselben Zugriff abgemeldet Gruppe.

Authentifizierungsstatus zwischen Apps teilen

So geben Sie den Authentifizierungsstatus zwischen Apps frei:

  1. Eine Zugriffsgruppe für Ihre Apps einrichten

    Sie können entweder eine Schlüsselbund-Zugriffsgruppe oder eine App-Gruppe verwenden. Siehe Zugriff auf Schlüsselbundelemente in einer Sammlung von Apps teilen .

    So richten Sie eine Gruppe für den Zugriff auf den Schlüsselbund ein:

    1. Gehen Sie in Xcode zu Project settings > Funktionen.
    2. Aktivieren Sie die Schlüsselbundfreigabe.
    3. Fügen Sie eine Schlüsselbundgruppen-ID hinzu. Verwenden Sie für alle Apps, deren Status Sie teilen möchten.
  2. Legen Sie in jeder App die Zugriffsgruppe auf die im vorherigen Schritt erstellte Schlüsselbund-Zugriffsgruppe oder App-Gruppe fest.

    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];
    
  3. Melden Sie in mindestens einer App einen Nutzer mit einer beliebigen Anmeldemethode an.

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    
    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                               NSError *_Nullable error) {
      // User signed in
    }];
    

    Derselbe aktuelle Nutzer ist in allen Apps in der Zugriffsgruppe verfügbar.

    var user = Auth.auth().currentUser
    
    FIRUser *user = FIRAuth.auth.currentUser;
    

Zurück zu einem nicht freigegebenen Schlüsselbund wechseln

  1. Legen Sie die Zugriffsgruppe auf nil fest, um die Freigabe des Authentifizierungsstatus zu beenden.

    do {
      try Auth.auth().useUserAccessGroup(nil)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    
    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. Melden Sie sich mit einer beliebigen Anmeldemethode an. Der Nutzerstatus ist nicht verfügbar in anderen Apps.

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    
    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                       NSError *_Nullable error) {
      // User signed in
    }];
    

Angemeldeten Nutzer zu einem freigegebenen Schlüsselbund migrieren

So migrieren Sie einen Nutzer, der bereits in einem freigegebenen Zustand angemeldet ist:

  1. Erstellen Sie einen Verweis auf den aktuellen Nutzer für die spätere Verwendung.

    var user = Auth.auth().currentUser
    
    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. Optional: Prüfen Sie den Authentifizierungsstatus der Zugriffsgruppe, die Sie freigeben möchten.

    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
    }
    
  3. Verwenden Sie eine Zugriffsgruppe, die Sie zuvor in den Projekteinstellungen festgelegt haben.

    do {
      try Auth.auth().useUserAccessGroup(accessGroup)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    
    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. Aktualisieren Sie den aktuellen Nutzer.

    Auth.auth().updateCurrentUser(user!) { error in
      // Error handling
    }
    
    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Andere Apps, die auf dieselbe Zugriffsgruppe zugreifen können, können jetzt auf den Nutzer zugreifen.