Javascript 将Crashlytics集成到React Native-Android中
我已经为我们的React原生项目成功地为iOS设置了Crashlytics集成,并成功地注册了android版本。唯一的问题是它只报告与Java/系统相关的崩溃-如果抛出javascript异常,它不会向报告注册。我想让它工作,因为iOS版本已经有了功能 我已经按照中的概述设置了报告-请参见下面的第二个答案,我已经在MainActivity中添加了Javascript 将Crashlytics集成到React Native-Android中,javascript,java,android,facebook,react-native,Javascript,Java,Android,Facebook,React Native,我已经为我们的React原生项目成功地为iOS设置了Crashlytics集成,并成功地注册了android版本。唯一的问题是它只报告与Java/系统相关的崩溃-如果抛出javascript异常,它不会向报告注册。我想让它工作,因为iOS版本已经有了功能 我已经按照中的概述设置了报告-请参见下面的第二个答案,我已经在MainActivity中添加了onCreate 接下来,我尝试按照创建自己的NativeModuleCallExceptionHandler。代码如下: package com.m
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确实会收到通知,因此异常会在某个地方被捕获
源代码的链接在上面的问题评论中。
简而言之:您可以使用ErrorUtils.setGlobalHandler((err,isFatal)=>{…})
捕获js异常并使用Crashlytics.recordCustomExceptionName(…)
将其抛出到Crashlyticsreact native fabric crashlytics
npm模块可以自动为您执行此操作
不要忘记添加
Fabric.with(这是一个新的Crashlytics())
到onCreate()
方法main应用程序
(或者MainActivity
,如果您使用的RN低于0.29)。小注释:捕获只在发布版本中有效(react native Fabric Crashlytics
跳过在开发环境中抛出)。