關(guān)于iOS的推送角標(biāo)雄妥,實(shí)在是比較坑爹
對(duì)于apns來講,如果app收到了多條推送,推送通知欄會(huì)有多條消息镊辕,當(dāng)用戶啟動(dòng)app,我們最常用的方式就是調(diào)用下面的方法清空角標(biāo) :
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
在進(jìn)入后臺(tái)一看蚁袭,嗯征懈,確實(shí)清掉了角標(biāo)
拉開通知中心一看,尼瑪揩悄,推送呢卖哎? 一條也沒了。。亏娜。
那么如何在不影響通知欄消息的基礎(chǔ)上清掉角標(biāo)呢焕窝?
變化規(guī)律
- 本地推送UILocalNotification的applicationIconBadgeNumber屬性只會(huì)影響角標(biāo)的顯示,不會(huì)影響通知欄的通知處理维贺。
- 當(dāng)applicationIconBadgeNumber>0時(shí)它掂,角標(biāo)會(huì)隨applicationIconBadgeNumber而變化。
- 當(dāng)applicationIconBadgeNumber=0時(shí)溯泣,角標(biāo)維持推送前狀態(tài)不變虐秋。
- 當(dāng)applicationIconBadgeNumber<0時(shí),角標(biāo)置0不顯示垃沦。
- 遠(yuǎn)程推送的badge字段客给,只會(huì)影響角標(biāo)的顯示,不會(huì)影響通知欄的通知處理栏尚。
- 當(dāng)badge>0時(shí)起愈,角標(biāo)會(huì)隨badge而變化。
- 當(dāng)badge=0時(shí)译仗,角標(biāo)維持不變抬虽。
- 當(dāng)badge<0時(shí),角標(biāo)維持不變纵菌。
- UIApplication的applicationIconBadgeNumber屬性既會(huì)影響角標(biāo)的顯示阐污,又會(huì)影響通知欄通知的處理。
- 當(dāng)applicationIconBadgeNumber>0時(shí)咱圆,角標(biāo)會(huì)隨之變化笛辟,通知欄通知不變。
- 當(dāng)applicationIconBadgeNumber=0時(shí)序苏,角標(biāo)變?yōu)?不顯示手幢,通知欄通知清空。
- 當(dāng)applicationIconBadgeNumber<0時(shí)忱详,角標(biāo)變?yōu)?不顯示围来,通知欄通知清空。
這時(shí)一個(gè)優(yōu)雅的方案就出現(xiàn)了:
- (void)applicationDidEnterBackground:(UIApplication *)application {
//清空徽標(biāo) - 會(huì)保留通知欄信息
if (application.applicationIconBadgeNumber <= 0) {
return;
}
UILocalNotification *local = [[UILocalNotification alloc] init];
local.fireDate = [NSDate date];
local.applicationIconBadgeNumber = -1; // 置空
[application scheduleLocalNotification:local];
}
如此以來 匈睁,再也不用擔(dān)心通知中心被清空啦~~~