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

Unity项目中Firebase SDK获取匹配user_pseudo_id值的Android执行异常问题

问题描述

Firebase的user_pseudo_id会同步到BigQuery中,我需要在Unity项目里通过Firebase SDK获取与之匹配的值,但调用FirebaseAnalytics.GetAnalyticsInstanceIdAsync()时,Windows编辑器中能正常输出FakeAnalyticsInstanceId0,但打包成APK在Android设备上测试时,该方法似乎完全没有执行,尝试在手机屏幕显示结果也失败了。

使用的代码如下:

public Task<string> DisplayAnalyticsInstanceId()
{
    return FirebaseAnalytics.GetAnalyticsInstanceIdAsync().ContinueWithOnMainThread(task =>
    {
        if (task.IsCanceled)
        {
            Debug.Log("App instance ID fetch was canceled.");
        }
        else if (task.IsFaulted)
        {
            Debug.Log(String.Format("Encounted an error fetching app instance ID {0}",
                                    task.Exception.ToString()));
        }
        else if (task.IsCompleted)
        {
            Debug.Log(String.Format("App instance ID: {0}", task.Result));
        }
        string user_pseudo_id = task.Result;
        return task;
    }).Unwrap();
}
解决建议
  • 确保Firebase完成初始化
    Android平台上必须等待Firebase依赖完全初始化后,再调用Analytics相关方法。可以在启动阶段先执行依赖检查:

    async void Start()
    {
        var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync();
        if (dependencyStatus == DependencyStatus.Available)
        {
            // 初始化完成后再调用实例ID获取方法
            await DisplayAnalyticsInstanceId();
        }
        else
        {
            Debug.LogError($"Firebase依赖初始化失败: {dependencyStatus}");
        }
    }
    
  • 修复代码逻辑问题
    原代码中ContinueWithOnMainThread的返回逻辑会导致Task嵌套异常,且未处理任务失败/取消时直接取task.Result的风险。改用async/await简化逻辑:

    public async Task<string> DisplayAnalyticsInstanceId()
    {
        try
        {
            var instanceId = await FirebaseAnalytics.GetAnalyticsInstanceIdAsync();
            Debug.Log($"App instance ID: {instanceId}");
            return instanceId;
        }
        catch (TaskCanceledException)
        {
            Debug.Log("App instance ID fetch was canceled.");
            return null;
        }
        catch (Exception e)
        {
            Debug.Log($"Encountered an error fetching app instance ID: {e}");
            return null;
        }
    }
    
  • 检查Android配置与权限

    • 确认Assets/Plugins/Android目录下存在正确的google-services.json文件,且文件中的包名与Unity项目的Android包名完全一致。
    • 确保AndroidManifest.xml中添加了互联网权限:<uses-permission android:name="android.permission.INTERNET" />,Firebase需要联网获取实例ID。
    • 测试设备需处于联网状态,离线环境下该异步方法可能无法正常执行。
  • 排查设备日志
    使用adb logcat命令过滤应用相关日志,查看是否有Firebase初始化或Analytics相关的错误信息:

    adb logcat -s FirebaseAnalytics Unity
    

    也可以通过Android Studio的Logcat工具更直观地查看设备日志。

  • 验证SDK版本兼容性
    检查Unity版本与Firebase Unity SDK版本是否兼容,建议更新到最新的Firebase SDK稳定版,避免因版本不匹配导致的异步方法执行异常。

内容的提问来源于stack exchange,提问作者Dayanch Akmyradov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:53:24