Unity Firebase Crashlytics 未发送任何崩溃报告,在 logcat 上收到 "failed to retrieve settings" 错误

Unity Firebase Crashlytics not sending any crash reports, getting "failed to retrieve settings" error on logcat

问题

我正在获取有关 firebase 分析的数据,但我无法让 crashlytics 报告任何内容。我坚持这个...

重现步骤:

为了在安装了 facebook sdk 的情况下使应用程序达到 运行,我将这两行添加到 proguard-user.txt

 -keep public class com.facebook.**{public *; } 
 -keep public class com.facebook.internal.**{ public *; }

并注释掉 mainTemplate.gradle

中的以下行
    //implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    //implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    //implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency

当我 运行 应用程序时,firebase 已成功初始化。也 Firebase.Crashlytics.Crashlytics.IsCrashlyticsCollectionEnabled returns 正确。

我以多种不同的方式使应用程序崩溃,然后在没有重新安装的情况下再次打开它。但是没有发送崩溃报告。

当我观看 logcat 启动应用程序时,每次打开应用程序时,我都会从 firebase 看到这个错误

 2020-09-28 16:18:59.332 25773-25847/? E/FirebaseCrashlytics: Failed to retrieve settings from https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/REDACTEDblahblahblah/settings

2020 年 10 月 19 日更新:

今天,一位开发人员更新了我在此答案 saying the Firebase team fixed a backend bug last Friday(10 月 16 日)中链接的问题,该问题影响了一些新的 Unity Android 应用程序注册 w/Firebase - 可能是您问题背后的错误。我已经使用以下解决方案解决了我自己项目中的问题,但如果您尚未更新项目,我建议再次 运行 它并查看 Crashlytics 现在是否适合您..


本周我在 Unity 2019.4.11f1 中一直在处理同样的问题 - 我看到关于无法检索设置的相同错误消息,但我的特定项目和 appIds 在 URL .

我找到了解决方案 in this Github issue, which suggests the problem is caused by the version of an android library that is a dependency for the Unity Firebase Crashlytics package。我的粗略理解是 firebase-crashlytics-unity 库是 android 库 firebase:firebase-crashlytics 的包装器,unity 包允许从 Unity 使用底层原生 Android 代码。版本 com.google.firebase:firebase-crashlytics:17.10.0 在获取 Android 上某些 Firebase 项目的设置时存在问题。我自己和其他几个关注这个问题的人发现强制 Unity 在版本 17.1.1 中使用这个特定的依赖关系解决了这个问题。

线程中遇到相同问题的其他人联系了 Firebase 支持并被告知:

The error you are seeing "Failed to retrieve settings" is related to the SDK version being used. If you go to "Assets > Firebase > Editor> CrashlyticsDependencies" you can manually update the SDK to point to the latest Crashlytics SDK version 17.2.2. Please give it a try and if you continue having issues, let me know.

事实证明这个建议不太正确 - some of us following the thread then experienced a different issue when using the Android Crashlytics SDK version 17.2.2 Unity crashlytics 版本 6.16.0。因此,我特别建议尝试以下建议或线程中的其他解决方案,将 Android crashlytics 库设置为 v17.1.1。

我在项目中为解决此问题所做的更改:

  • 首先,我在包管理器中更新了我的 unity firebase 包以使用版本 6.16.0。在我的项目中安装了 4 个包 - core、analytics、crashlytics 和 messaging。
  • 然后我搜索了 Crashlytics 包的依赖文件 - Crashlytics-Dependencies.xml(通过搜索项目找到 - 对我来说是 /Library/PackageCache/com.google.firebase.crashlytics@6.16.0/Firebase/Editor/)。该文件最初列出了“com.google.firebase:firebase-crashlytics:17.0.0”,我更新为:“com.google.firebase:firebase-crashlytics:17.1.1”.
  • 作为额外的预防措施,我还 added created a MyProject-Dependencies.xml file, as was suggested by a user in the thread - 此文件还指定了版本“com.google.firebase:firebase-crashlytics:17.1.1”。
  • 接下来,我修改了 Unity 构建过程以使用自定义 mainTemplate.gradle 文件来指定依赖项, 而不是使用外部依赖解析器来管理和 嵌入统一包(Build Settings > PlayerSettings >中的选项 Android).
  • 我还更新了外部依赖管理器的设置 Android 解析器:
    • 在生成时禁用自动解析和禁用解析(我们不希望 EDM 在生成时在我们不知情的情况下更新依赖项)
    • 我也禁用了 AndroidPackageInstallationEnabled - 这使解析过程更快,并从 android 依赖项列表中删除了一堆 .aar 文件,并且没有造成任何影响我项目中的问题。
  • 然后我 运行 外部依赖解析器 > Android > 强制解析,在上面的设置更改之后,现在应该将 Android 构建的依赖列表嵌入到mainTemplate.gradle 文件 - 检查此文件(在 Assets/Plugins/Android 中),您现在应该在该列表中看到 com.google.firebase:firebase-crashlytics:17.1.1

此外,I recommend reading this article about managing Unity Firebase dependencies from one of the Firebase developer advocates, Patrick Martin. 它帮助我了解了 Unity 中 Android 依赖管理的工作原理,以及 Android gradle 构建过程的工作原理。