iOS 点击其中一个通知会清空掉通知栏的所有通知问题
2020-12-24 本文已影响0人
落夏简叶
现状
同事反应点击其中一个通知,其他通知也被清掉了,查看了一下代码是这样的:
func applicationWillResignActive(_ application: UIApplication) {
UIApplication.shared.applicationIconBadgeNumber = 0
}
这样写代码的话,其实状况是这样的,当app变成非活跃状态时会角标会被清为0(即不显示角标)。
而如果点击通知栏的其中一条通知的话,表现是这样的,和远端下发的payload相关:
- 当remote push的角标badge=0时,app不展示角标,并且通知栏点其中一个通知,其他通知还在
- 当remote push的角标badge>0时,app展示角标,并且通知栏点其中一个通知,其他通知消失
- 当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)
}
}