与firebase集成的Unity可在Unity编辑器上工作,但不能在移动终端上工作

oprakyz7  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(128)

我在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.

dsekswqp

dsekswqp1#

我也遇到了同样的问题,google-services.json没有加载(Unity 2021.1.4f),花了很长时间寻找答案,但我发现没有建议的解决方案。最后,我尝试手动调用Firebase.Create(),手动创建AppOptions,并从google-services.json复制值。

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 );

字符串
不是一个理想的解决方案,但工作直到这个bug得到修复。

tuwxkamq

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如果你必须这样做。

e3bfsja2

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,我看到很多人对此感到困惑。他们自己的支持团队不知道问题的根源。但这就是答案。我希望它能帮助到其他人。

相关问题