FirebaseCrashlytics, не будет сообщать об исключениях, но running .crash будет

#flutter #crashlytics

#flutter #crashlytics

Вопрос:

Ниже приведен код, с помощью которого я должен инициализировать запуск своего приложения. В качестве теста у меня есть будущее, которое выдаст исключение (вне диапазона), это как когда-либо не отправлялось в crashlystics?

Если я выдам FirebaseCrashlystics.instance.crash(), он отправит отчет. Я изменил фильтр на Event-type=»non-fatals», но я не вижу там своих ошибок.

Я не знаю, чего мне не хватает?

 class AppConfig {
  final String appTitle;
  final BuildFlavor buildFlavor;
  final bool initializeCrashlytics, enableCrashlyticsInDevmode;

  AppConfig(
      {@required this.appTitle,
      @required this.buildFlavor,
      this.initializeCrashlytics = true,
      this.enableCrashlyticsInDevmode = true});

  Future<void> _testAsyncErrorOnInit() async {
    Future<void>.delayed(
      const Duration(seconds: 2),
      () {
        final List<int> list = <int>[];
        print(list[100]);
      },
    );
  }

  Future startCrashlytics() async {
    Function originalError = FlutterError.onError;
    if (this.initializeCrashlytics) {
      await FirebaseCrashlytics.instance
          .setCrashlyticsCollectionEnabled(this.enableCrashlyticsInDevmode);
      FlutterError.onError = (FlutterErrorDetails errorDetails) async {
        await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
        originalError(errorDetails);
      };
      FirebaseCrashlytics.instance.crash(); << This works

      // await _testAsyncErrorOnInit(); << This doesn't Yes i do comment crash and uncomment this.
    }
  }

  Future run() async {
    // Lägg in initiering av firebase, crashlytics
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();

    await startCrashlytics();

    runApp(ElectronicCupongs(appTitle: appTitle));
  }
}
  

Ответ №1:

Я вижу, вы проверили пример пакета, но ваше приложение завернуто в runZonedGuarded ?

Страница примера содержит необходимые сведения, но вы также можете проверить файлы пакета или, более читаемый формат, FlutterFire .

Комментарии:

1. Привет! Это работает для внешнего кода, но затем в других сегментах кода я пробовал это, но тоже не сработало. Должен ли я вручную регистрировать исключения в блоке Try Catch? Я думал, что это было обработано при общей ошибке, но, возможно, исключения не нужно улавливать и сообщать об ошибках crashlystics? Я заметил, что сбои и не серьезные сбои, например, когда я получаю красный экран с отображением ошибки, это регистрируется. Надеюсь, вы понимаете 🙂

2. @Martin, извините, что я не ответил раньше, но кто-то другой управлял этим сегментом. Насколько я понимаю, вам нужно перехватывать ошибки для crashlytics. Вот фрагмент из a catch (error, stackTrace) : await FirebaseCrashlytics.instance.recordError(error, stackTrace, reason: reasonForCrash); . Я постараюсь вернуться с дополнительной информацией, как только закончу!