gpt4 book ai didi

ios - 如果应用程序关闭或在后台,如何删除特定的远程通知

转载 作者:行者123 更新时间:2023-11-29 05:26:59 26 4
gpt4 key购买 nike

我的应用程序有一个聊天服务,当收到新通知时,我想清除 user1 和 user2 之间除新通知之外的通知。

当应用程序位于前台时,我可以通过调用来做到这一点:

        UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
print("count: \(notifications.count)")
for notif in notifications {
let nUserInfo = notif.request.content.userInfo
let nType = Int(nUserInfo[AnyHashable("type")] as! String)
if nType == type {
let notifId = notif.request.identifier
if notifId != notification.request.identifier {
center.removeDeliveredNotifications(withIdentifiers: [notif.request.identifier])
}
}
}

其中 type 是自定义值。当应用程序处于后台或被用户关闭时如何执行此操作。

最佳答案

您需要打开后台模式功能并选中远程通知模式。为了在后台删除通知,您需要发送一个没有警报的新通知,例如 {"aps": {"content-available": 1}, "del-id": "1234"},其中 content-available 表示(您可以在此处查看更多信息 Apple push service )

Include this key with a value of 1 to configure a background update notification. When this key is present, the system wakes up your app in the background and delivers the notification to its app delegate. For information about configuring and handling background update notifications, see Configuring a Background Update Notification.

del-id是你要删除的通知的id,你也可以使用数组。您也可以将这些信息与您的消息通知放在一起。

在您的 AppDelegate.swift 中,您需要添加此方法来删除后台通知。在您的情况下,您可以发送您不想删除的通知的 ID,并使用您的方法删除所有已发送的通知,除了您在上一个通知中发送的 ID 的通知之外。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
guard let idToDelete = userInfo["del-id"] as? String else {
completionHandler(.noData)
return
}

UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [idToDelete])
completionHandler(.noData)
}

关于ios - 如果应用程序关闭或在后台,如何删除特定的远程通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com