本地推送UILocalNotification的applicationIconBadgeNumber影響到角標(biāo)的顯示导饲,不出對(duì)通知欄的消息造成影響
????1)當(dāng)applicationIconBadgeNumber>0時(shí),角標(biāo)會(huì)隨applicationIconBadgeNumber而變化竹观。
? ? 2)當(dāng)applicationIconBadgeNumber=0時(shí),角標(biāo)維持推送前狀態(tài)不變羹膳。
? ? 3)當(dāng)applicationIconBadgeNumber<0時(shí)歹嘹,角標(biāo)置0不顯示届慈。
2.遠(yuǎn)程推送的badge字段,只會(huì)影響角標(biāo)的顯示憔辫,不會(huì)影響通知欄的通知處理趣些。
? ? 1)當(dāng)badge>0時(shí),角標(biāo)會(huì)隨badge而變化贰您。
? ? 2)當(dāng)badge=0時(shí)坏平,角標(biāo)維持不變。
? ? 3)當(dāng)badge<0時(shí)锦亦,角標(biāo)維持不變舶替。
3.UIApplication的applicationIconBadgeNumber屬性既會(huì)影響角標(biāo)的顯示,又會(huì)影響通知欄通知的處理杠园。
????1)當(dāng)applicationIconBadgeNumber>0時(shí)顾瞪,角標(biāo)會(huì)隨之變化,通知欄通知不變抛蚁。
? ? 2)當(dāng)applicationIconBadgeNumber=0時(shí)陈醒,角標(biāo)變?yōu)?不顯示,通知欄通知清空瞧甩。
? ? 3)當(dāng)applicationIconBadgeNumber<0時(shí)钉跷,角標(biāo)變?yōu)?不顯示,通知欄通知清空肚逸。
問(wèn)題來(lái)了尘应,如何處理3中提到的applicationIconBadgeNumber惶凝,達(dá)到APP Icon上的角標(biāo)消息在APP從前臺(tái)切刀后臺(tái)后,消息提示消失犬钢,而不影響通知欄的消息呢苍鲜?
在duziteng124的一篇博文(地址:http://blog.csdn.net/duziteng124/article/details/50538838)中經(jīng)過(guò)詳細(xì)討論,得出如下結(jié)論:
一旦將程序的角標(biāo)從非零置為零玷犹,就會(huì)清空通知欄的所有通知混滔。如果想清除角標(biāo)但不清空通知欄,有如下方法歹颓。
? ? ? 1.發(fā)送一條遠(yuǎn)程推送坯屿,推送內(nèi)容只有badge,并將badge的值設(shè)為負(fù)數(shù)巍扛。此時(shí)程序角標(biāo)會(huì)消失但是通知欄的推送消息不清除领跛。
? ? ? 2.同樣的方法,發(fā)送一條本地推送撤奸。
本人采用的是方法2吠昭,發(fā)送一條本地推,但是經(jīng)過(guò)測(cè)試胧瓜,對(duì)于iOS 11.x 系統(tǒng)無(wú)效矢棚,但是通過(guò)嘗試發(fā)現(xiàn)iOS 11.x 系統(tǒng)只需要將applicationIconBadgeNumber 設(shè)為-1既可以清楚icon上的消息提示,同時(shí)不清楚通知欄的消息府喳,具體代碼如下:
- (void)applicationWillResignActive:(UIApplication *)application {
? ????? if ([UIApplication sharedApplication].applicationIconBadgeNumber) { ? ?
?????????????? if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0) { ? ? ? ? ? ? ????????????????????????[[UIApplication sharedApplication] setApplicationIconBadgeNumber:-1]; ? ? ?
? ? ? ? ? ? ? ? } else { ? ? ? ? ?
????????????????????? UILocalNotification *localNotification = [[UILocalNotification alloc] init]; ? ? ?
? ????????????????????// 設(shè)置通知的發(fā)送時(shí)間,單位秒 ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:0.5]; ? ?
? ? ????????????????????//收到通知時(shí)App icon的角標(biāo)? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?localNotification.applicationIconBadgeNumber = -1; ? ?
? ? ? ? ? ? ? ? ? ? ? ?// 3.發(fā)送通知(?? : 根據(jù)項(xiàng)目需要使用) ? ? ?
????????????????????????? [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; ? ?
????????????????? } ? ?
????} ? ?
????????[JPUSHService setBadge:0];
}
本文引用了簡(jiǎn)書(shū)作者tinghua的的文章“iOS推送角標(biāo)與通知欄變化總結(jié)”的文章蒲肋,附上地址文章地址:http://www.reibang.com/p/4a835578ea9a
同時(shí)引用了duziteng124的一篇博文(地址:http://blog.csdn.net/duziteng124/article/details/50538838)中的討論結(jié)論
驗(yàn)證的系統(tǒng)(機(jī)型)如下:iOS8.1.1(iPhone 5s),iOS 9.3.4(iPhone 4s)钝满, iOS 10.2(iPhone 6sP)兜粘, iOS 11.1.1(iPHone 6), iOS11.2(iPhone 8)弯蚜, 也就是說(shuō)在iOS 11 以下的系統(tǒng)duziteng124方法有效妹沙,iOS11及以上的系統(tǒng)需要直接設(shè)置[[UIApplication sharedApplication] setApplicationIconBadgeNumber:-1];? 這個(gè)或許是系統(tǒng)問(wèn)題造成的bug,后續(xù)系統(tǒng)升級(jí)會(huì)不會(huì)有類(lèi)似問(wèn)題,需要再做 驗(yàn)證熟吏。僅供參考!