iOS で Firebase 匿名認証を行う

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

準備

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

Firebase 匿名認証を行う

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

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

    Objective-C

    @import Firebase;
    

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    

    Swift

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

    Objective-C

    [[FIRAuth auth]
     signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
       // ...
     }];
    

    Swift

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

    Objective-C

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

    Swift

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

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

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

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

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

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

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

次のステップ

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

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