Я успешно установил интеграцию Crashlytics для iOS для нашего проекта React Native и сумел получить зарегистрированную версию Android. Единственная проблема заключается в том, что он сообщает только о сбоях, связанных с Java/системой, - если есть исключение javascript, которое оно не регистрирует в отчетах. Я хотел бы заставить его работать, поскольку версия iOS уже имеет функциональность.Интеграция Crashlytics в React Native - Android
Я настроил отчетность, как указано в Fabric docs и this question - см. Второй ответ, я добавил onCreate
в MainActivity.
В результате я попытался создать свой собственный NativeModuleCallExceptionHandler согласно this issue comment. Код для этого ниже:
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 получает уведомление, поэтому исключения попадают куда-нибудь!
Ссылки на исходный код приведены в комментарии к проблеме выше.
Небольшое замечание: ловить будет работать только в версии выпуска ('реакция-native-fabric-crashlytics' пропускает бросание в среду dev). – farwayer