You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:24:31