功能概述
角标一般指应用图标右上角的红点或数字提示,用于直观提醒用户处理未读消息,例如社交软件未读聊天消息、电商应用待处理订单等。本文主要介绍各厂商通道对自定义角标的支持情况以及如何实现该功能。
效果示例

厂商通道支持说明
由于不同手机系统的限制,仅部分厂商通道支持自定义角标功能,支持情况如下:
设备类型 | 是否支持自定义角标 |
iOS | 支持 |
华为 | 支持 |
荣耀 | 开发中 |
小米 | 跟随系统,默认感知通知栏数量 |
vivo | 跟随系统,默认感知通知栏数量 |
OPPO | 跟随系统,支持红点显示 |
魅族 | 跟随系统,支持红点显示 |
FCM | 跟随系统 |
接入说明
支持厂商
华为。
配置方法
控制台配置华为角标参数为应用的启动类,例如 “com.tencent.qcloud.tim.demo.SplashActivity”。组件会自动解析和更新角标;反之不会更新角标。


默认情况下,当 App 进入后台后,IMSDK 会将当前 IM 未读消息总数设置为角标。如果 App 接入了离线推送,当接收到新的离线推送时,App 角标会在基准角标(默认是 IM 未读消息总数,如果自定义了角标,则以自定义角标为准)的基础上加 1 逐条递增。
配置方法
如果想自定义角标,可按照如下步骤设置:
1. App 调用 - (void)setAPNSListener:(id<V2TIMAPNSListener>)apnsListener 接口设置监听。
2. App 实现 - (uint32_t)onSetAPPUnreadCount 接口,并在内部返回需要自定义的角标。
// 1. 设置监听- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// 监听推送[V2TIMManager.sharedInstance setAPNSListener:self];// 监听会话的未读数[[V2TIMManager sharedInstance] setConversationListener:self];return YES;}// 2. 未读数发生变化后保存未读数- (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount {self.unreadNumber = totalUnreadCount;}// 3. App 推到后台后上报自定义未读数/** 程序进后台后,自定义 App 的未读数,如果不处理,App 未读数默认为所有会话未读数之和* <pre>** - (uint32_t)onSetAPPUnreadCount {* return 100; // 自定义未读数* }** </pre>*/- (uint32_t)onSetAPPUnreadCount {// 1. 获取自定义的角标uint32_t customBadgeNumber = ...// 2. 加上 IM 的消息未读数customBadgeNumber += self.unreadNumber;// 3. 通过 IMSDK 上报给 IM 服务器return customBadgeNumber;}
import ImSDK_Plusclass AppDelegate: UIResponder, UIApplicationDelegate, V2TIMAPNSListener, V2TIMConversationListener {// 存储未读数var unreadNumber: UInt64 = 0// 1. 设置监听func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {// 监听推送V2TIMManager.sharedInstance()?.setAPNSListener(self)// 监听会话的未读数V2TIMManager.sharedInstance()?.setConversationListener(self)return true}// 2. 未读数发生变化后保存未读数func onTotalUnreadMessageCountChanged(_ totalUnreadCount: UInt64) {self.unreadNumber = totalUnreadCount}// 3. App 推到后台后上报自定义未读数/// 程序进后台后,自定义 App 的未读数,如果不处理,App 未读数默认为所有会话未读数之和/// - Returns: 自定义未读数func onSetAPPUnreadCount() -> UInt32 {// 1. 获取自定义的角标var customBadgeNumber: UInt32 = 0 // ... 替换为您的自定义逻辑// 2. 加上 IM 的消息未读数customBadgeNumber += UInt32(self.unreadNumber)// 3. 通过 IMSDK 上报给 IM 服务器return customBadgeNumber}}
请参见 Android 和 iOS 进行配置即可。调用的方法均在 Flutter 版本的 IM SDK 中有同名方法。
支持厂商
华为。
配置方法
步骤1. 控制台配置华为角标参数为应用的启动类。
说明:
uniapp 应用的启动类为
io.dcloud.PandoraEntry。

步骤2. 监听 Chat SDK 未读总数变化自行设置角标数量。
1. 通过 TOTAL_UNREAD_MESSAGE_COUNT_UPDATED 监听 Chat SDK 会话未读总数更新。
2. 通过
plus.runtime.setBadgeNumber 设置角标数量。let onTotalUnreadMessageCountUpdated = function(event) {const unreadCount = event.data; // 当前会话的未读总数plus.runtime.setBadgeNumber(unreadCount); // 设置角标数量};chat.on(TencentCloudChat.EVENT.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED, onTotalUnreadMessageCountUpdated);
支持厂商
华为。
获取应用启动类
从 MyReactNativeApp/android/app/src/main/AndroidManifest.xml 中获取启动类名。如图所示:
说明:
应用的启动类 = “包名” + 启动类名。

包名 | “com.tencent.qcloud.tim.demo” |
启动类名 | “MainActivity” |
应用的启动类 | “com.tencent.qcloud.tim.demo.MainActivity ” |
配置方法
控制台配置华为角标参数为应用的启动类,例如 “com.tencent.qcloud.tim.demo.MainActivity ”。组件会自动解析和更新角标,反之不会更新角标。

支持厂商:
华为、iOS。
自定义角标步骤:
1. 调用 registerPush 注册推送服务。
2. 监听业务角标的变化,将变化数通过接口 setCustomBadgeNumber 同步给 Push。
3. 应用退后台或者离线后,Push 会根据离线消息自动更新角标数。
4. 再次打开应用回到前台,业务也可以继续通过该接口清理或者更新角标数。
注意:
1. 每次打开应用回到前台,都应该设置自定义角标,否则在 iOS 设备上,角标数会在之前自定义的基础上加 1 。
2. 在华为设备上实现角标功能时,需要在 IM 控制台额外配置角标参数。该参数需指定应用的主入口 Activity 类路径,格式为:[应用包名].ui.MainActivity。以包名com.tencent.weauth为例,对应的角标参数应配置为:com.tencent.weauth.ui.MainActivity。
