UNUserNotificationCenter.current()。getDeliveredNotifications只返回一个空数组

时间:2018-01-08 07:26:40

标签: ios swift xcode

基本上,我只是尝试打印我的应用已发送的通知,但执行以下操作:

UNUserNotificationCenter.current().getDeliveredNotifications { (notifications) in
    print(notifications)
}

只是在Xcode控制台中显示一个空数组,即使通知中心包含多个已发送的通知。 (print(notifications.count)返回0)

我可以使用getPendingNotificationRequests成功抓取已安排但尚未投放的通知,更新通知,甚至使用removePendingNotificationRequests(withIdentifiers:)删除通知。但任何访问/修改/删除任何已交付的东西的尝试都不起作用。

我在这里错过了一些简单的东西吗? iOS 10+访问交付的通知的方式最近有什么变化吗?

2 个答案:

答案 0 :(得分:4)

我确实遇到了与getDeliveredNotification相同的问题,通知数组始终为空。

所以,我意识到我将[UIApplication sharedApplication].applicationBadgeNumber设置为0,清除了来自通知中心的所有远程通知。

现在,只有在收到所有待处理通知后,我才会将applicationBadgeNumber设置为0

答案 1 :(得分:0)

当我在UNNotificationServiceExtension上使用它时它是空的,事实证明我需要使用信号量,以防止扩展返回0个结果:

        let semaphore = DispatchSemaphore(value: 0)
        let center = UNUserNotificationCenter.current()
        center.getDeliveredNotifications { notifications in
            defer {
                semaphore.signal()
            }

            let relatedNotificationIdentifiers = notifications.filter { notification in
                notification.request.content.userInfo["callId"] as? String == callId
                    && notification.request.identifier != request.identifier
            }.map(\.request.identifier)

            // This call is async
            center.removeDeliveredNotifications(withIdentifiers: relatedNotificationIdentifiers)

            // ...so this call needs to be done with a slight delay because otherwise
            // it will be killed before it is done removing the notifications
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
                contentHandler(bestAttemptContent)
            }
        }

        semaphore.wait()

此外,最后还需要等待一些时间来执行removeDeliveredNotifications,该请求在后台也是异步的。

apns-collapse-id可以帮助减少传入的APNS消息。