是否可以阻止显示远程通知?

spa*_*ron 10 apple-push-notifications ios swift

我想更好地控制向我的用户显示哪些通知,并有选择地使其中的一些静音.为了做到这一点,我UNNotificationServiceExtension在我的应用程序中实现了一个,即使我的应用程序没有运行,它也允许我拦截和修改通知.但问题是,即使我不打电话didReceive(_:withContentHandler:),系统仍会在大约30秒后显示远程通知.我怎样才能防止这种情况发生?

jo.*_*.On 15

只是为了完整性:

当应用程序不活跃(在后台或被杀死)时,Landschaft 的回答确实适用:不能抑制任何推送通知。

但是,如果应用程序在前台处于活动状态可以抑制推送通知。

不使用应用程序扩展程序,而是需要willPresentUNUserNotificationCenterDelegate.

在这里可以过滤通知,并在 completionHandler 中返回它是如何被允许呈现的:
• 不显示:completionHandler([])
• 只显示警报:completionHandler([.alert])
• 显示有声音的警报:completionHandler([.alert, .sound])
• 等等...

我们想显示本地通知,但从不显示推送通知,因为我们使用自定义 UI 在应用程序内处理它们:

func userNotificationCenter(_ center: UNUserNotificationCenter, 
                            willPresent notification: UNNotification, 
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    if response.notification.request.trigger is UNPushNotificationTrigger {
        completionHandler([])
    } else {
        completionHandler([.alert, .badge])
    }
}
Run Code Online (Sandbox Code Playgroud)


Lan*_*aft 9

从iOS 11开始,无法使用禁止显示推送通知UNNotificationServiceExtension

在WWDC 17的“ 最佳做法”和“用户通知中的新增功能”中,Teja明确声明无法执行此操作(从22:17分钟开始):

所有工作应与修改或增强此通知有关。服务扩展也无权删除此通知或阻止其显示。该通知将被发送到设备。相反,如果您想在后台启动应用程序并运行一些其他处理,则应发送一个静默通知。您还可以发送静默通知并在后台启动您的应用程序,并且您可以确定是否要提出条件通知来安排是否安排本地通知。

  • 问题是为什么不呢?在同一个视频中,他们明确表示扩展程序不能阻止显示通知。但是为什么不说为什么不呢。他们打算使用其他机制吗?在我们的案例中,我们有多个班次的员工使用同一部手机。手机可能会收到以前用户的通知。扩展程序可以过滤掉它们,但我们无法隐藏它。我们能做的最好的就是编辑。那远非理想。 (4认同)
  • 看看这个 https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_usernotifications_filtering (2认同)

Cla*_*diu 8

从 iOS 13.3 开始这是可能的。您可以阻止它显示在用户通知扩展中。您需要做的就是从 Apple 授予通知服务权利并将 apns-push-type 标头字段设置为警报。

您可以检查所有详细信息:https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_usernotifications_filtering