在显示之前快速取消推送通知

时间:2017-02-06 07:11:37

标签: ios swift apple-push-notifications

我使用Swift为IOS 10.2开发了一个应用程序。我从服务器使用Apple推送通知。在这个应用程序中,我使用UserDefaults进行用户设置。
我希望如果用户想要接收当天的新闻,我的应用程序允许显示新闻类别的推送通知。因此,我可以在向用户显示之前管理推送通知吗?是否必须保留服务器上的设置?有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:1)

Apple在iOS 10中引入了Notification Service Extension。您可以使用此扩展来修改APNS发送的通知的内容。此扩展程序允许您在向用户显示之前下载图像/视频/ gif内容,或修改通知的内容,如标题,副标题,说明。但是,您将不被允许完全取消通知。

虽然如果您在Suite UserDefaults中保存通知设置(通过使用AppGroups),您可以访问Notification Service扩展中的这些设置,并且在从设置中读取后,您可以将通知的内容更改为一般通知并使用API​​将通知设置发送到外部服务器,并停止向客户端发送该特定通知。但是,是的,取消/停止特定通知的逻辑必须写在服务器上。

希望这会对你有所帮助。

答案 1 :(得分:0)

Apple通知小组有时(几乎每次)做出一些愚蠢的决定,例如:

  • 通过操作按钮和 通知内容扩展,导致庞大而不必要的 系统上已注册类别标识符的笛卡尔乘积。

  • 从iOS 10中的新UNNotificationTrigger中删除
  • 初始触发日期 或更高。

  • 创建UNPushNotificationTrigger并丢失所有其他内容
    UNNotificationTrigger用于推送的功能
    通知。

...和无法使用Notification Service Extension取消推送通知就是一个很好的例子。为什么在使用Notification Service Extension向用户显示无效或损坏的推送通知之前,不要取消它?

对此没有其他有效的解释,但开发团队患有痴呆症或疾病。

但是您可以“ 拖动系统”!是的!

构建一个无效且为空的通知内容,然后将其发送回Notification Service,以消化和消亡。 在您的UNNotificationServiceExtension内部:

public override func didReceive(
    _ request: UNNotificationRequest,
    withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
){
    self.contentHandler = contentHandler
    self.content = (request.content.mutableCopy() as? UNMutableNotificationContent)
    
    if let content = content {
        
        print("Valid FCM received")
        contentHandler(content)
    }
    else {
    
        // Invalidates the notification
        print("Invalid FCM received")
        contentHandler(UNNotificationContent())
    }
}

接过,大哥。