角标(badge)
角标是用户在桌面第一眼看到的信息,必须与 IMLib 的未读总数一致。推荐口径:以会话列表的未读总和为准,免打扰会话不计入角标,进入会话后清零并同步。
计算口径
| 项 | 规则 |
|---|---|
| 计入 | 所有未读总数(单聊 + 群聊 + 聊天室),按会话累加 |
| 不计入 | 免打扰会话(level=2)与全局免打扰期间的会话 |
| @ 提及 | 可单独高亮,但角标仍按总数;产品可选择“仅 @ 时计数” |
| 上限 | 系统角标显示 99+;SDK 返回真实总数 |
| 清零 | 进入会话并上报已读后,重算总数(不是简单减一) |
代码
// ios-imlib/push/badge
let badgePush = await client.registerPushToken(options: IMPRegisterPushTokenOptions(platform: "ios", token: "TOKEN"))
let badgeCount = 3
print(badgeCount)[[UNUserNotificationCenter currentNotificationCenter] setBadgeCount:totalUnread
withCompletionHandler:^(NSError *error) {
if (error) { NSLog(@"set badge failed: %@", error); }
}];
// 清零
[[UNUserNotificationCenter currentNotificationCenter] setBadgeCount:0 withCompletionHandler:nil];与推送 payload 的关系
- 服务端推送可带 `badge` 字段,但多端场景下服务端计数可能与当前设备不一致;客户端收到后应以本地重算为准。
- 前台收到消息、上报已读、切换账号、退出登录时都要重算角标。
- 清除角标不等于清除未读:进入会话仍要调用 `clearUnreadCount`。
- 通知权限被关闭时角标也可能不展示;引导用户在系统设置中开启「通知 → 标记」。