You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需重启应用向Fabric控制台发送崩溃报告(Android、iOS)

无需重启应用发送崩溃报告至Fabric控制台的实现方式

嘿,这个问题问得很实用!不管是Android还是iOS平台,确实都能实现无需重启应用就把崩溃报告发送到Fabric控制台,我给你分别讲下具体的实现思路和代码:

Android平台方案

Fabric的Crashlytics默认是在应用崩溃重启时才发送报告,但我们可以通过捕获未处理异常并主动触发上报的方式,实现崩溃时立即发送。

核心思路是替换默认的UncaughtExceptionHandler,在捕获到崩溃异常后,先让Crashlytics记录异常信息,再调用主动发送的API,最后终止应用(因为崩溃后的应用状态已经不可靠,不能继续运行)。

代码示例:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        // 让Crashlytics记录崩溃详情
        Crashlytics.logException(throwable);
        // 主动触发发送所有待上报的报告
        Crashlytics.getInstance().sendUnsentReports();
        // 终止应用进程
        System.exit(1);
    }
});

这里的关键是sendUnsentReports()方法,它会立即尝试将本地缓存的崩溃报告发送到Fabric控制台,不用等到下次应用启动。

iOS平台方案

iOS上的实现逻辑类似,默认情况下Crashlytics也是在下次启动时上报崩溃,但我们可以通过捕获未捕获异常和信号量崩溃,主动触发上报。

捕获NSException类型的崩溃

通过设置NSSetUncaughtExceptionHandler来捕获未处理的Objective-C异常,记录后主动发送报告:

void uncaughtExceptionHandler(NSException *exception) {
    // 将崩溃信息记录到Crashlytics
    CLSExceptionModel *exceptionModel = [[CLSExceptionModel alloc] initWithException:exception frameArray:nil];
    [Crashlytics recordExceptionModel:exceptionModel];
    // 主动发送待上报的报告
    [[Crashlytics sharedInstance] sendUnsentReports];
    // 终止应用
    abort();
}

// 在AppDelegate的启动方法中注册处理器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 初始化Fabric和Crashlytics
    [Fabric with:@[[Crashlytics class]]];
    // 设置未捕获异常处理器
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
    return YES;
}

捕获信号量类型的崩溃

对于SIGSEGV、SIGABRT这类底层信号崩溃,NSException处理器无法捕获,需要注册信号处理器来处理:

#include <signal.h>

void signalHandler(int signal) {
    // 记录信号崩溃信息
    [[Crashlytics sharedInstance] recordSignal:signal];
    // 主动发送报告
    [[Crashlytics sharedInstance] sendUnsentReports];
    // 终止应用
    abort();
}

// 在启动方法中注册信号处理器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [Fabric with:@[[Crashlytics class]]];
    // 注册常见崩溃信号的处理器
    signal(SIGABRT, signalHandler);
    signal(SIGSEGV, signalHandler);
    signal(SIGILL, signalHandler);
    signal(SIGFPE, signalHandler);
    return YES;
}

同样,sendUnsentReports方法会立即触发上报,不用等下次启动。

注意事项

  1. 不管是Android还是iOS,发送报告后必须终止应用,因为崩溃后的进程状态已经不稳定,继续运行可能导致更多问题。
  2. 现在Fabric已经整合到Firebase Crashlytics,新项目建议使用Firebase版本,但上述方法在老的Fabric SDK中依然有效。

内容的提问来源于stack exchange,提问作者usafder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:06:44