我正在编写一个应用程序,每隔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通知做我想做的事。
答案 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
删除通知。