Apple 플랫폼의 여러 앱이나 확장 프로그램에서 인증 상태를 공유하려면 Keychain Services를 사용하여 공유 키체인에 인증 상태를 저장하고 이 공유 키체인을 사용하도록 앱을 구성합니다.
이렇게 인증 상태를 공유하면 다음과 같은 로그인/로그아웃 동작이 가능합니다.
- 한 번 로그인하면 동일한 액세스 그룹에 속한 모든 앱에 로그인됩니다.
- 한 번 로그아웃하면 동일한 액세스 그룹에 속한 모든 앱에서 로그아웃됩니다.
앱 간에 인증 상태 공유
앱 간에 인증 상태를 공유하려면 다음 안내를 따르세요.
앱에 대한 액세스 그룹을 설정합니다.
키체인 액세스 그룹 또는 앱 그룹을 사용할 수 있습니다. 자세한 내용은 Sharing Access to Keychain Items Among a Collection of Apps(앱 모음에서 키체인 항목에 대한 액세스 권한 공유)를 참조하세요.
키체인 액세스 그룹을 설정하려면 각 앱마다 다음 안내를 따르세요.
- Xcode에서 Project settings(프로젝트 설정) > Capabilities(기능)로 이동합니다.
- 키체인 공유를 사용 설정합니다.
- 키체인 그룹 식별자를 추가합니다. 상태를 공유하려는 모든 앱에 동일한 식별자를 사용합니다.
각 앱에서 이전 단계에서 만든 키체인 액세스 그룹 또는 앱 그룹으로 액세스 그룹을 설정합니다.
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];
로그인 방법을 사용하여 1개 이상의 앱에서 사용자로 로그인합니다.
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 }];
동일한 액세스 그룹에 액세스할 수 있는 다른 앱에서 이제 사용자에 액세스할 수 있습니다.