spa*_*ron 10 apple-push-notifications ios swift
我想更好地控制向我的用户显示哪些通知,并有选择地使其中的一些静音.为了做到这一点,我UNNotificationServiceExtension在我的应用程序中实现了一个,即使我的应用程序没有运行,它也允许我拦截和修改通知.但问题是,即使我不打电话didReceive(_:withContentHandler:),系统仍会在大约30秒后显示远程通知.我怎样才能防止这种情况发生?
jo.*_*.On 15
只是为了完整性:
当应用程序不活跃(在后台或被杀死)时,Landschaft 的回答确实适用:不能抑制任何推送通知。
但是,如果应用程序在前台处于活动状态,则可以抑制推送通知。
不使用应用程序扩展程序,而是需要willPresent从UNUserNotificationCenterDelegate.
在这里可以过滤通知,并在 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)
从iOS 11开始,无法使用禁止显示推送通知UNNotificationServiceExtension。
在WWDC 17的“ 最佳做法”和“用户通知中的新增功能”中,Teja明确声明无法执行此操作(从22:17分钟开始):
所有工作应与修改或增强此通知有关。服务扩展也无权删除此通知或阻止其显示。该通知将被发送到设备。相反,如果您想在后台启动应用程序并运行一些其他处理,则应发送一个静默通知。您还可以发送静默通知并在后台启动您的应用程序,并且您可以确定是否要提出条件通知来安排是否安排本地通知。
从 iOS 13.3 开始这是可能的。您可以阻止它显示在用户通知扩展中。您需要做的就是从 Apple 授予通知服务权利并将 apns-push-type 标头字段设置为警报。
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |