将Crashlytics集成到React Native - Android

4
我已成功为我们的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确实得到了通知,因此异常在某处被捕获! 源代码链接在上面的问题评论中。

如果有解决方案,请分享一下吗? - Android_IT
1个回答

0

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

简而言之:您可以使用 ErrorUtils.setGlobalHandler((err, isFatal) => { ... }); 来捕获 js 异常并将其抛出到 Craslytics 中,使用 Crashlytics.recordCustomExceptionName(...)。npm 模块 react-native-fabric-crashlytics 可以自动完成此操作。
不要忘记在 MainApplicationonCreate() 方法中(如果您使用的是低于 0.29 版本的 RN,则为 MainActivity)添加 Fabric.with(this, new Crashlytics())

小提示:捕获只在发布版本中起作用(react-native-fabric-crashlytics 在开发环境中跳过抛出)。 - farwayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接