Flutter 本地通知不会在应用程序终止时执行代码

Nie*_*ijk 5 dart flutter flutter-local-notification

我有一个可以安排闹钟的应用程序,它会触发本地通知。当按下这些通知上的按钮之一时,数据库会更新以反映您已关闭警报。

但是,当应用程序终止/关闭时,似乎没有代码被执行,数据库也没有更新。 通知确实会被触发,当用户按下其中的按钮时,不会执行任何代码。 看起来像这样

我想知道我正在尝试的是否可能,因为目前我不确定。

  • 通知是使用 flutter 本地通知插件中的 zonedSchedule 创建的。

  • 按下通知中的按钮之一时,应用程序不会打开。

代码如下:

class LocalNoticationsService {
  LocalNoticationsService(
    this._notificationsPlugin,
  );

  final FlutterLocalNotificationsPlugin _notificationsPlugin;

  Future<void> init() async {
    const AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings(
      'img/path',// path to notification icon
    );

    final DarwinInitializationSettings initializationSettingsIOS = DarwinInitializationSettings(
      requestSoundPermission: false,
      requestBadgePermission: false,
      requestAlertPermission: false,
      defaultPresentAlert: true,
      defaultPresentSound: true,
      notificationCategories: [
        DarwinNotificationCategory(
          'category',
          options: {
            DarwinNotificationCategoryOption.allowAnnouncement,
          },
          actions: [
            DarwinNotificationAction.plain(
              'snoozeAction',
              'snooze',
            ),
            DarwinNotificationAction.plain(
              'confirmAction',
              'confirm',
              options: {
                DarwinNotificationActionOption.authenticationRequired,
              },
            ),
          ],
        ),
      ],
    );

    final InitializationSettings initializationSettings = InitializationSettings(
      android: initializationSettingsAndroid,
      iOS: initializationSettingsIOS,
    );

    await _notificationsPlugin.initialize(
      initializationSettings,
      onSelectNotification: _onSelectedNotification,
      onSelectNotificationAction: onSelectNotificationAction,
    );

    final notificationOnLaunchDetails = await _notificationsPlugin.getNotificationAppLaunchDetails();
    if (notificationOnLaunchDetails?.didNotificationLaunchApp ?? false) {
      _onSelectedNotification(notificationOnLaunchDetails!.payload);
    }
  }

  void _onSelectedNotification(String? payload) {
    // Not relevant to this problem
  }

  Future<bool> _confirmAlarm(AlarmPayLoad alarmPayload) async {
    // Update database
  }
}

// Top level function
Future<void> onSelectNotificationAction(NotificationActionDetails details) async {
  await Firebase.initializeApp();

  final localNotificationsService = LocalNoticationsService(
    FlutterLocalNotificationsPlugin()
  );
  await localNotificationsService.init();

  final alarmPayload = AlarmPayLoad.fromJson(details.payload);
  await localNotificationsService._confirmAlarm(alarmPayload)
}

Run Code Online (Sandbox Code Playgroud)

由于这一切都在后台运行,我一直无法找到记录内容的方法。我尝试使用 http 包将 post 请求发送到带有一些数据的 webhook,但这些似乎在应用程序终止时不会触发,但在应用程序位于前台或后台(未关闭)时确实可以工作)。

我在网上找到的有关 flutter 本地通知的任何帖子或视频似乎都没有涵盖这个问题,或者正在使用 firebase 推送通知和关联的包进行后台处理。

我非常有兴趣听到有关可能出现问题或解决方案以及处理后台通知如何工作的任何反馈。如果您需要有关代码的更多信息,请随时询问。

Hay*_*zim 0

尝试在发布模式下运行代码,终止应用程序进程,然后测试在终止状态下发送通知。