国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS如何優雅地消除應用角標詳解

2019-10-21 18:43:27
字體:
來源:轉載
供稿:網友

前言

我們在完善推送功能的時候不光考慮能不能完成功遠程推送,還要注意的是用戶的體驗問題,首先最需要關注的就是應用角標問題。

應用角標

1>何為應用角標

應用角標就是底下截圖這哥們,本初截圖是MAC上截的,手機上也是一樣的效果:

ios,消除角標,應用角標,設置應用角標

2>應用角標原理

應用角標其實是由系統設置的,APNs將推送的消息傳送到系統的時候根據上面的消息payload內容中的badge數值來給應用的圖標賦值,這樣應用的HomeScreen上顯示的圖標右上角就會出現相應的數字,不管你應用啟動沒啟動都會顯示相應的數字。所以如果是我們自己后臺來實現這個推送功能的話,那么就需要一套角標邏輯來完善用戶體驗了。

消除角標

一般情況下,我們都會用此方法來消除角標:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

然而這種方法會使得系統通知欄的歷史推送消息全部被清除。

試了下即使用 iOS 10 的消息推送框架 UserNotification 也存在這種情況。

會造成相同效果的還有

[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];}

在程序退到后臺后,添加該通知。

關鍵的地方在于 applicationIconBadgeNumber 是 -1。

接著你可以看到紅點帶著動畫優雅地消失了,

同時,歷史推送消息被保留了下來。

不過,上述這個方式到 iOS 11 就失效了。

本來以為沒轍了,直到發現某個新聞客戶端仍然可以實現。

于是,我反編譯了該新聞客戶端。

從 applicationDidEnterBackground 入手,很快就找到了相關代碼。

ios,消除角標,應用角標,設置應用角標

ios,消除角標,應用角標,設置應用角標

那么答案就出來了,直接使用 UserNotifications 即可,猜測 badge 應該還是 -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) { }];}

最后記得不要設置 title,否則會收到空白通知。

參考資料:https://stackoverflow.com/questions/5375355/clear-app-badge-with-local-notifications

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普兰店市| 河曲县| 普格县| 上栗县| 余干县| 资中县| 济南市| 贡嘎县| 吴江市| 云南省| 赞皇县| 乌拉特后旗| 淳化县| 渭源县| 威信县| 蓬安县| 凌源市| 台东县| 普宁市| 沭阳县| 卓尼县| 芷江| 丽水市| 紫阳县| 榆树市| 磐安县| 洪江市| 瓮安县| 南投市| 平塘县| 中方县| 柳河县| 五台县| 腾冲县| 乐清市| 临朐县| 梁平县| 梁平县| 景德镇市| 惠来县| 玉环县|