是否有可能检测到瞬间远程通知已添加到通知中心?

时间:2019-01-30 17:15:08

标签: ios objective-c apple-push-notifications unusernotificationcenter

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,但它已被弃用。

那么,它甚至可以在通知中心确实添加了一个通知后,被通知的权利?

2 个答案:

答案 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()