Appleプラットフォーム上の複数のアプリまたは拡張機能間で認証状態を共有するには、キーチェーンサービスを使用して認証状態を共有キーチェーンに保存し、共有キーチェーンを使用するようにアプリを構成します。
これにより、ユーザーは次のことが可能になります。
- 一度サインインすると、同じアクセスグループに属するすべてのアプリでサインインします。
- 一度サインアウトすると、同じアクセスグループに属するすべてのアプリでサインアウトします。
アプリ間で認証状態を共有する
アプリ間で認証状態を共有するには:
アプリのアクセスグループを設定します。
キーチェーンアクセスグループまたはアプリグループのいずれかを使用できます。詳細については、アプリのコレクション間でのキーチェーンアイテムへのアクセスの共有を参照してください。
キーチェーンアクセスグループを設定するには、アプリごとに次の手順を実行します。
- Xcodeで、 [プロジェクト設定]> [機能]に移動します。
- キーチェーン共有を有効にします。
- キーチェーングループ識別子を追加します。状態を共有するすべてのアプリに同じ識別子を使用します。
各アプリで、アクセスグループを前の手順で作成したキーチェーンアクセスグループまたはアプリグループに設定します。
迅速
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つのアプリで、任意のサインイン方法でユーザーにサインインします。
迅速
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
同じ現在のユーザーが、アクセスグループ内のすべてのアプリで使用できます。
迅速
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
共有されていないキーチェーンに切り替えます
アクセスグループを
nil
に設定して、認証状態の共有を停止します。迅速
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];
任意のサインイン方法でユーザーにサインインします。ユーザーの状態は、他のアプリでは利用できません。
迅速
Auth.auth().signInAnonymously { result, error in // User signed in }
Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
サインインしたユーザーを共有キーチェーンに移行します
すでにサインインしているユーザーを共有状態に移行するには:
将来使用するために、現在のユーザーを参照してください。
迅速
var user = Auth.auth().currentUser
Objective-C
FIRUser *user = FIRAuth.auth.currentUser;
(オプション)共有するアクセスグループの認証状態を確認します。
迅速
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 }
プロジェクト設定で以前に設定したアクセスグループを使用します。
迅速
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];
現在のユーザーを更新します。
迅速
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
Objective-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
これで、同じアクセスグループにアクセスできる他のアプリからユーザーにアクセスできるようになります。