Unity编辑器离线时Firebase Remote Config抛出Fetch状态0异常如何处理?
解决Firebase Remote Config离线时的异常日志问题
问题分析
你遇到的fetching failure: http code 0日志是Firebase Remote Config SDK内部生成的错误日志,并非可通过C#try-catch捕获的异常。即使你已经通过task.IsFaulted检测到请求失败,SDK仍会自行输出该错误日志。不过默认配置值已经正常加载,核心功能不受影响,只是这个日志会干扰调试流程。
解决方案
1. 调整Firebase日志级别屏蔽冗余错误
Firebase支持全局日志级别设置,你可以调高日志级别,过滤掉这类网络请求失败的冗余日志:
在Firebase应用初始化前添加以下代码:
Firebase.LogUtil.SetLogLevel(Firebase.LogLevel.Warning);
如果只想保留严重错误日志,可以设置为:
Firebase.LogUtil.SetLogLevel(Firebase.LogLevel.Error);
这样就能避免SDK输出离线时的http 0错误日志。
2. 优化离线场景的处理逻辑
虽然默认值已经正常加载,但可以明确处理离线失败的情况,让流程更清晰:
修改FetchAndActivateAsync的回调逻辑:
remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => { var info = remoteConfig.Info; if (task.IsCanceled) { Debug.Log("Fetch canceled."); } else if (task.IsFaulted) { Debug.Log("离线模式,使用本地默认配置"); } else if (task.IsCompletedSuccessfully) { Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime})."); } // 简化失败状态处理,避免重复日志 if (info.LastFetchStatus == LastFetchStatus.Failure) { if (info.LastFetchFailureReason == FetchFailureReason.Throttled) { Debug.Log($"Fetch throttled until {info.ThrottledEndTime}"); } // 忽略未知错误日志,避免离线场景的干扰输出 } // 无论请求成功与否,都触发回调传递配置值 IDictionary<string, ConfigValue> values = remoteConfig.AllValues; Debug.Log("配置加载完成"); OnDataFetched?.Invoke(values); });
3. 提前检查网络状态(可选)
在发起Fetch请求前先检查网络状态,避免不必要的请求:
using UnityEngine.Networking; // ... if (Application.internetReachability == NetworkReachability.NotReachable) { Debug.Log("无网络连接,直接使用本地默认配置"); IDictionary<string, ConfigValue> values = remoteConfig.AllValues; OnDataFetched?.Invoke(values); return; } // 正常发起Fetch请求 remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => { // 原有逻辑 });
关键说明
- 离线时
remoteConfig.AllValues会优先使用你通过SetDefaultsAsync设置的本地默认值,游戏核心功能不受影响。 - SDK内部日志无法通过C#异常捕获,只能通过调整日志级别屏蔽。
- 以上修改可让离线场景的处理更清晰,同时减少干扰日志输出。
内容的提问来源于stack exchange,提问作者irm_myth
相关产品推荐
相关产品推荐

