您可以使用 Firebase 身份验证允许用户使用一种或多种登录方法登录您的游戏,包括电子邮件地址和密码登录,以及联合身份提供商(例如 Google 登录和 Facebook 登录)。本教程通过向您展示如何向您的游戏添加电子邮件地址和密码登录,帮助您开始使用 Firebase 身份验证。
在你开始之前
在使用Firebase Authentication之前,您需要:
注册您的 Unity 项目并将其配置为使用 Firebase。
如果您的 Unity 项目已经使用 Firebase,那么它已经针对 Firebase 进行了注册和配置。
如果您没有 Unity 项目,可以下载示例应用程序。
将Firebase Unity SDK (特别是
FirebaseAuth.unitypackage
)添加到您的 Unity 项目。
请注意,将 Firebase 添加到您的 Unity 项目涉及Firebase 控制台和您打开的 Unity 项目中的任务(例如,您从控制台下载 Firebase 配置文件,然后将它们移动到您的 Unity 项目中)。
注册新用户
创建一个表单,允许新用户使用他们的电子邮件地址和密码注册您的游戏。当用户完成表单时,验证用户提供的电子邮件地址和密码,然后将它们传递给CreateUserWithEmailAndPasswordAsync
方法:
auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
return;
}
// Firebase user has been created.
Firebase.Auth.FirebaseUser newUser = task.Result;
Debug.LogFormat("Firebase user created successfully: {0} ({1})",
newUser.DisplayName, newUser.UserId);
});
登录现有用户
创建一个允许现有用户使用他们的电子邮件地址和密码登录的表单。当用户完成表单时,调用SignInWithEmailAndPasswordAsync
方法:
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
return;
}
Firebase.Auth.FirebaseUser newUser = task.Result;
Debug.LogFormat("User signed in successfully: {0} ({1})",
newUser.DisplayName, newUser.UserId);
});
设置身份验证状态更改事件处理程序并获取用户数据
要响应登录和注销事件,请将事件处理程序附加到全局身份验证对象。只要用户的登录状态发生变化,就会调用此处理程序。由于处理程序仅在身份验证对象完全初始化后以及所有网络调用完成后运行,因此它是获取有关登录用户信息的最佳位置。
使用FirebaseAuth
对象的StateChanged
字段注册事件处理程序。当用户成功登录时,您可以在事件处理程序中获取有关用户的信息。
最后,当此对象对其调用Destroy
时,它将自动调用OnDestroy
。在OnDestroy
中清除 Auth 对象的引用。
void InitializeFirebase() {
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.StateChanged += AuthStateChanged;
AuthStateChanged(this, null);
}
void AuthStateChanged(object sender, System.EventArgs eventArgs) {
if (auth.CurrentUser != user) {
bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
if (!signedIn && user != null) {
DebugLog("Signed out " + user.UserId);
}
user = auth.CurrentUser;
if (signedIn) {
DebugLog("Signed in " + user.UserId);
displayName = user.DisplayName ?? "";
emailAddress = user.Email ?? "";
photoUrl = user.PhotoUrl ?? "";
}
}
}
void OnDestroy() {
auth.StateChanged -= AuthStateChanged;
auth = null;
}
下一步
了解如何添加对其他身份提供者和匿名访客帐户的支持: