【发布时间】:2016-11-08 14:43:37
【问题描述】:
我已经成功地为我们的 React Native 项目设置了 iOS 的 Crashlytics 集成,并且还成功地注册了 android 版本。唯一的问题是它只报告与 Java/系统相关的崩溃——如果抛出 javascript 异常,它不会在报告中注册。我想让它工作,因为 iOS 版本已经有了这个功能。
我已按照Fabric docs 和this question 中所述设置报告 - 请参阅下面的第二个答案,我已在 MainActivity 中添加了onCreate。
接下来,我尝试按照this issue comment 创建自己的 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 确实会收到通知,因此异常会在某处被捕获!
源代码的链接在上面的问题评论中。
【问题讨论】:
标签: javascript java android facebook react-native