Android构建中Firebase Auth登录及数据获取耗时异常求助
问题现象
Android构建版本中,Firebase Auth登录流程耗时异常:登录成功的日志需等待4-5分钟才输出,后续Firestore获取用户数据的日志无输出,全程无报错或异常。编辑器及iOS构建版本无此问题。
排查与解决建议
检查Android网络权限与配置
确保AndroidManifest.xml中已添加必要网络权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />针对Android 9及以上版本,若Firebase相关域名未配置HTTPS,需添加
network_security_config文件允许明文访问,或确认Firebase域名支持HTTPS。优化任务调度逻辑
当前代码中ContinueWithOnMainThread在Android平台可能引发主线程阻塞,建议将非UI操作放在后台线程执行,仅在需要更新UI/输出日志时切回主线程:public static void SignIn(string email, string password, Action callback) { _auth.SignInWithEmailAndPasswordAsync(email, password) .ContinueWith(task => { // 后台线程处理登录结果 if (task.IsCanceled) { UnityMainThreadDispatcher.Instance().Enqueue(() => Debug.LogError("Sign in was canceled")); return; } if (task.IsFaulted) { UnityMainThreadDispatcher.Instance().Enqueue(() => Debug.LogError($"Error during sign in: {task.Exception}")); return; } var signedInUser = task.Result; // 后台线程获取用户数据 GetUserData(signedInUser.UserId, () => { // 完成后切回主线程执行回调与日志 UnityMainThreadDispatcher.Instance().Enqueue(() => { Debug.Log($"User signed in successfully. Name: {signedInUser.DisplayName}, ID: {signedInUser.UserId}"); callback?.Invoke(); }); }); }, TaskContinuationOptions.RunContinuationsAsynchronously); Debug.Log("Log in request sent, waiting for finish"); }同时确认
ContinueWithOnMainThread的实现无主线程阻塞问题,或改用官方推荐的UnityMainThreadDispatcher处理主线程回调。升级Firebase SDK版本
将Firebase Auth与Firestore的Unity SDK升级至最新稳定版,旧版本可能存在Android平台的网络请求阻塞bug。启用Firebase调试日志
开启Firebase详细日志,通过Android Studio的Logcat定位瓶颈:Firebase.FirebaseApp.LogLevel = Firebase.LogLevel.Debug;过滤Firebase相关日志,确认是Auth登录请求缓慢,还是Firestore获取数据阶段出现阻塞。
排查网络环境
测试不同网络环境(Wi-Fi/移动数据),排除运营商对Firebase域名的限制;尝试使用VPN连接,验证是否为网络链路问题。
内容的提问来源于stack exchange,提问作者Don Andre

