将Crashlytics集成到React Native – Android

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

我已经按照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); } } }); } 

代码编译时没有错误,但是仍然没有报告Javascriptexception。

即使故意在onCreate()addExceptionHandler()方法结束时抛出运行时exception,也不会调用handleException() 。 然而Crashlytics确实得到了通知,所以exception被抓到了某个地方!

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

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

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

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