如何在特定时间从iOS通知中心自动删除推送通知?

时间:2019-04-12 07:02:19

标签: ios swift iphone apple-push-notifications

我正在使用Swift开发具有推送通知功能的iOS应用。该应用程序通过推送通知(此处使用APNS)向用户发送生日提醒通知。

当前,推送通知将保留在设备的通知中心,直到用户点击该通知或选择从设备清除通知为止。

现在,我正在寻找一种在每天结束时自动删除该推送通知的方法,因为无需在设备中显示过去一天的生日通知。

有人可以建议我一种解决方案,以哪种方式可以实现?是否可以在没有任何用户交互的情况下从iOS删除通知?

谢谢。

3 个答案:

答案 0 :(得分:1)

@dm_mobile您的问题是100%有效。


为了自动从通知中心删除特定的通知, -在iOS端,除非用户与该通知进行交互,否则您不能这样做 -但是,您可以从服务器端进行操作,让我告诉您如何


如何以编程方式从通知中心删除通知? 当服务器使用APNS端点通过APNS服务器向您发送任何通知时,APNS会以有效载荷的形式返回一些数据,您将在响应头中以apns-id键的形式获得通知标识符

将该apns-id值存储在服务器端的数据库表中。

一天结束或具有特定条件的条件下,您可以通过在请求标题中传递apns-id值来向APNS发送另一个请求,从而从设备的通知中心删除该通知。

Skype正在做同样的事情。

详细阅读:https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#//apple_ref/doc/uid/TP40008194-CH11-SW1

答案 1 :(得分:1)

这是当应用程序被用户强行终止时的情况:

首先,当您想通过推送通知向用户发送生日提醒通知时,发送非零徽章,例如:

 {
  "aps": {
    "alert": {
      "title": "Hey! Urgent Reminder",
      "body": "Do not forget my wife SURPRISE BIRTHDAY PARTY"
    },
    "badge": 1
  }
} 

此后,当不需要在设备中显示通知时,您可以发送带有零徽章的静默通知,即使应用被强行终止,该通知也会清除徽章和通知 strong>由用户执行,但didReceiveRemoteNotification不会调用,因为应用已终止。 静默推送通知的有效负载:

 {
   "aps" : {
      "content-available" : 1,
        "badge" : 0,
        "Priority" : 10
   }
}

发送后,有效负载将自动清除徽章并从通知中心删除推送通知。

请注意,如果在发送静默通知之前徽章为零,则不会清除通知。

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

答案 2 :(得分:1)

万一其他人最终在这里寻找一种无需发送后台推送即可清除通知的方法,我花了几个小时尝试复制已接受的答案,具体是:

您可以通过在请求标头中传递apns-id值将另一个请求发送到APNS来从设备的通知中心删除该通知。

它根本不适合我。据我所知,删除通知的唯一方法是通过内容可用的后台推送。虽然我很想证明自己是错的!