Необходимо отправить уведомление, когда приложение было закрыто - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно отправить уведомление пользователю, когда приложение закрывается пользователем или системой. Теперь у меня есть таймер на 15 секунд, и каждый раз, когда я планирую 30-секундное c уведомление, как это:

Timer doNotCloseTimer;

makeDoNotCloseNotification(){
  String notificationHeader = "App closed!";

  var androidChannelSpecifics = AndroidNotificationDetails(
     // Android notification settings
  );
  var iOSChannelSpecifics = IOSNotificationDetails();
  var platformChannelSpecifics = NotificationDetails(androidChannelSpecifics, iOSChannelSpecifics);

  var scheduledNotificationDateTime = DateTime.now().add(Duration(seconds: 30));
  if(doNotCloseTimer == null)
    doNotCloseTimer = Timer.periodic(Duration(seconds: 15), (timer) async {
      await flutterLocalNotificationsPlugin.cancel(NOTIFICATION_DO_NOT_CLOSE_ID);
      makeDoNotCloseNotification();
    });

  await flutterLocalNotificationsPlugin.schedule(
      NOTIFICATION_DO_NOT_CLOSE_ID,
      notificationHeader,
      "",
      scheduledNotificationDateTime,
      platformChannelSpecifics,
      payload: "DoNotClosePayload"
  );
}

Приложение завершается с таймером и приходит уведомление. Но есть много проблем, почему-то только в режиме релиза, когда я не могу понять, что происходит. Иногда таймер не работает, и уведомление приходит, когда приложение открыто в фоновом режиме. Как это правильно делать? Спасибо.

UPD: часть AndroidManifest В теге :

    <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
        </intent-filter>
    </receiver>
    <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />

И внутри

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
...