美文网首页iOS经验总结
iOS 点击其中一个通知会清空掉通知栏的所有通知问题

iOS 点击其中一个通知会清空掉通知栏的所有通知问题

作者: 落夏简叶 | 来源:发表于2020-12-24 17:22 被阅读0次

    现状

    同事反应点击其中一个通知,其他通知也被清掉了,查看了一下代码是这样的:

    func applicationWillResignActive(_ application: UIApplication) {
            UIApplication.shared.applicationIconBadgeNumber = 0
    }
    

    这样写代码的话,其实状况是这样的,当app变成非活跃状态时会角标会被清为0(即不显示角标)。
    而如果点击通知栏的其中一条通知的话,表现是这样的,和远端下发的payload相关:

    1. 当remote push的角标badge=0时,app不展示角标,并且通知栏点其中一个通知,其他通知还在
    2. 当remote push的角标badge>0时,app展示角标,并且通知栏点其中一个通知,其他通知消失
    3. 当remote push的角标badge<0时,app不展示角标,并且通知栏点其中一个通知,其他通知消失

    这里说的remote push的角标badge指的是这个:

    {"aps":{"alert":"Testing.. (0)","badge":1,"sound":"default"}}
    

    预期

    但是运营的预期其实是,无论后端下发的角标badge是啥,点击其中一个通知,也不要让其他通知消失。那就需要修改一下代码:

    func applicationWillResignActive(_ application: UIApplication) {
            //applicationIconBadgeNumber 直接设置为0,不仅角标会消失,多条通知的话,点其中一条通知,其他的通知也消失了。设置为-1,只会清除角标,不影响其他的通知
            if #available(iOS 11.0, *) {
                UIApplication.shared.applicationIconBadgeNumber = -1
            } else {
                // 亲测iOS11以下,设置上面那句话是不行的
                let clearEpisodeNotification = UILocalNotification()
                clearEpisodeNotification.fireDate = Date(timeIntervalSinceNow: 1)
                clearEpisodeNotification.applicationIconBadgeNumber = -1
                UIApplication.shared.scheduleLocalNotification(clearEpisodeNotification)
            }
    }
    

    相关文章

      网友评论

        本文标题:iOS 点击其中一个通知会清空掉通知栏的所有通知问题

        本文链接:https://www.haomeiwen.com/subject/fvwmnktx.html