С помощью Firebase Authentication вы можете разрешить пользователям входить в ваше приложение, используя один или несколько способов авторизации, включая вход по электронной почте и паролю, а также федеративные поставщики идентификации, такие как Google Sign-in и Facebook Login. В этом руководстве вы научитесь работать с Firebase Authentication а также узнаете, как добавить в ваше приложение вход по электронной почте и паролю.
Подключите свой проект на C++ к Firebase.
Прежде чем использовать Firebase Authentication , вам необходимо:
Зарегистрируйте свой проект на C++ и настройте его для использования Firebase.
Если ваш проект на C++ уже использует Firebase, значит, он уже зарегистрирован и настроен для работы с Firebase.
Добавьте Firebase C++ SDK в свой проект на C++.
Обратите внимание, что добавление Firebase в ваш проект C++ включает в себя задачи как в консоли Firebase , так и в открытом проекте C++ (например, вы загружаете файлы конфигурации Firebase из консоли, а затем перемещаете их в свой проект C++).
Регистрация новых пользователей
Создайте форму, которая позволит новым пользователям зарегистрироваться в вашем приложении, используя свой адрес электронной почты и пароль. После заполнения формы проверьте предоставленные пользователем адрес электронной почты и пароль, а затем передайте их методу CreateUserWithEmailAndPassword :
firebase::Future<firebase::auth::AuthResult> result =
auth->CreateUserWithEmailAndPassword(email, password);
Проверить статус операции создания учетной записи можно либо зарегистрировав функцию обратного вызова в объекте Future CreateUserWithEmailAndPasswordLastResult , либо, если вы разрабатываете игру или приложение с периодическим циклом обновления, путем опроса статуса в цикле обновления.
Например, с использованием объекта 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);
Следующие шаги
Узнайте, как добавить поддержку других поставщиков идентификации и анонимных гостевых учетных записей: