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