【问题标题】:Integrating Crashlytics into React Native - Android将 Crashlytics 集成到 React Native - Android
【发布时间】:2016-11-08 14:43:37
【问题描述】:

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

我已按照Fabric docsthis 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 确实会收到通知,因此异常会在某处被捕获!

源代码的链接在上面的问题评论中。

【问题讨论】:

    标签: javascript java android facebook react-native


    【解决方案1】:

    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)。

    【讨论】:

    • 小注:捕获仅在发布版本中有效(react-native-fabric-crashlytics跳过在开发环境中抛出)。
    猜你喜欢
    • 2021-04-13
    • 2016-04-16
    • 2017-11-06
    • 2017-01-31
    • 2020-01-05
    • 2017-06-24
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多