如何删除 UNNotificationContentExtension 显示的视图
How to remove UNNotificationContentExtension displayed view
我使用 UNNotificationContentExtension
进行了用户调查。
条件是我没有打开父应用
这是表情符号动作
if #available(iOSApplicationExtension 12.0, *) {
// API call here
self.extensionContext?.dismissNotificationContentExtension()
} else {
// Fallback on earlier versions
}
每个表情符号都有动作。当用户点击表情符号时,我会将响应发送到服务器并删除此通知。一切都会发生在扩展部分
有什么问题?
使用dismissNotificationContentExtension
通知关闭和隐藏即时。它再次出现在通知屏幕中。当用户点击表情符号按钮时,如何删除此通知。
您可以使用 UNUserNotificationCenter 和 UNNotificationContentExtension 协议来做到这一点
使用 UNUserNotificationCenter 添加操作
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization (options: [.alert, .sound]) {(_, _) in
}
let clearAction = UNNotificationAction(identifier: "sadEmoji", title: "Emoji", options: [])
let category = UNNotificationCategory(identifier: "NotifCategory", actions: [clearAction], intentIdentifiers: [], options: [])
center.setNotificationCategories([category])
在您的扩展的视图控制器中添加协议 UNNotificationContentExtension 的委托方法
func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
if response.actionIdentifier == "sadEmoji" {
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: "NotifCategory")
}
completion(.dismiss)
}
尝试一下,让我知道它有效。
这就是我的解决方案的工作原理。
缺点:删除所有已发送的相同类别的通知,而不是删除当前消息。
@IBAction func btnActionHappy(_ sender: Any) {
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
if #available(iOSApplicationExtension 12.0, *) {
self.extensionContext?.dismissNotificationContentExtension()
} else {
// Fallback on earlier versions
}
let matchingNotifications = notifications.filter({ [=10=].request.content.categoryIdentifier == "debitOverdraftNotification" })
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: matchingNotifications.map({ [=10=].request.identifier }))
print("Somethings")
}
}
您可以使用removeDeliveredNotifications(withIdentifiers:)
删除当前通知。
var notification: UNNotification?
func didReceive(_ notification: UNNotification) {
self.notification = notification
...
}
@IBAction func btnActionHappy(_ sender: Any) {
if #available(iOSApplicationExtension 12.0, *) {
extensionContext?.dismissNotificationContentExtension()
}
if let identifier = notification?.request.identifier {
let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: [identifier])
}
}
我使用 UNNotificationContentExtension
进行了用户调查。
条件是我没有打开父应用
这是表情符号动作
if #available(iOSApplicationExtension 12.0, *) {
// API call here
self.extensionContext?.dismissNotificationContentExtension()
} else {
// Fallback on earlier versions
}
每个表情符号都有动作。当用户点击表情符号时,我会将响应发送到服务器并删除此通知。一切都会发生在扩展部分
有什么问题?
使用dismissNotificationContentExtension
通知关闭和隐藏即时。它再次出现在通知屏幕中。当用户点击表情符号按钮时,如何删除此通知。
您可以使用 UNUserNotificationCenter 和 UNNotificationContentExtension 协议来做到这一点
使用 UNUserNotificationCenter 添加操作
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization (options: [.alert, .sound]) {(_, _) in
}
let clearAction = UNNotificationAction(identifier: "sadEmoji", title: "Emoji", options: [])
let category = UNNotificationCategory(identifier: "NotifCategory", actions: [clearAction], intentIdentifiers: [], options: [])
center.setNotificationCategories([category])
在您的扩展的视图控制器中添加协议 UNNotificationContentExtension 的委托方法
func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
if response.actionIdentifier == "sadEmoji" {
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: "NotifCategory")
}
completion(.dismiss)
}
尝试一下,让我知道它有效。
这就是我的解决方案的工作原理。 缺点:删除所有已发送的相同类别的通知,而不是删除当前消息。
@IBAction func btnActionHappy(_ sender: Any) {
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
if #available(iOSApplicationExtension 12.0, *) {
self.extensionContext?.dismissNotificationContentExtension()
} else {
// Fallback on earlier versions
}
let matchingNotifications = notifications.filter({ [=10=].request.content.categoryIdentifier == "debitOverdraftNotification" })
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: matchingNotifications.map({ [=10=].request.identifier }))
print("Somethings")
}
}
您可以使用removeDeliveredNotifications(withIdentifiers:)
删除当前通知。
var notification: UNNotification?
func didReceive(_ notification: UNNotification) {
self.notification = notification
...
}
@IBAction func btnActionHappy(_ sender: Any) {
if #available(iOSApplicationExtension 12.0, *) {
extensionContext?.dismissNotificationContentExtension()
}
if let identifier = notification?.request.identifier {
let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: [identifier])
}
}