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

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

Dadurch können Nutzer Folgendes tun:

  • Einmal anmelden und in allen Apps angemeldet bleiben, die zur selben Zugriffsgruppe gehören.
  • Einmal abmelden und in allen Apps abgemeldet werden, die zur selben Zugriffsgruppe gehören.

Authentifizierungsstatus zwischen Apps freigeben

So geben Sie den Authentifizierungsstatus zwischen Apps frei:

  1. Richten Sie eine Zugriffsgruppe für Ihre Apps ein.

    Sie können entweder eine Schlüsselbund-Zugriffsgruppe oder eine App-Gruppe verwenden. Weitere Informationen finden Sie unter Zugriff auf Schlüsselbundelemente für eine Sammlung von Apps freigeben.

    So richten Sie eine Schlüsselbund-Zugriffsgruppe ein (für jede App):

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

    Swift

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

    Objective-C

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. Melden Sie sich in mindestens einer App mit einer beliebigen Anmeldemethode an.

    Swift

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

    Objective-C

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

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

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    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.

    Swift

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

    Objective-C

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. Melden Sie sich mit einer beliebigen Anmeldemethode an. Der Nutzerstatus ist für keine anderen Apps verfügbar.

    Swift

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

    Objective-C

    [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 angemeldet ist, zu einem freigegebenen Status:

  1. Erstellen Sie eine Referenz zum aktuellen Nutzer für die zukünftige Verwendung.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

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

    Swift

    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
    }
    

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

    Swift

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

    Objective-C

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. Aktualisieren Sie den aktuellen Nutzer.

    Swift

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

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Auf den Nutzer kann jetzt von anderen Apps zugegriffen werden, die Zugriff auf dieselbe Zugriffsgruppe haben.