将 Crashlytics 集成到 React Native - Android

Integrating Crashlytics into React Native - Android

本文关键字:Native Android React Crashlytics 集成      更新时间:2023-09-26

我已经成功地为我们的React Native项目设置了iOS的Crashlytics集成,并设法注册了android版本。唯一的问题是它只报告与Java/系统相关的崩溃 - 如果抛出javascript异常,它不会在报告中注册。我想让它工作,因为iOS版本已经具有该功能。

我已经按照 Fabric 文档和这个问题中概述的设置了报告 - 请参阅下面的第二个答案,我已经在 MainActivity 中添加了onCreate

后续我尝试根据此问题评论创建自己的 NativeModuleCallExceptionHandler。代码如下:

package com.mypackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.modules.core.JavascriptException;
import com.facebook.react.bridge.NativeModuleCallExceptionHandler;
import java.util.Map;
import com.crashlytics.android.Crashlytics;
class CrashlyticsErrorModule extends ReactContextBaseJavaModule {
  public CrashlyticsErrorModule (ReactApplicationContext reactContext) {
    super(reactContext);
    addExceptionHandler(reactContext);
  }
  @Override
  public String getName() {
    return "CrashlyticsErrorModule";
  }
  private void addExceptionHandler(ReactApplicationContext reactContext) {
    reactContext.setNativeModuleCallExceptionHandler(new NativeModuleCallExceptionHandler() {
      @Override
      public void handleException(Exception e) {
        if (e instanceof JavascriptException) {
          Crashlytics.log(e.getMessage());
        } else {
          Crashlytics.logException(e);
        }
      }
    });
  }

代码编译时没有错误,但是Javascript异常仍未报告。

即使在 onCreate() 方法或 addExceptionHandler() 方法结束时故意引发运行时异常,也不会调用 handleException()。然而,Crashlytics确实会收到通知,所以异常在某个地方被捕获了!!

源代码

的链接在上面的问题注释中。

https://github.com/facebook/react-native/issues/1194

简而言之:您可以使用ErrorUtils.setGlobalHandler((err, isFatal) => { ... });来捕获 js 异常并将其与 Crashlytics.recordCustomExceptionName(...) 一起扔给 Craslytics。 react-native-fabric-crashlytics npm 模块可以自动为您完成。

不要忘记onCreate() MainApplication方法中添加Fabric.with(this, new Crashlytics())(如果使用低于 0.29 的 RN,则MainActivity)。