角标(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`。
  • 通知权限被关闭时角标也可能不展示;引导用户在系统设置中开启「通知 → 标记」。