Firebase 实时数据库的 Unity 错误

时间:2021-05-06 22:46:55

标签: c# android firebase unity3d firebase-realtime-database

我已经使用 Unity 一年了,并决定制作一个简单的聊天应用程序。我决定使用 Google 的 Firebase 来存储我的用户和聊天数据。我计划在 android 上使用该应用程序(将来在 iOS 上)。我的问题是 Unity 无法生成 Firebase Android 文件。我搜索了错误并把我带到了 this website。我做了推荐的解决方案并创建了实时数据库并重新安装了 json 和 plist 文件。它不起作用。我仍然收到以下错误。

<块引用>

从 /Users/Family/Desktop/கலைமாறன்/Unity/STEMastery/Assets/../Assets/Firebase Data/google-services.json 生成 Firebase Android 资源文件 google-services.xml 失败。 如果您的应用中没有包含有效的 Firebase Android 资源,它将无法初始化。

"python" "/Users/Family/Desktop/கலைமாறன்/Unity/STEMastery/Library/PackageCache/com.google.firebase.app@7.2.0/Firebase/Editor/generate_xml_from_google_services_json.py" -i "/Users/Family/Desktop/கலைமாறன்/Unity/STEMastery/Assets/../Assets/Firebase Data/google-services.json" -o "/Users/Family/Desktop/கலைமாறன்/Unity/STEMastery/Assets/../Assets/Plugins/Android/FirebaseApp.androidlib/res/values/google-services.xml" -p "com.maranstudios.stemastery.maran" ...

我还检查了外部工具。在 android 下,它说 JDK 与 Unity 一起安装,Android SDK 工具与 Unity 一起安装,Android NDK 与 Unity 一起安装,Gradle 与 Unity 一起安装。我还下载了 android studio,以便我可以构建到 android。

我也尝试过重新启动 unity、visual studio 甚至我的电脑,但这没有帮助。

Unity 在我的 iMac 上完美运行该程序,并且可以在 Unity 编辑器中访问我的实时数据库。但是当我在手机上运行它时,会弹出 2 个错误。

  1. DllNotFound 异常:Firebase CppApp ...
  2. 找不到默认引用。

2的解释: 我有这行代码。

DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

然后我检查另一个脚本是否为空。它在我的手机上变为 null,但在我的 mac 上工作正常。

我使用的是 macOS Mojave(版本 10.14.4)。
我的unity版本是Unity 2020.3.4f1.
我的手机使用的是安卓 10。

我已经尝试了所有我能想到的方法来处理这个错误。我相信通过修复这个错误,我的应用程序将在我的手机上正常运行。我已尝试提供所有需要的信息来帮助您了解我的问题。如果还有遗漏,请追问,我会尽快回复。

编辑: 我尝试了一些新东西。我升级到 unity 2020.7,但这不起作用。我还尝试使用 Unity 2019 从头开始​​创建一个新项目,但我仍然遇到同样的错误。是不是 Firebase 无法在我的 Mac 上运行,或者这是 Unity 中以某种方式存在于多个版本中的错误?我真的可以使用一些帮助来解决集成 Firebase 的问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

对于使用非 ASCII 用户名的开发人员来说,这是一个已知问题。请参阅 this issuethis issue。可能值得开一个新问题并强调它现在正在阻止积极的开发(请注意,未来的读者,第一个问题已关闭,但第二个在我撰写时打开。如果 690 也已关闭,并且有关联的里程碑,这意味着问题已得到解决)。

对于潜在的变通方法,最著名的变通方法是使用没有任何扩展非 ASCII 字符的用户名。我知道这可能会带来问题或破坏性。

在进行任何数据库调用之前,您可以尝试在编辑器中禁用持久性。这可能会阻止 Firebase 尝试读取您的本地数据文件夹,从而避免该问题:

var database = FirebaseDatabase.DefaultInstance;
if (Application.isEditor) {
    database.SetPersistenceEnabled(false);
}
var reference = database.RootReference;

您只需为您的游戏执行一次此操作(因此可能在 CheckAndFixDependenciesAsync 之后立即执行),但将其放在数据库访问之前应该会使我的示例代码更安全。