您可以使用 Firebase 身份验证允许用户使用一种或多种登录方法(包括电子邮件地址和密码登录)以及联合身份提供商(例如 Google 登录和 Facebook 登录)登录您的应用。本教程通过向您展示如何将电子邮件地址和密码登录添加到您的应用程序,让您开始使用 Firebase 身份验证。
将您的 C++ 项目连接到 Firebase
在您可以使用Firebase 身份验证之前,您需要:
注册您的 C++ 项目并将其配置为使用 Firebase。
如果您的 C++ 项目已经使用 Firebase,那么它已经为 Firebase 注册和配置。
将Firebase C++ SDK添加到您的 C++ 项目。
请注意,将 Firebase 添加到您的 C++ 项目涉及Firebase 控制台和打开的 C++ 项目中的任务(例如,您从控制台下载 Firebase 配置文件,然后将它们移动到您的 C++ 项目中)。
注册新用户
创建一个表单,允许新用户使用他们的电子邮件地址和密码注册您的应用程序。当用户完成表单时,验证用户提供的电子邮件地址和密码,然后将它们传递给CreateUserWithEmailAndPassword
方法:
firebase::Future<firebase::auth::User*> result =
auth->CreateUserWithEmailAndPassword(email, password);
您可以通过在CreateUserWithEmailAndPasswordLastResult
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 firebase::auth::Auth
对象的AddAuthStateListener
方法附加监听器:
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);
下一步
了解如何添加对其他身份提供者和匿名访客帐户的支持: