在 NotificationService 中禁用从 didReceive 接收推送

Posted

技术标签:

【中文标题】在 NotificationService 中禁用从 didReceive 接收推送【英文标题】:disable receive push from didReceive in NotificationService 【发布时间】:2019-05-12 14:06:58 【问题描述】:

我想在特殊情况下禁用向用户发送推送通知。 我将我的第一个 Push 保存在 userDefault 中,第二个我检查它是否相同。 当我调试它进入返回而不是继续,但我仍然收到推送通知。从 firebase api 发送的推送

 override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) 

    if let dict = request.content.userInfo["aps"] as? Dictionary<AnyHashable, AnyHashable> 
        if let did = dict["did"] as? String 
            if let message = dict["message"] as? String 
                let currentPush = did + "_" + message

                if let lastPush = UserDefaults.standard.string(forKey: "lastPush"), currentPush == lastPush 
                    print("enter")
                    return
                
                else 
                    UserDefaults.standard.setValue(currentPush, forKey: "lastPush")
                
            
        
    

【问题讨论】:

这是服务决定是否发送推送。您可以调用 Web API 来告诉服务我不想再收到某个推送。 【参考方案1】:

与开发者有some control 是否显示通知的android 不同,ios 不提供该功能。将始终显示发送的通知。因此,您的 return 将不起作用。

您可以做的一个解决方法是发送silent push notification,处理数据,如果它符合您的逻辑,然后创建一个本地通知并显示它。

【讨论】:

但您随问题发布的代码并未显示该目的。它说您不想显示重复的通知。如果您甚至不想从服务器发送重复通知,那么逻辑需要在服务器端。 对不起,我删除了我的评论,没有很好地描述它。解决方法非常适合这种情况

以上是关于在 NotificationService 中禁用从 didReceive 接收推送的主要内容,如果未能解决你的问题,请参考以下文章

Android AlarmManger+service设置通知栏定时推送,清理后失效

视频相关代码中遇到的一些异常记录

通知中的媒体播放器控件

Notification之适配总结

通知彩色操作按钮 Android 10

丰富的推送通知不适用于 IOS 中的 FCM