如何禁用 Crashlytics Answers?
Posted
技术标签:
【中文标题】如何禁用 Crashlytics Answers?【英文标题】:How to disable Crashlytics Answers? 【发布时间】:2015-08-12 11:34:22 【问题描述】:禁用 Crashlytics 错误报告相对straight forward.。我还想禁用调试版本的答案。不过,
new Crashlytics.Builder().answers(null);
不起作用,因为显然答案不能为空并且
new Crashlytics.Builder().answers(new CustomAnswers());
当我调用 Answers.getInstance()
时,CustomAnswers 是我扩展 Answers 的课程,这让我获得了 NPE。但与简单地调用一些 enable() 方法相比,这种方法一开始就很麻烦。
有什么想法吗?
顺便说一句,我真的希望 Fabric 能够尽快更新和改进他们的文档。
【问题讨论】:
你好,来自 Fabric 的 Mike。很高兴知道您想在调试版本上禁用 Answers。现在,所有版本都启用了 Answers,但我会让团队知道您希望能够做到这一点。让我知道您希望在此处对我们的文档进行哪些改进:docs.fabric.io/index/fabric 嗨,迈克,感谢您的回复。像 CrashlyticsCore.Builder 一样引入一个 Answers.Builder 类怎么样?已经可以将 Answers 对象传递给 Crashlytics,但这似乎无法按预期工作。在文档上:我真的很想看到当前版本的真实 javadoc。此外,信息 a)在文档页面和“知识库”广告之间有点分散 b)某些地方的文档似乎针对的是旧版本。 谢谢,您可以前往 docs.fabric.io 获取我们最新的文档,Javadocs 在这里:docs.fabric.io/android/javadocs.html 嗨 @MikeB 如何在 ios 中禁用回答? 是的,我真的很讨厌 Crashlytics 网站的 Answers 部分中不断出现的飞行块动画。这只不过是令人讨厌的视觉干扰。我想禁用答案,因为我启用它只是因为这个。这比无用更糟糕,非常分散注意力,而且非常非常糟糕。 【参考方案1】:在我的应用程序中,我们以老式方式进行:
if (!IS_DEBUG)
Fabric.with(this, new Crashlytics());
工作正常。
当然,您可以使用所需的任何自定义参数进行初始化。
编辑:
要获得调试布尔值,只需使用 gradle 即可:
src/
main/ // your app code
debug/
AppSettings.Java:
public static final boolean IS_DEBUG = true;
release/
AppSettings.Java:
public static final boolean IS_DEBUG = false;
编辑:
我建议不要使用 BuildConfig.DEBUG,请参阅这篇文章:http://www.digipom.com/be-careful-with-buildconfig-debug/
【讨论】:
谢谢,但是当我进一步调用 Answers 方法时,这会让我遇到 IllegalStateException。 我刚刚进一步检查了我的代码,我们总是在调用任何 Crashlytics 方法之前检查if(!AppSettings.IS_DEBUG)
。抱歉,它没有更多帮助,如果您找到更自动化的处理方式,请告诉我。
仅供参考,BuildConfig.DEBUG
在 Gradle 构建中始终正常工作。该错误仅存在于 ADT 中。
您链接到的博客是 2012 年发布的。没有理由定义您自己的调试标志。只需使用 BuildConfig.DEBUG 即可。【参考方案2】:
暂时,我用旧的Java方式解决了这个问题:
使用某种单例扩展Answers
:
public class CustomAnswers extends Answers
private static CustomAnswers instance;
private boolean mEnabled;
private CustomAnswers(boolean enabled)
super();
mEnabled = enabled;
public static synchronized void init(boolean enabled)
if (instance == null)
instance = new CustomAnswers(enabled);
public static synchronized CustomAnswers get()
return instance;
@Override
public void logSignUp(SignUpEvent event)
if (mEnabled)
super.logSignUp(event);
// (...)
使用 Answers 实现初始化 Crashlytics:
boolean isDebug = DebugHelper.isDebugVersion(this);
CustomAnswers.init(!isDebug);
CrashlyticsCore crashlyticsCore =
new CrashlyticsCore.Builder().disabled(isDebug).build();
Fabric.with(this, new Crashlytics.Builder()
.core(crashlyticsCore).answers(CustomAnswers.get()).build());
对事件使用 Answers 实现:
CustomAnswers.get().logInvite(new InviteEvent());
这将禁用正在记录的事件。
请注意,正如我在第一篇文章中所述,Answers.getInstance()
在这种情况下将返回 null 而不是您的 CustomAnswers
实例。
【讨论】:
【参考方案3】:试试这个代码
CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());
或
Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());
【讨论】:
这是我目前的设置。但它只影响崩溃报告,而不影响答案(无论 disabled() 设置如何,答案总是启用)。以上是关于如何禁用 Crashlytics Answers?的主要内容,如果未能解决你的问题,请参考以下文章
iOS Fabric Crashlytics Answers Kit不收集数据
无法解决:com.crashlytics.sdk.android :answers-shim:0.0.3
Fabric.io Crashlytics 和 Answers 初始化
Crashlytics Answers 引发 Android 即时应用程序错误
如果我已经在使用 Crashlytics,是不是需要在 Android Studio 中为 Fabric Answers 添加 gradle 导入?