UNUserNotificationCenterDelegate
协议中有两种与通知传递有关的方法。但是两者似乎都不能满足我的需求。
-(void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
在通知被传递之前称为。如果您要求通知中心给您所有已传递的通知,则新的通知将丢失。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void(^)(void))completionHandler
被称为仅当用户提供所述通知响应一些。也有不错的老- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
,但它已被弃用。
那么,它甚至可以在通知中心确实添加了一个通知后,被通知的权利?
答案 0 :(得分:2)
您可以添加一个Notification Content Extension,此扩展名将在收到推送通知时被调用,其目的是允许该扩展名在向用户展示之前扩展通知(wwdc session on advanced notifications)。 / p>
这样,当通知到达时,您就有机会执行一些代码。您不必实际修改通知。
请注意,代码将在应用扩展的上下文中执行,因此,如果您想在应用中执行某些操作,则可能需要做更多的工作。
答案 1 :(得分:1)
您想要的是什么
从通知中心删除通知。但这不是 在那里
如果您要禁止显示或禁止显示推送通知。那么这是不可能的,从iOS 11.0开始,为什么苹果没有提及。
不过,如果你想只删除推送,UNUserNotificationCenter
具有可供您使用以下方法:
// Notification requests that are waiting for their trigger to fire
open func getPendingNotificationRequests(completionHandler: @escaping ([UNNotificationRequest]) -> Void)
open func removePendingNotificationRequests(withIdentifiers identifiers: [String])
open func removeAllPendingNotificationRequests()
// Notifications that have been delivered and remain in Notification Center. Notifications triggered by location cannot be retrieved, but can be removed.
open func getDeliveredNotifications(completionHandler: @escaping ([UNNotification]) -> Void)
open func removeDeliveredNotifications(withIdentifiers identifiers: [String])
open func removeAllDeliveredNotifications()