Unity Firebase 中的 InitializationException

Posted

技术标签:

【中文标题】Unity Firebase 中的 InitializationException【英文标题】:InitializationException in Unity Firebase 【发布时间】:2017-04-28 09:57:00 【问题描述】:

我在 Unity 项目中遇到了 Firebase 问题。 Firebase SDK 已导入项目中,构建完成,在此过程中没有错误。

SHA-1 密钥是使用 keytool 生成的,并已添加到控制台中的 Firebase 项目中。

google-services.json 也被添加到 Assets 文件夹中。

初始化 Firebase 的简单脚本:

DependencyStatus dependencyStatus = DependencyStatus.UnavailableOther;
// Use this for initialization
void Start () 

    Debug.Log ("Start FireBase");
    dependencyStatus = FirebaseApp.CheckDependencies();

    if (dependencyStatus != DependencyStatus.Available) 
    
        FirebaseApp.FixDependenciesAsync().ContinueWith(task => 
        
            dependencyStatus = FirebaseApp.CheckDependencies();
            if (dependencyStatus == DependencyStatus.Available) 
            
                InitializeFirebase();
             
            else 
            
                Debug.LogError("Could not resolve all Firebase dependencies: " + dependencyStatus);
            
        );
     
    else 
    
        InitializeFirebase();
    


void InitializeFirebase() 

    FirebaseAnalytic.Instance().setAnalyticsCollectionEnabled(true);
    FirebaseAnalytic.Instance().setUserProperty(FirebaseAnalytics.UserPropertySignUpMethod, "Google");
    FirebaseAnalytic.Instance().setUserId(SystemInfo.deviceUniqueIdentifier);
    FirebaseAnalytic.Instance().logEvent("LogIn", FirebaseAnalytics.EventLogin);
    Debug.Log ("FirebaseAnalytics Logined");

因此应用程序构建和运行时不会崩溃。但是通过adb logcat -s Unity我可以看到以下内容:

I/Unity   (27030): Start FireBase

I/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
I/Unity   (27030):

I/Unity   (27030): Firebase App initializing app com.boldstatementproductions.mcpro (default 1).

I/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
I/Unity   (27030):

W/Unity   (27030): Callback module already shut down

W/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)

E/Unity   (27030): java_app

E/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)

I/Unity   (27030): Firebase App initializing app com.boldstatementproductions.mcpro (default 1).

I/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)

W/Unity   (27030): Callback module already shut down

W/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)

E/Unity   (27030): java_app

E/Unity   (27030): (Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)

I/Unity   (27030): InitializationException: Failed to initialize the default Firebase App.

I/Unity   (27030):   at Firebase.FirebaseApp.CreateAndTrack (Firebase.CreateDelegate createDelegate) [0x00000] in <filename unknown>:0

I/Unity   (27030):   at Firebase.FirebaseApp.Create () [0x00000] in <filename unknown>:0

I/Unity   (27030):   at Firebase.FirebaseApp.get_DefaultInstance () [0x00000] in <filename unknown>:0

I/Unity   (27030):   at Firebase.Analytics.FirebaseAnalytics..cctor () [0x00000] in <filename unknown>:0

I/Unity   (27030): Rethrow as TypeInitializationException: An exception was thrown by the type initializer for Firebase.Analytics.FirebaseAnalytics

I/Unity   (27030):   at FirebaseDependencyResolver.InitializeFirebase () [0x00000] in <filename unknown>:0

I/Unity   (27030):   at FirebaseDependencyResolver.Start () [0x00000] in <filename unknown>:0

I/Unity   (27030): (Filename:  Line: -1)

谷歌搜索这些消息并没有太大帮助。我错过了什么? 我一步一步按照 Unity 的 Firebase 设置教程进行操作。这个错误已经把我吓了一个星期了!

【问题讨论】:

您是为 ios 还是 android 构建? 我们在生产中也收到了数千个类似的错误报告......在 Android 上 @adbitx for android。问题包含来自应用程序启动阶段的 adb(Android 调试桥)的日志。 这里是 Firebase 工程师。你有机会发布完整的日志吗?如果您可以通过我们的支持门户firebase.google.com/support 分享一个演示问题的项目,那就更好了?我一直在尝试重现问题(破坏捆绑 ID、删除配置文件、删除随机 Android AAR)并且没有重现它。 @stewartmiles 实际上,这就是所有日志。我已经向支持人员报告了这个问题。不幸的是,我不能分享项目。我会尝试将它放在测试项目中,但我猜情况会有所不同。 【参考方案1】:

因此,在第 1245321653214 次尝试重新导入 Firebase 并解决此问题后,我们发现之前的另一个插件 Admob 覆盖了 Firebase 使用的一些库。

我们删除了 Firebase 和 Admob 可能使用的所有 aar 和 jar,并首先重新导入了 Firebase,然后有选择地重新导入了 Admob。 主要规则是不允许 Admob 覆盖 Firebase 使用的任何文件,例如“play-services-blah-blah.aar”。

这篇文章的主要建议是不要急于导入插件:导入一个,配置,构建,检查它是否工作(10次),提交,导入第二个等等。这样你就可以清楚地查看第 3 方之间是否存在冲突。

如果你已经陷入困境,最好删除所有第 3 方并从头开始。

因此,请小心处理与下图类似的文件。

希望这有助于人们预防我们遇到的问题。

【讨论】:

【参考方案2】:

我遇到了与上面评论中描述的相同的问题。

拥有一个使用 unity 2018.3,8f1 和 firebase 5.4.4 的完整项目。将统一升级到 2019.2.6f1,这迫使我也升级了 firebase。我升级没有太多问题,但后来得到同样的错误。在这里尝试了所有解决方案,但没有得到任何结果。我认为这也是由于与其他插件的一些冲突,但无法弄清楚哪些插件。 (firebase 也是最后一个安装的,所以我希望它会覆盖任何其他问题)

我只安装了以下模块:FirebaseAuth、FirebaseMessaging、FirebaseRemoteConfig、FirebaseAnalytics。

然后我安装了 FirebaseCrashlytics 模块,它解决了我的问题。

【讨论】:

这是最好的答案,而不是删除您添加的所有文件。谢谢老兄。【参考方案3】:

也许我的反馈也可以帮助您,我多年来一直遇到同样的错误(阻止 Firebase 远程配置工作),直到我发现 Firebase 分析和远程配置都使用异步调用在同一帧上初始化,并且这似乎是问题所在。

一旦我用同步版本替换了两个初始化:

DependencyStatus dependencyStatus = FirebaseApp.CheckDependencies();
    if (dependencyStatus == DependencyStatus.Available)
        InitializeFirebase();
    else Debug.LogError("Remote Config Could not resolve all Firebase dependencies: " + dependencyStatus);

一切顺利……

【讨论】:

【参考方案4】:

已解决 - 在 Unity 中,我在初始化时遇到了同样的错误。这里的主要区别是,我使用自己的 gradle 构建 (mainTemplate.gradle),并且 Plugins/Android/Firebase/res/values.xml 中的值没有与最终 values.xml 合并

解决方案: 编辑了我的 gradle 以将 Firebase/res 文件夹也包含到 res 文件夹中 - 在 android 块下的 mainTemplate.gradle 中添加了以下行

    sourceSets 
        main 
                res.srcDirs += 'Firebase/res'
        

调试步骤: 1. 验证插件文件夹中的 google-services.xml 2. 编译完成后,在 Unity 项目中验证 Temp/ 文件夹内的值 3.发现,Temp/Firebase里面的值不在主要生成的values.xml中 4. 在 mainTemplate.gradle 中增加一行以包含 Firebaes/res

【讨论】:

以上是关于Unity Firebase 中的 InitializationException的主要内容,如果未能解决你的问题,请参考以下文章

Unity 中的 Firebase - 禁用持久性

使用 Unity 进行 Firebase 电话身份验证

无法从 Android 上 Unity 中的 Firebase 快照获取“空”值

Unity 中的 Google Firebase 身份验证:如何读取错误代码

无法从unity3d中的firebase实时数据库中检索数据

从 Firebase 中的实时数据库获取数据后,无法写入 Unity 的 TMPro 文本字段