Unity2022.3.11使用Firebase云函数遇"USE_AUTH_EMULATOR not set."冻结如何解决?
错误原因及解决办法
错误原因
"USE_AUTH_EMULATOR not set." 错误是因为你在本地开发时启用了Firebase模拟器(如Functions模拟器),但未配置Firebase Auth对应的模拟器连接参数,导致云函数调用时无法完成身份验证流程,进而引发程序冻结。
解决办法
分两种场景处理:
场景1:本地开发需要使用Firebase模拟器
- 确保已启动Firebase Auth模拟器(默认端口为9099,Functions模拟器默认端口为5001)
- 在初始化Auth和Functions实例后,添加模拟器配置代码,注意要在调用身份验证或云函数前完成配置:
await FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { if(task.Result == DependencyStatus.Available) { auth = FirebaseAuth.DefaultInstance; func = FirebaseFunctions.DefaultInstance; // 配置Auth模拟器 auth.UseEmulator("localhost", 9099); // 配置Functions模拟器(如果使用) func.UseEmulator("localhost", 5001); } else { Debug.Log(task.Result.ToString()); return; } });
场景2:生产环境或不需要使用模拟器
- 检查代码中是否误加了模拟器相关配置,移除所有
UseEmulator调用 - 确保
google-services.json(Android)或GoogleService-Info.plist(iOS)是生产环境的配置文件,未被模拟器配置修改
额外代码问题提示
你的代码存在异步流程漏洞:CheckAndFixDependenciesAsync().ContinueWith的回调是异步执行的,外层的try块可能在auth实例初始化完成前就运行,导致auth为空引发潜在错误。建议改用await替代ContinueWith,保证流程顺序:
var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync(); if(dependencyStatus == DependencyStatus.Available) { auth = FirebaseAuth.DefaultInstance; func = FirebaseFunctions.DefaultInstance; // 模拟器配置放在这里 } else { Debug.Log(dependencyStatus.ToString()); return; } try { if(auth.CurrentUser == null || string.IsNullOrEmpty(auth.CurrentUser.UserId)) { await auth.SignInAnonymouslyAsync(); } else { Debug.Log($"Already auth {auth.CurrentUser.UserId}"); } } catch(Exception e) { Debug.LogError($"Auth error: {e.Message}"); } var task = func.GetHttpsCallable("task").CallAsync(idToken);
内容的提问来源于stack exchange,提问作者Choco Naak
相关产品推荐
相关产品推荐

