Unity Firebase Crashlytics 未发送任何崩溃报告,在 logcat 上收到 "failed to retrieve settings" 错误
Unity Firebase Crashlytics not sending any crash reports, getting "failed to retrieve settings" error on logcat
- Unity编辑器版本:2019.3.15f1
- Firebase Unity SDK 版本:firebase_unity_sdk_6.15.2
- 我正在使用的其他 SDK:Unity IAP、Gamesparks、Ironsource、Facebook、Appsflyer、GameAnalytics
- 我使用 Unity 编辑器的平台:Windows
- 即时通讯目标平台:Android
- 脚本运行时:IL2CPP
问题
我正在获取有关 firebase 分析的数据,但我无法让 crashlytics 报告任何内容。我坚持这个...
重现步骤:
添加 firebase 分析和 crashlytics sdks。
在 assets 文件夹的某处添加 google-services.json GoogleService-Info.plist 文件
添加此代码以初始化 firebase
// Use this for initialization
void Start ()
{
// Initialize Firebase
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
// Create and hold a reference to your FirebaseApp,
// where app is a Firebase.FirebaseApp property of your application class.
// Crashlytics will use the DefaultInstance, as well;
// this ensures that Crashlytics is initialized.
Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
// Set a flag here for indicating that your project is ready to use Firebase.
VisualDebugger.SetText("crashlytics initialised");
}
else
{
UnityEngine.Debug.LogError(System.String.Format(
"Could not resolve all Firebase dependencies: {0}",dependencyStatus));
VisualDebugger.SetText("crashlytics NOT initialised: " + dependencyStatus);
// Firebase Unity SDK is not safe to use here.
}
});
Invoke("IsCrashEnabled", 5f);
}
void IsCrashEnabled()
{
VisualDebugger.AddLine("IsCrashlyticsCollectionEnabled: "+Firebase.Crashlytics.Crashlytics.IsCrashlyticsCollectionEnabled);
}
为了在安装了 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 构建过程的工作原理。
- Unity编辑器版本:2019.3.15f1
- Firebase Unity SDK 版本:firebase_unity_sdk_6.15.2
- 我正在使用的其他 SDK:Unity IAP、Gamesparks、Ironsource、Facebook、Appsflyer、GameAnalytics
- 我使用 Unity 编辑器的平台:Windows
- 即时通讯目标平台:Android
- 脚本运行时:IL2CPP
问题
我正在获取有关 firebase 分析的数据,但我无法让 crashlytics 报告任何内容。我坚持这个...
重现步骤:
添加 firebase 分析和 crashlytics sdks。
在 assets 文件夹的某处添加 google-services.json GoogleService-Info.plist 文件
添加此代码以初始化 firebase
// Use this for initialization void Start () { // Initialize Firebase Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == Firebase.DependencyStatus.Available) { // Create and hold a reference to your FirebaseApp, // where app is a Firebase.FirebaseApp property of your application class. // Crashlytics will use the DefaultInstance, as well; // this ensures that Crashlytics is initialized. Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance; // Set a flag here for indicating that your project is ready to use Firebase. VisualDebugger.SetText("crashlytics initialised"); } else { UnityEngine.Debug.LogError(System.String.Format( "Could not resolve all Firebase dependencies: {0}",dependencyStatus)); VisualDebugger.SetText("crashlytics NOT initialised: " + dependencyStatus); // Firebase Unity SDK is not safe to use here. } }); Invoke("IsCrashEnabled", 5f); } void IsCrashEnabled() { VisualDebugger.AddLine("IsCrashlyticsCollectionEnabled: "+Firebase.Crashlytics.Crashlytics.IsCrashlyticsCollectionEnabled); }
为了在安装了 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 构建过程的工作原理。