在 Xamarin Android 项目中添加 Firebase Crashlytics 的问题

Posted

技术标签:

【中文标题】在 Xamarin Android 项目中添加 Firebase Crashlytics 的问题【英文标题】:Problem with adding Firebase Crashlytics in Xamarin Android project 【发布时间】:2020-08-17 02:50:58 【问题描述】:

我在 Xamarin android 项目中添加 Firebase Crashlytics 时遇到了一些问题。 我在 Visual Studio 中创建了一个空的 android 项目。然后我在 google firebase 控制台中注册了该应用程序。然后下载google-services.json,放到项目中。 对于此文件,将构建设置为 googleservicejson 模式。 在此之前,我添加了以下 nugget 包:

Xamarin.Android.Crashlytics
Xamarin.Android.Crashlytics.Answers
Xamarin.Android.Crashlytics.Beta
Xamarin.Android.Crashlytics.Core

在 OnCreate 方法中,我添加了以下代码:

Fabric.Fabric.With (this, new Crashlytics.Crashlytics ());
Crashlytics.Crashlytics.HandleManagedExceptions ();

我还在 AndroidManifest.xml 中添加了这个元数据

<meta-data android:name="io.fabric.ApiKey" android:value="firebase api key" />

然后我在strings.xml中添加了这个

<string name="com.crashlytics.android.home.firebaseandroid">33</string>

home.firebaseandroid 是我的 apk 名称

清理和重建后,当我启动应用程序时,它会抛出此异常:

Fabric.Services.Concurrency.UnmetDependencyException: 'This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install an Android build tool and ask a team member to invite you to this app's organization.'

据我了解,该应用程序正在寻找 Fabric 的 api 密钥,但我只有 firebase 的 api 密钥。 有没有人有同样的问题? 请建议看什么方向。 提前致谢。

【问题讨论】:

你解决了这个问题吗? 是的,使用 Oleg Kodysh 的解决方案 【参考方案1】:

如果您使用的是 google 服务文件,则不应在 AndroidManifest 中指定 API 密钥。 google 服务文件已包含 Crashlytics SDK 正在寻找的 API 密钥。

【讨论】:

谢谢奥列格!一个问题:如何使测试崩溃?或者如果有关于这个SDK的文档,如果不难,给个链接。 你可以试试这样的firebase.google.com/docs/crashlytics/…。【参考方案2】:

如果您想尝试其他方法,请在此处查看我对此问题的评论:https://github.com/xamarin/XamarinComponents/issues/760#issuecomment-579010612

这是我当时找到的解决方法(是的,我知道这不是最后一个版本,请继续阅读):

至少我已经解决了这个问题。问题似乎是由 依赖交互。

对于任何为此苦苦挣扎的人,我已经通过使用完全 以下版本:

Xamarin.Android.Crashlytics 2.9.4.1 Xamarin.Android.Crashlytics.Answers 1.4.2 Xamarin.Android.Crashlytics.Beta 1.2.9 Xamarin.Android.Crashlytics.Core 2.6.3 Xamarin.Android.Fabric 1.4.3 Xamarin.Build.Download 0.4.11

安装 Crashlytics 将安装 Xamarin.Build.Download 0.7.1 作为 依赖,但(至少对我来说)不可能得到一个合适的 再用那个版本构建。所以这个包应该降级 安装后。

话虽如此;您一定知道这个基于 Fabric 的 Crashlytics 版本即将被弃用,对吧?

我们所有人都收到了来自 Google 的邮件通知:

我们写信通知您,Fabric Crashlytics SDK 现已弃用,并将继续报告您的应用崩溃,直到 2020 年 11 月 15 日。在此日期之后,Fabric Crashlytics SDK 和 Firebase Crashlytics SDK 的 beta 版本将停止发送崩溃 为您的应用报告。发生了什么? 我们正在将 Fabric Crashlytics SDK 和 Firebase Crashlytics SDK 的 beta 版本替换为普遍可用的 Firebase Crashlytics SDK。下一步是什么? 要继续在 Firebase 控制台中获取崩溃报告,请确保将您的应用升级到 Firebase Crashlytics SDK 版本 2020 年 11 月 15 日之前,Android 17.0.0+,ios 4.0.0+,Unity 6.15.0+。Android

所以一切都会很快改变,你不应该再使用 Fabric 解决方案,尤其是对于新项目。

您可以在此处找到新的官方 nuget 包,但它是一个预览版(我猜 xamarin 团队正在努力解决这个问题,但他们很危险地接近截止日期 - 就像我们所有人一样):

https://www.nuget.org/packages/Xamarin.Firebase.Crashlytics/117.0.0-preview02

这是添加 cmets 的官方存储库问题: https://github.com/xamarin/XamarinComponents/issues/956

我目前正在将我的项目迁移到这个新的 Crashlytics 版本,要记住的一件事是您需要使用 AndroidX(这对我来说是个问题,我正在维护一个旧项目,并且迁移到 AndroidX 尚未准备好)

当您添加这个新包和 google-services.json 时,您需要在旧代码中更改以下内容:

每个 CrashLytics.Crashlytics 引用将只是 FirebaseCrashlytics。 无需初始化,在任何地方都可以得到FirebaseCrashlytics.Instance 要记录异常,您需要使用RecordException 方法而不是旧的LogException SetUserIdentifier 更改为 SetUserIdSetUserName 不再存在 不再有故意崩溃的方法,所以现在如果你想测试你的实现,你必须简单地抛出任何你想要的异常

也许我遗漏了什么,但基本上,仅此而已。

【讨论】:

以上是关于在 Xamarin Android 项目中添加 Firebase Crashlytics 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin Android 项目中添加 Firebase Crashlytics 的问题

Xamarin SQLite教程Xamarin.iOS项目添加引用

Xamarin图表开发基础教程OxyPlot框架

Xama不会跟踪Xamarin Android新文件

c#中xamarin怎么添加包

Xamarin 共享项目或添加为链接?