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

现状

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

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 点击其中一个通知会清空掉通知栏的所有通知问题)