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)
        }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容