应用程序可以决定在收到推送通知时根据用户字典显示警报吗?

Posted

技术标签:

【中文标题】应用程序可以决定在收到推送通知时根据用户字典显示警报吗?【英文标题】:can app decide to show alert based on user dictionary when receiving a push notification? 【发布时间】:2011-09-16 03:36:58 【问题描述】:

当您收到推送通知时,是否有可能让您的应用程序决定是否显示指示您收到推送通知的 AlertView?

或者操作系统只是自动控制这个而不让你对此有任何控制?

我想收到一些通知给我的应用程序,然后让我的应用程序根据通过didReceiveRemoteNotification 传入的字典中的一些数据来决定是否显示警报或某些用户可见通知?这有可能以任何方式吗?

【问题讨论】:

【参考方案1】:

您无法控制UIAlertView 的外观关于通过您的应用程序推送。但可能是服务器可以:尝试发送没有 alert 信息的推送通知。

请告诉我,它是如何工作的。 TY

【讨论】:

【参考方案2】:

距离提出这个问题已有 10 年,还有 17 天。现在,您可以,因为 ios 10.0`。 ?

我刚刚给how to get the userInfo in other delegate methods写了一个答案。在您的具体情况下,您希望实现userNotificationCenter(_:willPresent:withCompletionHandler:)。

使用notification.request.content.userInfo 在该委托方法中获取userInfo 字典。如果您在传递给 APNs 的 data 有效负载中设置了诸如 foregroundNotification: true 之类的键/值,您的设备可以在此处看到。

你所要做的就是:

let userInfo = notification.request.content.userInfo
if let foregroundNotification = userInfo["foregroundNotification"] as? Bool, foregroundNotification == true 
    completionHandler([.banner])


更高级的处理(声音,支持 iOS 10+,包括弃用)

请记住,alert 在 iOS 14 中已被弃用,您可能需要添加 iOS 版本检查、声音、列表。

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
    var options: UNNotificationPresentationOptions = []
    let userInfo = notification.request.content.userInfo
    
    if let foregroundSound = userInfo["foregroundSound"] as? Bool, foregroundSound == true 
        options.insert(.sound)
    
    
    if let foregroundBadge = userInfo["foregroundBadge"] as? Bool, foregroundBadge == true 
        options.insert(.badge)
    
    
    if let foregroundList = userInfo["foregroundList"] as? Bool, foregroundList == true 
        if #available(iOS 14.0, *) 
            options.insert(.list)
        
    
    
    if let foregroundNotification = userInfo["foregroundNotification"] as? Bool, foregroundNotification == true 
        if #available(iOS 14.0, *) 
            options.insert(.banner)
         else 
            options.insert(.alert)
        
    
    
    completionHandler(options)

【讨论】:

以上是关于应用程序可以决定在收到推送通知时根据用户字典显示警报吗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 根据用户的位置显示推送通知

iOS极光推送设置别名

当应用收到通知时,IOS 向 HTTP 服务器发送请求

打开 PWA 时收到推送事件时不显示通知

当应用程序处于终止状态时,iOS 静默推送通知不会收到

如何检查用户之前是不是在 iOS 中查看过推送通知权限警报视图?