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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:31:15