如要在 Apple 平台上多個應用程式或擴充功能之間共用驗證狀態,請儲存 使用鑰匙圈服務而共用鑰匙圈的驗證狀態 ,並設定應用程式使用共用鑰匙圈。
使用者可以透過這項權限:
- 只要登入一次,即可在所有屬於相同存取權群組的應用程式中登入。
- 登出一次,即可登出所有屬於相同存取權的應用程式 群組。
在應用程式之間共用驗證狀態
如要在應用程式之間共用驗證狀態,請按照以下步驟操作:
為應用程式設定存取權群組。
您可以使用鑰匙圈存取權群組或應用程式群組。詳情請參閱「在一系列應用程式之間共用鑰匙圈項目的存取權」。
如要設定鑰匙圈存取群組,請為每個應用程式執行下列操作:
- 在 Xcode 中,依序前往「Project settings」>「Capabilities」。
- 啟用 Keychain Sharing。
- 新增鑰匙圈群組 ID。為所有要分享狀態的應用程式使用相同的 ID。
在每個應用程式中,將存取權群組設為鑰匙圈存取權群組或應用程式群組 您在上一個步驟中建立的名稱
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];
在至少一個應用程式中,以任何方式登入使用者。
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
存取群組中的所有應用程式都會使用相同的目前使用者。
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
切換回未共用的鑰匙圈
如要停止共用驗證狀態,請將存取權群組設為「
nil
」。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];
使用任何登入方式登入使用者。其他應用程式無法使用使用者狀態。
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
將已登入的使用者遷移至共用鑰匙圈
如要將已登入的使用者遷移至共用狀態,請按照下列步驟操作:
參照目前的使用者,以供日後使用。
Swift
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
(選用) 檢查您要共用的存取權群組的驗證狀態。
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 }
使用先前在專案設定中設定的存取權群組。
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];
更新目前的使用者。
Swift
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
Objective-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
使用者現在可以存取有權存取相同存取群組的其他應用程式。