C++ で Firebase Authentication を使ってみる

Firebase Authentication を使用すると、ユーザーがアプリにログインする際に、メールアドレスとパスワードのログイン、Google ログインや Facebook ログインなどのフェデレーション ID プロバイダなど、複数のログイン方法を使用できるようになります。このチュートリアルでは、Firebase Authentication を使って、メールアドレスとパスワードのログインをアプリに追加する方法から始めます。

アプリを Firebase に接続する

Firebase SDK をインストールします。

新しいユーザーを登録する

新規ユーザーがメールアドレスとパスワードを使用してアプリに登録できるフォームを作成します。ユーザーがフォームに入力したら、ユーザーから提供されたメールアドレスとパスワードを検証し、それらを CreateUserWithEmailAndPassword メソッドに渡します。

firebase::Future<firebase::auth::User*> result =
    auth->CreateUserWithEmailAndPassword(email, password);

アカウント作成操作のステータスを確認するには、CreateUserWithEmailAndPasswordLastResult Future オブジェクトにコールバックを登録します。または、なんらかの定期的な更新ループを持つゲームやアプリを作成する場合は、更新ループのステータスをポーリングします。

Future を使用した例を次に示します。

firebase::Future<firebase::auth::User*> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::User*>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

または、ポーリングを使用する場合は、ゲームの更新ループで次のようなコードを実行します。

firebase::Future<firebase::auth::User*> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

既存のユーザーをログインさせる

既存のユーザーがメールアドレスとパスワードを使用してログインできるフォームを作成します。ユーザーがフォームに入力したら、SignInWithEmailAndPassword メソッドを呼び出します。

firebase::Future<firebase::auth::User*> result =
    auth->SignInWithEmailAndPassword(email, password);

登録の結果を取得したのと同じ方法でログイン操作の結果を取得します。

認証状態リスナーを設定し、アカウント データを取得する

ログイン イベントとログアウト イベントに応答するには、グローバル認証オブジェクトにリスナーをアタッチします。このリスナーは、ユーザーのログイン状態が変わるたびに呼び出されます。リスナーは、認証オブジェクトが完全に初期化され、ネットワーク呼び出しが完了した後にのみ実行されるため、ログインしたユーザーに関する情報を取得するのに最適です。

firebase::auth::AuthStateListener 抽象クラスを実装してリスナーを作成します。たとえば、ユーザーがログインに成功したときにユーザーに関する情報を取得するリスナーを作成するには、次のようにします。

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user->uid().c_str());
      const std::string displayName = user->DisplayName();
      const std::string emailAddress = user->Email();
      const std::string photoUrl = user->PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

firebase::auth::Auth オブジェクトの AddAuthStateListener メソッドでリスナーをアタッチします。

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

次のステップ

他の ID プロバイダと匿名ゲスト アカウントのサポートを追加する方法を学びます。

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

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