c# - 与 firebase 集成的 Unity 可在 Unity 编辑器上运行,但不能在移动设备上运行
问题描述
我在 Unity 2020.3.0.f1 上创建了一个简单的应用程序,并集成了 Firebase sdk 7.1.0。我基本上是在对 firebase 进行简单的读写操作。它在 Unity 编辑器中运行良好,但在移动版本中运行良好,尽管 apk 构建是 100% 成功的。
操作系统:Ubuntu 20.04(LTS)。
这是我的简单代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Firebase.Database;
using TMPro;
public class firebase_script : MonoBehaviour
{
DatabaseReference reference;
string text_place;
public TextMeshProUGUI text;
// Start is called before the first frame update
void Start()
{
reference= FirebaseDatabase.DefaultInstance.RootReference;
}
public void get_updates(){
reference.Child("plant").GetValueAsync().ContinueWith(task => {
if(task.IsFaulted){
Debug.Log("Failed to fetch Value");
}
else if(task.IsCompleted){
DataSnapshot snapshot =task.Result;
text_place=snapshot.Child("moisture").Value.ToString();
}
});
}
// Update is called once per frame
void Update()
{
text.text=text_place;
}
}
编辑:当我看到 logcat 时,我发现 Firebase 应用程序初始化失败,但在统一编辑器中工作时看不到此类错误,并且该应用程序在 Unity 编辑器中运行良好,但在 Android 设备中却没有
03-23 00:45:45.253 9618 9707 I Unity : Company Name: <Striped>
03-23 00:45:45.253 9618 9707 I Unity : Product Name: <Striped>
03-23 00:45:48.719 9618 9707 E Unity : InitializationException: Firebase app creation failed.
03-23 00:45:48.719 9618 9707 E Unity : at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x000e3] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.719 9618 9707 E Unity : at Firebase.FirebaseApp.Create () [0x00027] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.719 9618 9707 E Unity : at Firebase.FirebaseApp.get_DefaultInstance () [0x00017] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.719 9618 9707 E Unity : at Firebase.Database.FirebaseDatabase.get_DefaultInstance () [0x00000] in <265179cd3d324ba1be0c68f88dea310a>:0
03-23 00:45:48.719 9618 9707 E Unity : at firebase_script.Start () [0x00000] in <a8ca21255e29484580e851c97ded26fa>:0
03-23 00:45:48.719 9618 9707 E Unity :
03-23 00:45:48.739 9618 9707 E Unity : InitializationException: Firebase app creation failed.
03-23 00:45:48.739 9618 9707 E Unity : at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x000e3] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.739 9618 9707 E Unity : at Firebase.FirebaseApp.Create () [0x00027] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.739 9618 9707 E Unity : at Firebase.FirebaseApp.get_DefaultInstance () [0x00017] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.739 9618 9707 E Unity : at Firebase.Database.FirebaseDatabase.get_DefaultInstance () [0x00000] in <265179cd3d324ba1be0c68f88dea310a>:0
03-23 00:45:48.739 9618 9707 E Unity : at button_script.Start () [0x00000] in <a8ca21255e29484580e851c97ded26fa>:0
03-23 00:45:48.739 9618 9707 E Unity :
03-23 00:45:48.759 9618 9707 E Unity : InitializationException: Firebase app creation failed.
03-23 00:45:48.759 9618 9707 E Unity : at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x000e3] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.759 9618 9707 E Unity : at Firebase.FirebaseApp.Create () [0x00027] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.759 9618 9707 E Unity : at Firebase.FirebaseApp.get_DefaultInstance () [0x00017] in <efce830506c14731bd3b7a14d631487d>:0
03-23 00:45:48.759 9618 9707 E Unity : at Firebase.Database.FirebaseDatabase.get_DefaultInstance () [0x00000] in <265179cd3d324ba1be0c68f88dea310a>:0
03-23 00:45:48.759 9618 9707 E Unity : at button_script.Start () [0x00000] in <a8ca21255e29484580e851c97ded26fa>:0
03-23 00:45:48.759 9618 9707 E Unity :
03-23 00:45:48.830 9618 9707 E Unity : Failed to read Firebase options from the app's resources. Either make sure google-services.json is included in your build or specify options explicitly.
03-23 00:45:48.830 9618 9707 E Unity :
03-23 00:45:48.830 9618 9707 E Unity : Failed to read Firebase options from the app's resources. Either make sure google-services.json is included in your build or specify options explicitly.
解决方案
我在未加载 google-services.json 时遇到了同样的问题(Unity 2021.1.4f),我花了很长时间寻找答案,但没有找到可行的建议解决方案。最后,我尝试使用从 google-services.json 复制的值手动创建的 AppOptions 手动调用 Firebase.Create()。
Firebase.AppOptions options = new Firebase.AppOptions();
options.ApiKey = "XXXXXXXXXXX";
options.AppId = "XXXXXXXXXXXX";
options.MessageSenderId = "XXXXXXXXXXXXX";
options.ProjectId = "my-app";
options.StorageBucket = "my-app.appspot.com";
var app = Firebase.FirebaseApp.Create( options );
不是一个理想的解决方案,但在修复此错误之前一直有效。
推荐阅读
- python - Selenium 页面源
- c++ - extern "C" 是将 C 代码转换为 C++ 代码,还是只允许编译器将 C 代码编译为 C++ 代码?
- r - geom_smooth 没有回归线
- excel - 在 TEXTJOIN 函数中崩溃 VBA 代码和不需要的“@”符号
- elasticsearch - 弹性:子聚合中直方图聚合的参考桶键?
- sql - IF 在 Where 中具有多个条件
- azure-devops - 有没有办法为 Azure DevOps 管道任务或作业配置重试?
- c++ - 解决 C++ 程序内存使用问题
- azure-cognitive-search - 在嵌套的 ComplexTypes 中过滤
- sql - pg_restore: [archiver] 输入文件似乎是文本格式转储。请使用 psql