如何禁用 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 导入?

如何完全禁用 FirebaseAnalytics 或 Crashlytics [重复]