我在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编辑器中工作时没有看到这样的错误,并且该应用程序在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.
型
3条答案
按热度按时间dsekswqp1#
我也遇到了同样的问题,google-services.json没有加载(Unity 2021.1.4f),花了很长时间寻找答案,但我发现没有建议的解决方案。最后,我尝试手动调用Firebase.Create(),手动创建AppOptions,并从google-services.json复制值。
字符串
不是一个理想的解决方案,但工作直到这个bug得到修复。
tuwxkamq2#
根据您的日志,您丢失了将游戏连接到Firebase后端所需的
google-services.json
文件。这可能有多种原因和多种变通方法。最简单的解决方案:
确保
Assets/
目录中有google-services.json
文件。如果你忘记了,你可以从Firebase Jmeter 板下载。从this page开始:
获取Android应用的配置文件
转到Firebase控制台中的Project settings。
在您的应用卡中,选择需要配置文件的应用的软件包名称。
单击google-services.json。
针对Unity修改:将配置文件移动到游戏的Assets/目录中。
请确保您的应用中只有这个最近下载的配置文件。
google-services.json存在,我仍然得到错误
确保您安装了
python
,并且在路径中有一个实际名为python
而不是python3
的可执行文件。通常情况下,Android开发者会使用play services gradle插件将
google-services.json
转换为xml(具体过程在这里详细介绍)。Firebase Unity插件在2017年仍然支持Unity,这早于游戏中对Gradle的稳定支持(它曾经支持回到5分支,但它已经足够老了,很难找到测试机器仍然运行编辑器)。因此,Firebase Unity插件运行一个名为generate_xml_from_google_services_json.py
的Python脚本(在Windows上编译为generate_xml_from_google_services_json.exe
),生成文件Assets/Plugins/Android/FirebaseApp.androidlib/res/values/google-services.xml
。当您在Unity上下文中看到一个错误说您丢失了一个google-services.json
文件时,通常会丢失这一点。此脚本与Python 3和2(2,因为它仍然在MacOS中提供)交叉兼容,但工具试图在路径中使用
python
执行它。既然你在Linux上,你可能想尝试戳这个bug:https://github.com/firebase/quickstart-unity/issues/1005(如果你认为应该打开它,但没有人回应,请在评论中提到@patm1987-提醒我这个答案)。这些都不管用
我建议打开一个bug here,但有一个解决所有
google-service.json
相关问题的方法。请注意,我建议不要将此作为第一步,因为这种配置不是预期的,可能会让人们在将来试图帮助您的过程中陷入一个循环。由于Unity和Firebase的交互方式,它也有点脆弱。
在Firebase类 * 上调用
FirebaseApp.DefaultInstance
* 或任何其他.DefaultInstance
时,如果没有具有默认应用名称的FirebaseApp
,则会隐式延迟调用Firebase.Create()
。Because of a bug,你不能覆盖默认应用一旦创建(我的意思是这个进程脆弱),但如果你调用.Create(AppOptions)
默认应用之前创建(在任何线程中调用.DefaultInstance
之前),你可以提供自己的应用选项。然后,你可以将
google-services.json
放入StreamingAssets/
目录并直接加载,或者通过复制/粘贴google-services.json
中的字段来构建AppOptions
。再次强调,这是你的最后一次,而不是你的第一次。我会问你file a bug如果你必须这样做。
e3bfsja23#
答案在这里:在Unity上安装Android和ios文件。
我会给予你我的故事和我遵循的道路,这样你就不会犯我的错误:
我也遇到了同样的问题,我试了每个人建议的一切。我被困在这个问题上好几天没有解决办法。简直是地狱。什么都不管用!第一个可行的解决方案是创建一个自定义Firebase应用程序。但是,分析仍然不起作用。我失去了所有的希望,正在考虑回到旧版本的Firebase(有人提到这个作为对他们有效的解决方案),直到...我在Firebase github上发现了一条被忽视的评论。
这条评论的内容是这样的:最新的Firebase版本需要在系统上安装android和ios文件。我想,“也许这就是答案。官方Firebase文档和支持团队告诉我们不需要它。但它总是给我错误。”
所以我继续下载了iOS版的软件包。但我无法从Unity Hub下载它们。所以我去了Unity Archives,并下载了安装文件到我的版本(在错误地下载了一个较新的版本之后...),只保留了对ios文件的检查。
它开始下载,然后出现了这个错误:找不到Unity的正确版本。所以我再次开始安装,但这一次我给出了正确的地址在我的PC和下载同样的东西后,iOS Build的选项被解锁。
很好...现在我只需要再次查看Firebase配置。我按照一些人的建议将它们添加到“StreamingAssets”文件夹中。Firebase告诉你,你可以在任何地方上传它们。但有人说这里是安全的地方。(我不确定这是否会影响结果。
瞧,我复制的那一刻,一个对话框打开了:Firebase在征求我的同意收集数据。然后,另一个json for desktop被自动创建,一丝希望在我的心中闪耀。难道是这个?
我当时就建立了这个项目...我第一次觉得没用的时候有点心碎。但后来,我注意到它正在工作!!!终于!经过这么多的尝试和错误!现在一切都好了。
这是Firebase最新版本的一个bug,我看到很多人对此感到困惑。他们自己的支持团队不知道问题的根源。但这就是答案。我希望它能帮助到其他人。