![](/img/trans.png)
[英]Firebase RTDB Unity - RunTransaction Always Returns Null
[英]Unity Firebase RTDB doesn't work after building
Unity版本2020.3.22f1, Firebase SDK 9.0.0 do.net4
我已经导入了分析和实时数据库 SDK。分析工作非常好。
关于数据库,构建一个 Android 应用程序包并上传到内部测试或构建一个 APK 并直接上传到我的手机或构建 IOS 并上传到试飞所有 3 个结果都有错误。
这就是我初始化 Firebase 的方式-
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
//init analytics
FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
DatabaseReference = FirebaseDatabase.DefaultInstance.RootReference;
Debug.Log(JsonConvert.SerializeObject(DatabaseReference.Database.App.Options));
});
这就是我使用数据库的方式(增加特定级别的获胜字段)-
DatabaseReference.Child("Levels").Child($"Level{levelNum}").Child("Wins").RunTransaction((mutableData) =>
{
mutableData.Value = Int32.Parse(mutableData.Value.ToString()) + 1;
return TransactionResult.Success(mutableData);
});
参考上面DatabaseRefrence
初始化中的日志,在编辑器中,我可以看到所有配置属性 - databaseUrl、apikey、AppId 等...
在我的手机上调试 APK Options 属性只包含 databaseUrl。 当尝试对数据库执行事务时,会抛出错误 -
W/Unity: Exception in transaction delegate, aborting transaction
System.NullReferenceException: Object reference not set to an instance of an object.
at ....(Firebase.Database.MutableData mutableData)
到目前为止我尝试过的事情-
streamingAssets
文件夹和Assets\Plugins\Android\FirebaseApp.androidlib\res\values\google-services.xml
中成功生成所有详细信息我读过一些帖子说 Proguard 混淆可能会导致 firebase 错误? 找不到与 Unity 相关的任何内容。
如果有人有任何想法,请分享! 泰
Firebase 实时数据库中的事务的工作方式与您预期的略有不同,因为它们会立即根据客户端对节点当前值的猜测调用您的处理程序,通常为null
。
因此,当您在代码中调用mutableData.Value
时,您会返回null
,然后对其调用ToString()
,这会导致出现错误。 要解决此问题,请先检查mutableData.Value
是否为null
,然后再对其调用方法。
int current = mutableData.Value is null ? 0 : Int32.Parse(mutableData.Value.ToString());
mutableData.Value = current + 1;
return TransactionResult.Success(mutableData);
上面可能有语法错误,因为我已经有一段时间没写 C# 了。
交易将 SDK 猜测和您基于该猜测的新值发送到服务器,然后执行比较和设置操作。 如果猜测与数据库中的实际值不匹配,服务器将拒绝使用当前值的写入,然后客户端使用更新的当前猜测再次调用您的事务处理程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.