javascript - 将 Crashlytics 集成到 React Native - Android

标签 javascript java android facebook react-native

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

我已经按照 Fabric docs 中的概述设置了报告和 this question - 请参阅第二个答案,我在 MainActivity 中添加了 onCreate

接下来,我尝试根据 this issue comment 创建自己的 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 模块可以自动为您完成。

不要忘记将 Fabric.with(this, new Crashlytics()) 添加到 MainApplicationonCreate() 方法(或MainActivity 如果您使用低于 0.29 的 RN)。

关于javascript - 将 Crashlytics 集成到 React Native - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38225845/

相关文章:

javascript - 如何在其他 PHP 文件类中调用 Javascript

java - 在 Java 中复制后保留对象的值

java - 在 RecyclerView 中滚动时加载位图无法正常工作

android - 实现 Parcelable 时使用 Float 而不是 float(Primitive 类型)

android - 如何创建 Android Material 设计 UI 小部件?

javascript - 如何为 Angular 组件注释 ngdoc?

javascript - 使用 BackBone.JS 设置表单并填写数据

java - 减慢对特定函数的调用

android - 在选择目标 android 操作系统进行开发时,哪些因素很重要

javascript - 从 1 到 10 中随机挑选数字而不重复一个的最佳方法是什么?