iOS で Firebase 匿名認証を行う

Firebase で認証する一時的な匿名アカウントを、Firebase Authentication で作成して使用できます。一時的な匿名アカウントを使用すると、アプリに登録していないユーザーが、セキュリティ ルールで保護されているデータを使用できるようになります。匿名ユーザーのアプリへの登録では、ログイン認証情報を匿名アカウントにリンクして、以後のセッションでも引き続き、保護されているデータを使用可能にできます。

準備

  1. Firebase を iOS プロジェクトに追加します
  2. Podfile に次のポッドをインクルードします。
    pod 'Firebase/Auth'
    
  3. アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
  4. 匿名認証を有効にします。
    1. Firebase コンソールで [認証] セクションを開きます。
    2. [ログイン方法] ページで [匿名] を有効にします。

Firebase 匿名認証を行う

ログアウトしたユーザーの、Firebase での認証が必要なアプリ機能では、次の手順に沿って匿名でのユーザーのログインを行います。

  1. Firebase モジュールを UIApplicationDelegate サブクラスにインポートします。

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  2. FIRApp 共有インスタンスを設定します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドを使用します。

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. signInAnonymouslyWithCompletion: メソッドを呼び出します。

    Swift

    Auth.auth().signInAnonymously() { (user, error) in
      // ...
    }
    

    Objective-C

    [[FIRAuth auth]
     signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
       // ...
     }];
    
  4. signInAnonymouslyWithCompletion: メソッドがエラーにならずに完了した場合、匿名ユーザーのアカウント データを FIRUser オブジェクトから取得できます。

    Swift

    let isAnonymous = user!.isAnonymous  // true
    let uid = user!.uid
    

    Objective-C

    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;
    

匿名アカウントを永久アカウントに変換する

匿名ユーザーのアプリへの登録では、新しいアカウントによる作業の続行が場合により必要です。たとえば、アプリへの登録前にユーザーがショッピング カートに追加したアイテムを、新しいアカウントのショッピング カートに追加できるようにします。これを行う手順は次のとおりです。

  1. ユーザーがアプリに登録したら、ユーザーの認証プロバイダのログインフローを行います(ただし、いずれかの FIRAuth.signInWith メソッドを呼び出す手前まで)。たとえば、ユーザーの Google ID トークン、Facebook アクセス トークン、メールアドレスとパスワードを取得します。
  2. 新しい認証プロバイダの FIRAuthCredential を取得します。

    Google ログイン
    Swift
    guard let authentication = user.authentication else { return }
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                      accessToken: authentication.accessToken)
    
    Objective-C
    GIDAuthentication *authentication = user.authentication;
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                     accessToken:authentication.accessToken];
    
    Facebook ログイン
    Swift
    let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
    
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    
    メールとパスワードによるログイン
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
    
  3. ログイン ユーザーの linkWithCredential:completion: メソッドに FIRAuthCredential オブジェクトを渡します。

    Swift
        user.link(with: credential) { (user, error) in
      // ...
    }
    }
    
    Objective-C
        [[FIRAuth auth]
     .currentUser linkWithCredential:credential
     completion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
       // ...
     }];
    

linkWithCredential:completion: の呼び出しが成功したら、ユーザーの新しいアカウントが匿名アカウントの Firebase データにアクセスできるようになります。

次のステップ

これで、ユーザーが Firebase で認証できるようになったため、Firebase ルールを使用して、Firebase データベースのデータに対するユーザーのアクセス権を制御できます。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。