Начало работы с Firebase Authentication в C++

С помощью Firebase Authentication можно разрешить пользователям входить в ваше приложение одним или несколькими способами, в том числе с помощью адреса электронной почты и пароля, а также через поставщиков интегрированных решений для входа, таких как "Войти с аккаунтом Google" и Facebook Login. В этом руководстве Firebase Authenticationрассказывается, как добавить в приложение возможность входа с помощью адреса электронной почты и пароля.

Как подключить проект C++ к Firebase

Чтобы использовать Firebase Authentication, вам необходимо:

  • Зарегистрируйте проект C++ и настройте его для использования Firebase.

    Если в проекте уже используется Firebase, можете пропустить этот шаг.

  • Добавьте Firebase C++ SDK в свой проект C++.

Обратите внимание, что для добавления Firebase в проект C++ нужно выполнить действия как в консоли Firebase, так и в вашем открытом проекте C++. Например, вам потребуется скачать файлы конфигурации Firebase из консоли, а затем переместить их в проект C++.

Как зарегистрировать новых пользователей

Создайте форму, с помощью которой новые пользователи смогут зарегистрироваться в приложении, указав адрес электронной почты и пароль. Когда пользователь заполняет форму, проверьте указанные им адрес электронной почты и пароль, а затем передайте их методу CreateUserWithEmailAndPassword:

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

Вы можете проверить статус операции создания аккаунта, зарегистрировав обратный вызов в объекте CreateUserWithEmailAndPasswordLastResult Future или, если вы пишете игру или приложение с циклом периодического обновления, опросив статус в цикле обновления.

Например, с помощью объекта Future:

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

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& 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::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

Как войти в аккаунт существующему пользователю

Создайте форму, в которой существующие пользователи смогут входить в аккаунт, используя адрес электронной почты и пароль. Когда пользователь заполняет форму, вызовите метод SignInWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> 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.is_valid()) {
      // 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");
    }
    // ...
  }
};

Прикрепите прослушиватель с помощью метода AddAuthStateListener объекта firebase::auth::Auth:

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

Дальнейшие действия

Узнайте, как добавить поддержку других поставщиков идентификационной информации и анонимных гостевых аккаунтов: