Paylaşılan Apple Anahtar Zinciri ile uygulamalar arası kimlik doğrulamayı etkinleştirme

Apple platformlarındaki birden fazla uygulama veya uzantıda kimlik doğrulama durumlarını paylaşmak için Keychain Services'i kullanarak kimlik doğrulama durumunu paylaşılan bir anahtarlıkta saklayın ve uygulamalarınızı paylaşılan anahtarlığı kullanacak şekilde yapılandırın.

Bu, kullanıcıların şunları yapmasına olanak tanır:

  • Bir kez oturum açtığınızda aynı erişim grubuna ait tüm uygulamalarda oturumunuz açık kalır.
  • Oturumu bir kez kapattığınızda aynı erişim grubuna ait tüm uygulamalarda oturumunuz kapatılır.

Uygulamalar arasında kimlik doğrulama durumunu paylaşma

Uygulamalar arasında kimlik doğrulama durumunu paylaşmak için:

  1. Uygulamalarınız için erişim grubu oluşturun.

    Anahtarlık erişim grubu veya uygulama grubu kullanabilirsiniz. Ayrıntılar için Anahtarlık Öğelerine Bir Uygulama Koleksiyonu Arasında Erişim Paylaşma başlıklı makaleyi inceleyin.

    Anahtarlık erişim grubu oluşturmak için her uygulama için aşağıdakileri yapın:

    1. Xcode'da Project settings > Capabilities'e (Proje ayarları > Özellikler) gidin.
    2. Anahtar Zinciri Paylaşımı'nı etkinleştirin.
    3. Anahtar zinciri grubu tanımlayıcısı ekleyin. Durum paylaşmak istediğiniz tüm uygulamalar için aynı tanımlayıcıyı kullanın.
  2. Her uygulamada, erişim grubunu önceki adımda oluşturduğunuz anahtar zinciri erişim grubu veya uygulama grubu olarak ayarlayın.

    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. En az bir uygulamada herhangi bir oturum açma yöntemiyle kullanıcı oturumu açın.

    Swift

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

    Objective-C

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

    Aynı mevcut kullanıcı, erişim grubundaki tüm uygulamalarda kullanılabilir.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    

Paylaşılmayan bir anahtarlığa geri dönme

  1. Kimlik doğrulama durumunun paylaşımını durdurmak için erişim grubunu nil olarak ayarlayın.

    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. Herhangi bir oturum açma yöntemiyle kullanıcının oturumunu açın. Kullanıcı durumu başka uygulamalarda kullanılamaz.

    Swift

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

    Objective-C

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

Oturum açmış bir kullanıcıyı paylaşılan anahtarlığa taşıma

Paylaşılan bir durumda oturum açmış bir kullanıcıyı taşımak için:

  1. Gelecekte kullanmak üzere mevcut kullanıcıya referans verin.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (İsteğe bağlı) Paylaşmak istediğiniz erişim grubunun kimlik doğrulama durumunu kontrol edin.

    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. Daha önce proje ayarlarında belirlediğiniz bir erişim grubunu kullanın.

    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. Mevcut kullanıcıyı güncelleyin.

    Swift

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

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Kullanıcıya artık aynı erişim grubuna erişimi olan diğer uygulamalar tarafından erişilebilir.