IM 即时通讯
核心能力
会话类型
| 类型 | 说明 | 人数上限 |
|---|---|---|
| 单聊(P2P) | 一对一私信 | 2 人 |
| 群聊(Group) | 普通群组 | 默认 200,可扩展至 3000 |
| 超大群(Team) | 大型群组 | 最大 6000 人 |
| 聊天室(Chatroom) | 直播间弹幕场景 | 无上限(百万级) |
消息类型
消息类型
├── 基础消息
│ ├── 文本(支持 Emoji、@提及)
│ ├── 图片(自动压缩、缩略图)
│ ├── 语音(AMR/AAC 格式)
│ ├── 视频(MP4)
│ └── 文件(任意格式)
├── 高级消息
│ ├── 地理位置
│ ├── 提示消息(系统通知)
│ └── 自定义消息(JSON 扩展字段)
└── 特殊消息
├── 撤回消息
├── 已读回执
└── 消息引用(回复)离线推送
离线推送链路
用户离线
↓
云信服务端检测到离线
↓
调用厂商推送通道
├── iOS:APNs
├── Android:
│ ├── 华为推送
│ ├── 小米推送
│ ├── OPPO 推送
│ ├── vivo 推送
│ └── FCM(海外)
└── 自定义推送(透传)高级特性
消息漫游
- 历史消息云端存储,换设备后可拉取
- 默认保存 7 天,可配置至 1 年
- 支持按时间范围、消息类型查询
已读回执
单聊已读回执:
A 发消息 → B 收到并阅读 → B 的 SDK 自动发送已读回执 → A 看到「已读」标记
群聊已读回执(需开启):
发送方可查看每条消息的已读人数和未读人数消息优先级(聊天室)
聊天室场景下,可设置消息优先级:
- 高优先级:主播消息、礼物消息,保证必达
- 普通优先级:普通弹幕,高并发时可能丢弃
反垃圾(与易盾联动)
消息发送流程(开启内容安全)
用户发送消息
↓
云信 SDK → 云信服务端
↓
调用易盾内容安全 API
├── 通过:正常下发
├── 疑似:人工审核队列
└── 违规:拦截,返回错误码集成示例
Android 发送文本消息
java
// 初始化 SDK
NIMClient.init(this, loginInfo, options);
// 发送单聊文本消息
String sessionId = "target_account";
SessionTypeEnum sessionType = SessionTypeEnum.P2P;
TextMsgBuilder builder = MessageBuilder.buildTextMessage(sessionId, sessionType, "Hello!");
NIMClient.getService(MsgService.class).sendMessage(builder, false);iOS 发送图片消息
swift
// 构建图片消息
let message = NIMMessage()
let imageObject = NIMImageObject(image: UIImage(named: "photo")!)
message.messageObject = imageObject
// 发送
let session = NIMSession(targetId, type: .P2P)
try? NIMSDK.shared().chatManager.send(message, to: session)Web 监听消息
typescript
import NIM from '@yxim/nim-web-sdk'
const nim = NIM.getInstance({
appKey: 'your_app_key',
account: 'user_account',
token: 'user_token',
onmsg: (msg) => {
console.log('收到消息:', msg)
}
})性能指标
| 指标 | 数值 |
|---|---|
| 消息到达率 | 99.99% |
| 国内端到端延迟 | < 100ms(P99) |
| 离线消息保存时长 | 7 天(默认) |
| 单群最大人数 | 6000 人 |
| 聊天室并发 | 百万级 |