Unity(Android)中如何通过Firebase Google Authentication判断用户首次登录?
如何在Unity(C#)中判断用户是否首次登录Firebase应用
在Unity中使用Firebase Authentication判断用户首次登录,核心是利用Firebase用户对象的**元数据(Metadata)**对比账号创建时间与最后登录时间:
核心逻辑
首次登录时,用户账号刚创建完成,因此账号的CreationTimestamp(创建时间戳)与LastSignInTimestamp(最后登录时间戳)会基本一致(误差控制在几秒内,兼容网络延迟)。非首次登录时,两个时间戳会存在明显差距。
具体实现代码
以下是适配Unity Firebase Auth工作流程的异步判断逻辑:
using Firebase.Auth; using UnityEngine; public class AuthManager : MonoBehaviour { private FirebaseAuth auth; void Start() { // 初始化Firebase依赖 FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == DependencyStatus.Available) { auth = FirebaseAuth.DefaultInstance; // 监听用户登录状态变更 auth.StateChanged += AuthStateChanged; // 启动时检查当前用户状态 AuthStateChanged(this, null); } else { Debug.LogError($"Firebase依赖初始化失败: {dependencyStatus}"); } }); } void AuthStateChanged(object sender, System.EventArgs eventArgs) { var user = auth.CurrentUser; if (user != null) { // 获取用户元数据 var metadata = user.Metadata; long creationTime = metadata.CreationTimestamp; long lastSignInTime = metadata.LastSignInTimestamp; // 5秒阈值兼容网络延迟,可根据需求调整 bool isFirstLogin = (lastSignInTime - creationTime) < 5000; if (isFirstLogin) { Debug.Log("用户首次登录,执行首次登录逻辑"); // 这里添加首次登录处理代码,比如显示引导页、初始化用户数据等 } else { Debug.Log("用户非首次登录,执行常规登录逻辑"); } } else { Debug.Log("当前无登录用户"); } } void OnDestroy() { if (auth != null) { auth.StateChanged -= AuthStateChanged; } } }
补充说明
- 时间戳单位为毫秒,设置5秒阈值是为了避免网络延迟导致的误判
- 第三方登录(如Google、Facebook)首次授权时,Firebase会自动创建账号,该逻辑同样适用
- 若需要更可靠的首次登录标记,可在首次登录成功后将状态写入
PlayerPrefs或Firebase数据库:// 首次登录时写入标记 PlayerPrefs.SetInt("HasLoggedInBefore", 1); PlayerPrefs.Save(); // 后续登录时检查标记 bool hasLoggedInBefore = PlayerPrefs.GetInt("HasLoggedInBefore", 0) == 1;
内容的提问来源于stack exchange,提问作者hollowha
相关产品推荐
相关产品推荐

