如何从Unity Desktop构建中获得Firebase实时数据库参考



我正在努力使Firebase实时数据库在Unity Desktop上运行,以便进行调试。当我在Unity Editor中运行下面的代码时,一切都正常,我能够获得数据库引用并使用GetValueAsync((从中下载数据。但当我在Windows桌面构建中尝试相同的代码时时,我经常会得到数据库引用的空引用错误。有人能帮忙吗?

myDatabase = FirebaseDatabase.DefaultInstance;
Debug.Log("Database: " + myDatabase);

更新:

0。Assets/Services/StreamingAssets/google-services-desktop.json一直在那里,很抱歉没有在帖子中提到它。

1.我试图将它的副本放在构建的不同位置,但仍然无法使其工作。

2.我还在mac版本中测试了这个问题,但它也找不到数据库引用。

3.我手动复制粘贴了相关的部分,最终使其工作

4.我也尝试手动加载配置,但一直收到这个错误,我想我可能做错了。

Failed to parse Firebase config: (1, 1): error: declaration expected. Check the config string passed to App::CreateFromJsonConfig()

如果没有日志记录,很难判断发生了什么,所以如果没有帮助,一定要尝试在调试器/终端中捕获它。我去验证了这是有效的,但在macOS桌面上。因此,Windows的支持可能会有所不同,我将尝试介绍这一点。

我怀疑你失踪了或者找不到google-services-desktop.json(或google-services.xml(。我建议您检查Assets/Services/StreamingAssets/google-services-desktop.json是否已生成。如果没有,请尝试切换到Android或iOS,在编辑器中运行(如果没有生成,则进行构建(,然后切换回桌面并运行。

现在,如果这不起作用(或者您已经有了google-services-desktop.json(,下一步将是查看它是否没有正确加载。当您尝试获取DefaultInstance时,Firebase SDK会自动查找此文件,但这样做的逻辑在Firebase SDK的C++基础中。具体来说,您可以在此处看到在桌面上加载此代码的代码。当我检查我的MacOS应用程序目录时,我会在Contents/Resources/Data/StreamingAssets/下看到google-services-desktop.json(MacOS.app程序实际上只是引擎盖下的文件夹(——如果你在Windows上的类似目录中看到该文件,你可以尝试将其复制/粘贴到与游戏的.exe文件相同的目录中。猜测是,发现这一点的行为可能在OS之间有所不同。如果发生这种情况,请在这里提交一个bug,并随时链接这篇文章并在GitHub(patm1987(上标记我。

最后要尝试的一件事是,如果在Firebase中执行任何操作之前调用FirebaseApp.Create而没有应用程序名称;默认";应用程序已配置。您可以手动配置AppOptions,也可以使用AppOptions.LoadFromJsonConfig从json加载。因为Firebase singleton是延迟初始化的,所以如果这样做,您必须非常小心。以下是您的代码可能的样子:

var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync();
if (dependencyStatus != DependencyStatus.Available) {
// error handling here. Quit the game or run without Firebase
}
// copy paste relevant bits out manually
var appOptions = new AppOptions {
.ApiKey = "api-key-from-config",
.AppId = "app-id-from-config",
.DatabaseUrl = "database-url-from-config",
.MessageSenderId = "message-sender-id", // probably can be left out
.ProjectId = "project-id-from-config",
.StorageBucket = "storage-bucket-from-config" // probably can be left out if you're not using storage
}
// OR load the config manually
// var appOptions = AppOptions.LadFromJsonConfig($"{Application.dataPath}/StreamingAssets/google-services-desktop.json");
var app = FirebaseApp.Create(appOptions);
// now FirebaseApp.DefaultInstance will also be your configured application
myDatabase = FirebaseDatabase.GetInstance(app);
// can also do myDatabase = FirebaseDatabase.DefaultInstance, but this is more explicit

如果后一种解决方案有效,而上述任何解决方案都无效,我也希望您在这里发布一份错误报告,以确保它能引起团队的注意。

最新更新