iOS で Firebase 匿名認証を行う

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

準備

  1. Firebase を iOS プロジェクトに追加します
  2. Podfile に次のポッドをインクルードします。
     verbatim 69c2a21022e657d9f2ea355fa969894c pod 'Firebase/Auth' endverbatim 69c2a21022e657d9f2ea355fa969894c 
    
  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

     verbatim f4837415eb98478ae53b9bc9796b0226 // Use Firebase library to configure APIs
    [FIRApp configure]; endverbatim f4837415eb98478ae53b9bc9796b0226 
    

    Swift

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

    Objective-C

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

    Swift

     verbatim d833ba63124305b2988e3e12bf492e13 FIRAuth.auth()?.signInAnonymously() { (user, error) in
      // ...
    } endverbatim d833ba63124305b2988e3e12bf492e13 
    
  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
     verbatim edb638a3d405a829abb55b4c3676e56b GIDAuthentication *authentication = user.authentication;
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                     accessToken:authentication.accessToken]; endverbatim edb638a3d405a829abb55b4c3676e56b 
    
    Swift
     verbatim 3e1f3a7711cf22495b3ff3735b0602f4 guard let authentication = user.authentication else { return }
    let credential = FIRGoogleAuthProvider.credential(withIDToken: authentication.idToken,
        accessToken: authentication.accessToken) endverbatim 3e1f3a7711cf22495b3ff3735b0602f4 
    
    Facebook ログイン
    Objective-C
     verbatim 24cd2efe7a2f8a232e5cfc25031c2eab FIRAuthCredential *credential = [FIRFacebookAuthProvider
                                     credentialWithAccessToken:[FBSDKAccessToken currentAccessToken]
                                     .tokenString]; endverbatim 24cd2efe7a2f8a232e5cfc25031c2eab 
    
    Swift
     verbatim fce26a642135b27fdc053f5b0bb61672 let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString) endverbatim fce26a642135b27fdc053f5b0bb61672 
    
    メールとパスワードによるログイン
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailPasswordAuthProvider credentialWithEmail:email
                                                 password:password];
    
    Swift
    let credential = FIREmailPasswordAuthProvider.credential(withEmail: email, password: password)
    
  3. ログイン ユーザーの linkWithCredential:completion: メソッドに FIRAuthCredential オブジェクトを渡します。

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

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

次のステップ

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

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