Ios 显示之前的Swift取消推送通知

Ios 显示之前的Swift取消推送通知,ios,swift,apple-push-notifications,Ios,Swift,Apple Push Notifications,我用IOS 10.2的Swift开发了一个应用程序。我使用来自服务器的Apple推送通知。在这个应用中,我使用UserDefaults进行用户设置。我希望,如果用户希望接收当天的新闻,我的应用程序允许显示新闻类别的推送通知。因此,我可以在向用户显示之前管理推送通知吗?我必须保留服务器上的设置吗?有什么建议吗?谢谢。苹果在iOS 10中引入了通知服务扩展。您可以使用此扩展来修改APN发送的通知的内容。此扩展允许您在向用户显示或修改通知的内容(如标题、副标题、说明)之前下载图像/视频/gif内容。但

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

苹果在iOS 10中引入了通知服务扩展。您可以使用此扩展来修改APN发送的通知的内容。此扩展允许您在向用户显示或修改通知的内容(如标题、副标题、说明)之前下载图像/视频/gif内容。但是,您不能完全取消通知

尽管如果使用AppGroups将通知设置保存在Suite UserDefaults中,您可以访问Notification Service extension中的这些设置,在读取这些设置后,您可以将通知内容更改为常规通知,并使用API将通知设置发送到外部服务器,并停止将特定通知发送到客户端。但是,必须在服务器上编写取消/停止特定通知的逻辑


希望这对您有所帮助。

苹果通知团队有时几乎每次都会做出一些非常愚蠢的决定,例如:

高度附加的类别标识符,带有操作按钮和 通知内容扩展,导致大量不必要的 系统上已注册类别标识符的笛卡尔乘积

从iOS 10中的新UNNotificationTrigger删除初始启动日期 或更高

正在创建UNPushNotificationTrigger并丢失所有其他触发器 推送的UNNotificationTrigger功能 通知

…而不能使用notification Service Extension取消推送通知就是一个很好的例子。为什么不在使用notification Service Extension向用户显示无效或损坏的推送通知之前取消该通知

除了开发团队痴呆症或恶意之外,没有其他有效的解释

但是你可以控制这个系统!是的

构建一个无效且空的通知内容,并将其发送回通知服务,以进行消化并阻塞。 在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())
    }
}

拿着这个,老大哥。

如果用户禁用了“您的设置”页面中的通知,您想阻止这些通知出现。也许您可以从共享UIC应用程序中使用unregisterForRemoteNotifications方法?这将阻止通知出现,即使服务器发送通知。您可以在ApplicationIDFinishLaunching方法中添加逻辑,以检查是否应该注册用户