Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

共有Appleキーチェーンを使用したアプリ間認証の有効化

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Appleプラットフォーム上の複数のアプリまたは拡張機能間で認証状態を共有するには、キーチェーンサービスを使用して認証状態を共有キーチェーンに保存し、共有キーチェーンを使用するようにアプリを構成します。

これにより、ユーザーは次のことが可能になります。

  • 一度サインインすると、同じアクセスグループに属するすべてのアプリでサインインします。
  • 一度サインアウトすると、同じアクセスグループに属するすべてのアプリでサインアウトします。

アプリ間で認証状態を共有する

アプリ間で認証状態を共有するには:

  1. アプリのアクセスグループを設定します。

    キーチェーンアクセスグループまたはアプリグループのいずれかを使用できます。詳細については、アプリのコレクション間でのキーチェーンアイテムへのアクセスの共有を参照してください。

    キーチェーンアクセスグループを設定するには、アプリごとに次の手順を実行します。

    1. Xcodeで、 [プロジェクト設定]> [機能]に移動します。
    2. キーチェーン共有を有効にします。
    3. キーチェーングループ識別子を追加します。状態を共有するすべてのアプリに同じ識別子を使用します。
  2. 各アプリで、アクセスグループを前の手順で作成したキーチェーンアクセスグループまたはアプリグループに設定します。

    迅速

    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. 少なくとも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;
    

共有されていないキーチェーンに切り替えます

  1. アクセスグループを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];
    
  2. 任意のサインイン方法でユーザーにサインインします。ユーザーの状態は、他のアプリでは利用できません。

    迅速

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

    Objective-C

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

サインインしたユーザーを共有キーチェーンに移行します

すでにサインインしているユーザーを共有状態に移行するには:

  1. 将来使用するために、現在のユーザーを参照してください。

    迅速

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (オプション)共有するアクセスグループの認証状態を確認します。

    迅速

    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. プロジェクト設定で以前に設定したアクセスグループを使用します。

    迅速

    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. 現在のユーザーを更新します。

    迅速

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

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. これで、同じアクセスグループにアクセスできる他のアプリからユーザーにアクセスできるようになります。