我已成功为我们的React Native项目设置了iOS的Crashlytics集成,并成功注册了Android版本。唯一的问题是,它只报告与Java/系统相关的崩溃 - 如果有JavaScript异常抛出,它将无法记录报告。我想让它正常工作,因为iOS版本已经具备了这个功能。
我按照Fabric文档和这个问题(请查看下面的第二个答案),设置了报告。我在MainActivity中添加了
随后,我尝试按照此问题评论创建自己的NativeModuleCallExceptionHandler。以下是我的代码:
代码编译无误,但仍未报告Javascript异常。 即使在
我按照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确实得到了通知,因此异常在某处被捕获!
源代码链接在上面的问题评论中。