我正在使用UNNotificationServiceExtension
将图像添加到 iOS APNS 通知。它运行良好,只是即使应用程序处于活动状态(在前台)也会显示通知。当应用程序处于活动状态时,我想使用 toast 处理通知,而不是在活动应用程序的顶部显示标准 iOS 通知。
问:有没有办法从通知服务扩展中检测应用程序的状态,并在应用程序处于活动状态时阻止通知显示?
我正在使用UNNotificationServiceExtension
将图像添加到 iOS APNS 通知。它运行良好,只是即使应用程序处于活动状态(在前台)也会显示通知。当应用程序处于活动状态时,我想使用 toast 处理通知,而不是在活动应用程序的顶部显示标准 iOS 通知。
问:有没有办法从通知服务扩展中检测应用程序的状态,并在应用程序处于活动状态时阻止通知显示?
根据 Apple 的文档,默认情况下应用程序处于活动状态时不应出现通知。
如果通知到达时您的应用在前台,共享用户通知中心会调用此方法将通知直接发送到您的应用。如果你实现了这个方法,你可以采取任何必要的行动来处理通知和更新你的应用程序。完成后,调用 completionHandler 块并指定您希望系统如何提醒用户(如果有的话)。
是否使用通知服务扩展并不重要 - 通知始终由应用程序处理,但可以先使用扩展来修改它。
试试这段代码(事实上,由于在应用程序处于活动状态时会出现通知,因此您可能在某处实现了此方法 - 如果您不需要它,您可以将其删除)。
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// Perform additional handling of the notification, if needed.
completionHandler([])
}
completionHandler(.newData)
内部调用application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
是在应用程序内显示横幅的原因。你可以摆脱它。
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// completionHandler(.newData) // <- Comment it out
}