0

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

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

我想知道我正在尝试的是否可能,因为在这一点上我不确定。

  • 通知是使用颤振本地通知插件中的 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)
}

由于这一切都在后台运行,我一直无法找到记录事情的方法。我已经尝试使用 http 包将发布请求发送到带有一些数据的 webhook,但是这些似乎在应用程序终止时不会触发,但在应用程序处于前台或后台时会起作用(未关闭)。

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

我很想听听有关可能出了什么问题或可能是什么解决方案以及如何处理后台通知的任何反馈。如果您需要有关代码的其他信息,请随时询问。

4

1 回答 1

0

如果您想在后台运行它,请点击此处的链接。

于 2022-01-12T11:55:53.250 回答