【问题标题】:Unity error with Firebase RealTime DatabaseFirebase 实时数据库的 Unity 错误
【发布时间】:2021-05-06 22:46:55
【问题描述】:

我已经使用 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 上运行得非常好,并且可以在统一编辑器中访问我的实时数据库。但是当我在手机上运行它时,会弹出 2 个错误。

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

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

DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

然后,如果 t hat 为空,我将签入另一个脚本。它在我的手机上变为 null,但在我的 mac 上运行良好。

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

我已经尝试了所有我能想到的来处理这个错误。我相信通过修复此错误,我的应用程序将在我的手机上正常运行。我已尽力提供帮助您了解我的问题所需的所有信息。如果我仍然缺少任何东西,请询问,我会尽快回复。

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

【问题讨论】:

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


    【解决方案1】:

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

    对于潜在的解决方法,最知名的解决方法是使用不带任何扩展非 ascii 字符的用户名。我知道这可能会带来问题或破坏性。

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

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

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

    【讨论】:

    • 您好,感谢您的回复。我以为这个问题会在几天后被遗忘。我会看看我是否可以尝试。但我确实有一个问题。你是什​​么意思非 ascii 用户名或什么是 ascii 用户名?
    • 我会尽可能地循环使用 StackOverflow,但在 GitHub 上提问是确保问题至少得到解决的好方法(您只需在两周内回复任何问题以保持问题开放)。对于 ascii,我的意思是非扩展 ascii 字符集(asciitable.com),基本上是拉丁字符(并且可能最安全,没有重音符号)。由于桌面实现几乎都是 C++,因此会出现这样的问题,即元素未转换为 UTF-8 作为后备。
    • (如果你不熟悉的话,UTF-8 是需要 8 位字符的语言的一个很好的后备。除了 strlen 是 bytes 之外,字符串需要而不是字符,它是向后兼容的,不会破坏代码但可能看起来很奇怪)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2020-02-20
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多