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
相关产品推荐
相关产品推荐

