本地推送UILocalNotification的applicationIconBadgeNumber影響到角標(biāo)的顯示,不出對通知欄的消息造成影響
????1)當(dāng)applicationIconBadgeNumber>0時,角標(biāo)會隨applicationIconBadgeNumber而變化。
? ? 2)當(dāng)applicationIconBadgeNumber=0時,角標(biāo)維持推送前狀態(tài)不變。
? ? 3)當(dāng)applicationIconBadgeNumber<0時,角標(biāo)置0不顯示。
2.遠(yuǎn)程推送的badge字段,只會影響角標(biāo)的顯示,不會影響通知欄的通知處理。
? ? 1)當(dāng)badge>0時,角標(biāo)會隨badge而變化。
? ? 2)當(dāng)badge=0時,角標(biāo)維持不變。
? ? 3)當(dāng)badge<0時,角標(biāo)維持不變。
3.UIApplication的applicationIconBadgeNumber屬性既會影響角標(biāo)的顯示,又會影響通知欄通知的處理。
????1)當(dāng)applicationIconBadgeNumber>0時,角標(biāo)會隨之變化,通知欄通知不變。
? ? 2)當(dāng)applicationIconBadgeNumber=0時,角標(biāo)變?yōu)?不顯示,通知欄通知清空。
? ? 3)當(dāng)applicationIconBadgeNumber<0時,角標(biāo)變?yōu)?不顯示,通知欄通知清空。
問題來了,如何處理3中提到的applicationIconBadgeNumber,達(dá)到APP Icon上的角標(biāo)消息在APP從前臺切刀后臺后,消息提示消失,而不影響通知欄的消息呢?
在duziteng124的一篇博文(地址:http://blog.csdn.net/duziteng124/article/details/50538838)中經(jīng)過詳細(xì)討論,得出如下結(jié)論:
一旦將程序的角標(biāo)從非零置為零,就會清空通知欄的所有通知。如果想清除角標(biāo)但不清空通知欄,有如下方法。
? ? ? 1.發(fā)送一條遠(yuǎn)程推送,推送內(nèi)容只有badge,并將badge的值設(shè)為負(fù)數(shù)。此時程序角標(biāo)會消失但是通知欄的推送消息不清除。
? ? ? 2.同樣的方法,發(fā)送一條本地推送。
本人采用的是方法2,發(fā)送一條本地推,但是經(jīng)過測試,對于iOS 11.x 系統(tǒng)無效,但是通過嘗試發(fā)現(xiàn)iOS 11.x 系統(tǒng)只需要將applicationIconBadgeNumber 設(shè)為-1既可以清楚icon上的消息提示,同時不清楚通知欄的消息,具體代碼如下:
- (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ā)送時間,單位秒 ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:0.5]; ? ?
? ? ????????????????????//收到通知時App icon的角標(biāo)? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?localNotification.applicationIconBadgeNumber = -1; ? ?
? ? ? ? ? ? ? ? ? ? ? ?// 3.發(fā)送通知(?? : 根據(jù)項(xiàng)目需要使用) ? ? ?
????????????????????????? [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; ? ?
????????????????? } ? ?
????} ? ?
????????[JPUSHService setBadge:0];
}
本文引用了簡書作者tinghua的的文章“iOS推送角標(biāo)與通知欄變化總結(jié)”的文章,附上地址文章地址:http://www.itdecent.cn/p/4a835578ea9a
同時引用了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), 也就是說在iOS 11 以下的系統(tǒng)duziteng124方法有效,iOS11及以上的系統(tǒng)需要直接設(shè)置[[UIApplication sharedApplication] setApplicationIconBadgeNumber:-1];? 這個或許是系統(tǒng)問題造成的bug,后續(xù)系統(tǒng)升級會不會有類似問題,需要再做 驗(yàn)證。僅供參考!