這篇文章主要介紹iOS消除應(yīng)用角標(biāo)的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站專注于修武企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),購物商城網(wǎng)站建設(shè)。修武網(wǎng)站建設(shè)公司,為修武等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
應(yīng)用角標(biāo)
1>何為應(yīng)用角標(biāo)
應(yīng)用角標(biāo)就是底下截圖這哥們,本初截圖是MAC上截的,手機(jī)上也是一樣的效果:
2>應(yīng)用角標(biāo)原理
應(yīng)用角標(biāo)其實(shí)是由系統(tǒng)設(shè)置的,APNs將推送的消息傳送到系統(tǒng)的時(shí)候根據(jù)上面的消息payload內(nèi)容中的badge數(shù)值來給應(yīng)用的圖標(biāo)賦值,這樣應(yīng)用的HomeScreen上顯示的圖標(biāo)右上角就會(huì)出現(xiàn)相應(yīng)的數(shù)字,不管你應(yīng)用啟動(dòng)沒啟動(dòng)都會(huì)顯示相應(yīng)的數(shù)字。所以如果是我們自己后臺(tái)來實(shí)現(xiàn)這個(gè)推送功能的話,那么就需要一套角標(biāo)邏輯來完善用戶體驗(yàn)了。
消除角標(biāo)
一般情況下,我們都會(huì)用此方法來消除角標(biāo):
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
然而這種方法會(huì)使得系統(tǒng)通知欄的歷史推送消息全部被清除。
試了下即使用 iOS 10 的消息推送框架 UserNotification 也存在這種情況。
會(huì)造成相同效果的還有
[UIApplication sharedApplication].scheduledLocalNotifications = nil;
解決方案:
- (void)applicationDidEnterBackground:(UIApplication *)application { UILocalNotification *clearEpisodeNotification = [[UILocalNotification alloc] init]; clearEpisodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; clearEpisodeNotification.timeZone = [NSTimeZone systemTimeZone]; clearEpisodeNotification.applicationIconBadgeNumber = -1; [[UIApplication sharedApplication] scheduleLocalNotification: clearEpisodeNotification]; }
在程序退到后臺(tái)后,添加該通知。
關(guān)鍵的地方在于 applicationIconBadgeNumber 是 -1。
接著你可以看到紅點(diǎn)帶著動(dòng)畫優(yōu)雅地消失了,
同時(shí),歷史推送消息被保留了下來。
不過,上述這個(gè)方式到 iOS 11 就失效了。
本來以為沒轍了,直到發(fā)現(xiàn)某個(gè)新聞客戶端仍然可以實(shí)現(xiàn)。
于是,我反編譯了該新聞客戶端。
從 applicationDidEnterBackground 入手,很快就找到了相關(guān)代碼。
那么答案就出來了,直接使用 UserNotifications 即可,猜測 badge 應(yīng)該還是 -1。
- (void)applicationDidEnterBackground:(UIApplication *)application { UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; content.badge = @(-1); UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"clearBadge" content:content trigger:nil]; [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }]; }
最后記得不要設(shè)置 title,否則會(huì)收到空白通知。
以上是“iOS消除應(yīng)用角標(biāo)的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!