Mengaktifkan autentikasi lintas aplikasi dengan Keychain Apple yang digunakan bersama

Untuk berbagi status autentikasi di sejumlah aplikasi atau ekstensi di platform Apple, simpan status autentikasi di keychain bersama menggunakan Keychain Services dan konfigurasikan aplikasi Anda untuk menggunakan keychain bersama.

Hal ini memungkinkan pengguna untuk:

  • Login sekali dan di semua aplikasi milik grup akses yang sama.
  • Logout sekali dan di semua aplikasi milik grup akses yang sama.

Berbagi status autentikasi antaraplikasi

Untuk berbagi status autentikasi antaraplikasi:

  1. Siapkan grup akses untuk aplikasi Anda.

    Anda dapat menggunakan grup akses keychain atau grup aplikasi. Baca Berbagi Akses ke Item Keychain di Antara Kumpulan Aplikasi untuk mengetahui detailnya.

    Untuk menyiapkan grup akses keychain, lakukan hal berikut untuk setiap aplikasi:

    1. Di Xcode, buka Project settings > Capabilities.
    2. Aktifkan Keychain Sharing.
    3. Tambahkan ID grup keychain. Gunakan ID yang sama untuk semua aplikasi yang statusnya ingin Anda bagikan.
  2. Di setiap aplikasi, tetapkan grup akses ke grup akses keychain atau grup aplikasi yang Anda buat di langkah sebelumnya.

    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. Di setidaknya satu aplikasi, buat pengguna login dengan metode login apa saja.

    Swift

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

    Objective-C

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

    Pengguna yang sama saat ini tersedia di semua aplikasi dalam grup akses.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    

Beralih kembali ke keychain yang tidak dibagikan

  1. Tetapkan grup akses ke nil untuk berhenti berbagi status autentikasi.

    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. Buat pengguna login dengan metode login apa saja. Status pengguna tidak akan tersedia untuk aplikasi lain.

    Swift

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

    Objective-C

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

Memigrasikan pengguna yang sudah login ke keychain bersama

Untuk memigrasikan pengguna yang sudah login ke status bersama:

  1. Buat referensi ke pengguna saat ini untuk penggunaan mendatang.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (Opsional) Periksa status autentikasi dari grup akses yang ingin Anda bagikan.

    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. Gunakan grup akses yang sebelumnya Anda tetapkan dalam setelan project.

    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. Perbarui pengguna saat ini.

    Swift

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

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Pengguna kini dapat diakses oleh aplikasi lain yang memiliki akses ke grup akses yang sama.