iOS 點(diǎn)擊其中一個(gè)通知會清空掉通知欄的所有通知問題

現(xiàn)狀

同事反應(yīng)點(diǎn)擊其中一個(gè)通知,其他通知也被清掉了,查看了一下代碼是這樣的:

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

這樣寫代碼的話,其實(shí)狀況是這樣的,當(dāng)app變成非活躍狀態(tài)時(shí)會角標(biāo)會被清為0(即不顯示角標(biāo))。
而如果點(diǎn)擊通知欄的其中一條通知的話,表現(xiàn)是這樣的,和遠(yuǎn)端下發(fā)的payload相關(guān):

  1. 當(dāng)remote push的角標(biāo)badge=0時(shí),app不展示角標(biāo),并且通知欄點(diǎn)其中一個(gè)通知,其他通知還在
  2. 當(dāng)remote push的角標(biāo)badge>0時(shí),app展示角標(biāo),并且通知欄點(diǎn)其中一個(gè)通知,其他通知消失
  3. 當(dāng)remote push的角標(biāo)badge<0時(shí),app不展示角標(biāo),并且通知欄點(diǎn)其中一個(gè)通知,其他通知消失

這里說的remote push的角標(biāo)badge指的是這個(gè):

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

預(yù)期

但是運(yùn)營的預(yù)期其實(shí)是,無論后端下發(fā)的角標(biāo)badge是啥,點(diǎn)擊其中一個(gè)通知,也不要讓其他通知消失。那就需要修改一下代碼:

func applicationWillResignActive(_ application: UIApplication) {
        //applicationIconBadgeNumber 直接設(shè)置為0,不僅角標(biāo)會消失,多條通知的話,點(diǎn)其中一條通知,其他的通知也消失了。設(shè)置為-1,只會清除角標(biāo),不影響其他的通知
        if #available(iOS 11.0, *) {
            UIApplication.shared.applicationIconBadgeNumber = -1
        } else {
            // 親測iOS11以下,設(shè)置上面那句話是不行的
            let clearEpisodeNotification = UILocalNotification()
            clearEpisodeNotification.fireDate = Date(timeIntervalSinceNow: 1)
            clearEpisodeNotification.applicationIconBadgeNumber = -1
            UIApplication.shared.scheduleLocalNotification(clearEpisodeNotification)
        }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容