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

Unity中使用FirebaseFirestore触发InvalidOperationException:实例使用后无法修改设置

Unity中使用FirebaseFirestore触发InvalidOperationException:实例使用后无法修改设置

我之前也碰到过这个问题,其实这是Firebase Firestore的一个核心限制:一旦Firestore实例的非静态方法被调用,或者实例已经完成初始化/被处置,就再也不能修改它的设置了。

你当前的代码里直接调用FirebaseFirestore.DefaultInstance,这个静态属性在首次访问时,Firebase内部可能已经悄悄完成了实例的初始化(甚至可能项目里其他脚本在更早的生命周期比如Awake里就访问过它),等你再去修改firestore.Settings.PersistenceEnabled时,实例已经处于不可修改设置的状态,自然就抛出了这个异常。

解决方法:提前配置设置再创建实例

不要直接使用DefaultInstance,而是先创建并配置好FirebaseFirestoreSettings,再通过FirebaseFirestore.GetInstance()方法传入设置来获取实例,这样就能确保设置在实例初始化时就生效,不会触发异常。

修改后的代码如下:

private async void Start()
{
    var dependencyResult = await FirebaseApp.CheckAndFixDependenciesAsync();
    if(dependencyResult == DependencyStatus.Available)
    {
        _app = FirebaseApp.DefaultInstance;
        
        // 先创建并配置Firestore设置
        var firestoreSettings = new FirebaseFirestoreSettings();
        firestoreSettings.PersistenceEnabled = false;
        
        // 使用配置好的设置获取Firestore实例
        FirebaseFirestore firestore = FirebaseFirestore.GetInstance(_app, firestoreSettings);
        
        OnFirebaseInitialized.Invoke();
    }
    else
    {
        Debug.LogError("Failed to initialize Firebase with reason: " + dependencyResult);
    }
}

额外注意事项

  • 检查项目中所有脚本,确保没有其他地方在Awake或者更早的时机访问FirebaseFirestore.DefaultInstance,也不要在初始化前调用任何Firestore的非静态方法(比如查询、写入文档),这些操作都会提前激活实例,导致设置无法修改。
  • 如果你确实需要使用DefaultInstance,那必须在第一次访问它之前就完成设置修改,但这种方式风险很高,因为很容易被项目中其他代码无意中提前触发实例初始化,所以更推荐上面的自定义实例方式。

备注:内容来源于stack exchange,提问作者Waxx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:53:02