使用react-native-push-notification删除以前的通知

时间:2017-03-09 19:26:19

标签: android ios react-native push-notification

我正在编写一个应用程序,每隔15分钟发送一次本地推送通知,同时后台计时器通过react-native-push-notification运行。如果用户未对notification n采取行动,则在推送notification n+1时,我想删除notification n

到目前为止我尝试过的事情是在popInitialNotification运行true时将PushNotification.configure()设置为ongoing并在调用{{1}时将true设置为PushNotification.localNotification() }}。我在调用id然后调用localNotification()时也尝试添加PushNotification.cancelLocalNotifications({id: myId}),但文档明确指出cancelLocalNotifications()仅取消预定通知(而且我很确定这只意味着未来的事情。)

componentWillMount() {
    PushNotification.configure({
        permissions: {
            alert: true,
            badge: true,
            sound: true
        },
        popInitialNotification: true,
    });
}

doPushNotification() {
    if (AppState.currentState !== 'active') {
        PushNotification.localNotification({
            vibration: 500,
            message: 'my message',
            ongoing: true,
        });
    }
}

目前我只处理Android版本,但很快我会处理iOS版本,因此一般解决方案(或每种解决方案)最有帮助。

如果那里有一个更好的React Native库,我也不会在react-native-push-notification完全售罄;我只是没找到一个。

修改

我认为它适用于Android。将id调用PushNotification.localNotification()时设置为与上一个通知相同的值将覆盖该通知。

我还在我的Mac上安装XCode,所以我还不能测试iOS上的当前行为。但是,react-native-push-notification自述文件表明id是仅限Android的选项(ongoing)。我可能仍然需要帮助让iOS通知做我想做的事。

4 个答案:

答案 0 :(得分:0)

docs用于react-native-push-notification状态,您可以使用userInfo取消ios本地通知,如下所示:

PushNotification.localNotification({
  ...
  userInfo: { id: '123' }
  ...
});
PushNotification.cancelLocalNotifications({id: '123'});

我已经对此进行了测试,并且可以正常工作。

对于android,这可以通过某种方式起作用:

创建通知:

 PushNotification.localNotificationSchedule({
      message: message ,
      date: new Date(date),
      repeatType: "minute",
      id: JSON.stringify(id),
      userInfo: { id: JSON.stringify(id) }
    });

 PushNotification.cancelLocalNotifications({ id: id});

将ID字符串化可以取消android推送通知。

答案 1 :(得分:0)

您可以在 handleAppStateChange(appState)

中添加此代码
   if (appState === 'active') {
     PushNotification.cancelAllLocalNotifications()
   }

答案 2 :(得分:0)

以下代码可在iOS和Android上使用: 我们需要对id进行字符串化处理,以便它可以在android中使用,并且必须从Date类(而不是像力矩库)中创建日期。

const LocalNotificationSchedule = (id, afterSec, message) => {
   PushNotification.localNotificationSchedule({
    id: id+'',
    message: message,
    date: new Date(Date.now() + afterSec * 1000),
    playSound: true,
    soundName: 'default',
    vibrate: true,
    vibration: 300,
    playSound: true,
    soundName: 'default',
    ignoreInForeground: false
  })
}

const CancelLocalNotifications = (id) => {
  PushNotification.cancelLocalNotifications({id: id+''})
}

答案 3 :(得分:-3)

尝试使用cancelLocalNotifications删除通知。