android - 如何删除已经发送的推送通知?
问题描述
情况:
我需要向特定的用户组发送推送通知。
当该组的第一个用户执行某个操作(单击通知内的按钮)时,我需要从所有其他用户的设备中删除通知。
笔记:
我使用Quasar作为混合框架,使用Laravel作为服务器 API。我使用oneSignal发送带有 php cURL 请求的推送通知。
作为设备操作系统,我现在专注于 Android,但理想情况下,我正在寻找一种在 Android 和 IOS 中实现这一目标的方法。
尝试:
目前,我使用 notification_id 作为有效负载发送通知。当用户点击按钮时,它会触发一个回调,将 notification_id 发送回服务器。直到这里没有问题。
我有需要从其他设备中删除的通知的 ID。
但现在我不知道如何从服务器中删除它。
OneSignal 有一个cancel 方法,但它仅适用于预定通知(未发送)。如果我尝试将该方法应用于已发送的通知,则会出现错误:Notification has already been sent to all recipients
。
问题:
是否可以在发送后从服务器中删除推送通知?
如果不是,您建议用什么替代方法来实现该行为?
解决方案
嘿,请检查这些步骤也许它会对 iOS 有所帮助。
设想
-服务器将向特定用户组发送通知
- 第一个用户将点击通知尝试,然后通过 API 调用通知服务器以获取通知 ID。(您可以将逻辑放在服务器端,如果用户第一次通知您通知 ID,您可以向所有用户发送静默通知,其中左侧用户尚未看到通知,可以使用以下行删除所有已发送和待处理的通知代码)。
只需检查通知类型。如果通知是无声的并且通知类型是为了从另一个用户设备删除通知,只需在 didReciveRemortNotification APP 委托方法中编写以下代码。
application.applicationIconBadgeNumber = 0
// For Clear Badge Counts
let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications()
// To remove all delivered notifications
center.removeAllPendingNotificationRequests()
// To remove all pending notifications which are not delivered yet but scheduled.
推荐阅读
- jpa - 从多对多关系的反面编辑关系时未写入数据库
- javascript - 如何将 JSON 对象从 spring 控制器发送到 javascript?
- node.js - 我如何修复“npm init”并且无法升级它
- javascript - Vue.js - 动态创建的复选框的问题:选中一个检查所有并且不能传递动态数据的值
- apache-spark - Pyspark:遍历多行嵌套 json 以构建数据框
- c++ - 如何在 getline() 中使用多个分隔符 (',' , '/n')?
- python - 如何通过附加值产生多个列表对象?
- django - 将带有外键的自定义标签呈现到模板问题中
- javascript - 收到错误“MongooseServerSelectionError:服务器选择在 30000 毫秒后超时”
- python - 为什么我的 nginx 端点通过 ffmpeg 流式传输音频失败并显示“收到意外的 TLS 数据包”