產(chǎn)品小姐姐:我們的產(chǎn)品形態(tài)導(dǎo)致我們有很多操作類的用戶Notification, 但是我想吧過期的用戶沒有點擊的push給撤銷掉,來提升用戶體驗,這個...能不能做?
看在小姐姐漂亮的份上 這個活我接了。
開弄。。。。。
這事總的來說流程很簡單,ps: 其實 每個Notification 都是一條消息,那么就必然是有消息ID的。
問題的關(guān)鍵就是 NotificationId的傳遞
? ??一. 服務(wù)端?查閱 APNS的官方文檔,查到在服務(wù)端發(fā)起請求時可以在heder中增加一些字段,
? ? ????1. apns-id,這個其實就是消息的ID,如果不傳會默認(rèn)生成。此字段采用UUID的規(guī)則,如果不是apns會生成新的替換不合規(guī)的
? ? ????2.apns-collapse-id ,這個字段管的是消息折疊(分組),客戶端收到相同apns-collapse-id時 會將前面一個替換掉。適合的場景 比如:關(guān)注類通知,設(shè)置成相同的apns-collapse-id,則客戶端針對"xx關(guān)注了你" 即使收到了10W條也會只顯示一條,提升用戶體驗
? ??二. IOS客戶端?在收到Notification時直接調(diào)用API拿到notificationId, 這里這個id就跟上面兩個服務(wù)端傳的ID有關(guān)系了, 上面的apns-id 和?apns-collapse-id 這兩個是二選一,就是說 如果設(shè)置了?apns-collapse-id 則客戶端取到的notificationId就是apns-collapse-id,如果沒設(shè)置apns-collapse-id 則是apns-id的值。
正常流程:
服務(wù)端調(diào)用apns API發(fā)送一個通知Notification,客戶端收到后展示push, 用戶點擊Notification 打開app,對應(yīng)Notification 消失。
想撤銷(隱藏)Notification時:
服務(wù)端調(diào)用apns API發(fā)送一個撤銷通知Notification(透傳方式),將上一步的apns-id或者apns-collapse-id帶過去,客戶端收到后拿到notificationId 調(diào)用刪除方法(removeDeliveredNotifications(notificationId))吧Notification刪掉消失,但是吧 通過透傳的方式 我們還要做別的任務(wù)。為了后面的擴展性,可選擇 將?apns-id或者apns-collapse-id?放在自定義的用戶數(shù)據(jù)中,什么花樣就都可以玩了
代碼:只貼關(guān)鍵部分
發(fā)送正常邏輯時:

發(fā)送撤回邏輯時:

文檔:蘋果官方文檔