APNS之push撤销

产品小姐姐:我们的产品形态导致我们有很多操作类的用户Notification, 但是我想吧过期的用户没有点击的push给撤销掉,来提升用户体验,这个...能不能做?

看在小姐姐漂亮的份上 这个活我接了。

开弄。。。。。

这事总的来说流程很简单,ps: 其实 每个Notification 都是一条消息,那么就必然是有消息ID的。

问题的关键就是 NotificationId的传递

    一. 服务端 查阅 APNS的官方文档,查到在服务端发起请求时可以在heder中增加一些字段,

        1. apns-id,这个其实就是消息的ID,如果不传会默认生成。此字段采用UUID的规则,如果不是apns会生成新的替换不合规的

        2.apns-collapse-id ,这个字段管的是消息折叠(分组),客户端收到相同apns-collapse-id时 会将前面一个替换掉。适合的场景 比如:关注类通知,设置成相同的apns-collapse-id,则客户端针对"xx关注了你" 即使收到了10W条也会只显示一条,提升用户体验

    二. IOS客户端 在收到Notification时直接调用API拿到notificationId, 这里这个id就跟上面两个服务端传的ID有关系了, 上面的apns-id 和 apns-collapse-id 这两个是二选一,就是说 如果设置了 apns-collapse-id 则客户端取到的notificationId就是apns-collapse-id,如果没设置apns-collapse-id 则是apns-id的值。

正常流程

服务端调用apns API发送一个通知Notification,客户端收到后展示push, 用户点击Notification 打开app,对应Notification 消失。

想撤销(隐藏)Notification时

服务端调用apns API发送一个撤销通知Notification(透传方式),将上一步的apns-id或者apns-collapse-id带过去,客户端收到后拿到notificationId 调用删除方法(removeDeliveredNotifications(notificationId))吧Notification删掉消失,但是吧 通过透传的方式 我们还要做别的任务。为了后面的扩展性,可选择 将 apns-id或者apns-collapse-id 放在自定义的用户数据中,什么花样就都可以玩了


代码:只贴关键部分

发送正常逻辑时:


发送撤回逻辑时:





文档:苹果官方文档

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容