andrew_im_sdk 0.1.3
andrew_im_sdk: ^0.1.3 copied to clipboard
Andrew IM SDK for Flutter — HTTP + WebSocket client for real-time messaging, conversations, groups, audio/video calls and more.
andrew_im_sdk #
Flutter / Dart 即时通讯 SDK:封装 IM 服务的 HTTP 接口与 WebSocket 长连接,提供消息、会话、群组、好友、音视频通话、在线状态、搜索等完整能力。
入口:AndrewIMClient,业务按 Manager 划分。支持 Android / iOS / Web / 桌面全平台。
v0.1.0 新特性:内置 WebRTC 音视频通话(WHIP/WHEP),一键发起/接听通话,自动鉴权。
安装 #
dependencies:
andrew_im_sdk: ^0.1.0
快速开始 #
初始化 SDK #
import 'package:andrew_im_sdk/andrew_im_sdk.dart';
final client = AndrewIMClient(autoReconnect: true);
await client.init(
baseUrl: 'https://your-im-gateway.example.com',
token: '<your-jwt-token>',
tenantId: '<tenant>',
userId: '<uid>',
deviceId: '<device>',
platform: 'flutter',
);
client.addListener(MyListener());
await client.connect();
消息功能 #
// 发消息
await client.messageManager!.sendMessage(SendMessageRequest(
targetId: peerId,
targetType: MessageTargetType.user,
type: MessageType.text,
content: '你好',
));
// 会话 / 好友 / 群
final conv = await client.conversationManager!.getOneConversation(targetId: peerId);
await client.friendshipManager!.addFriendRequest(userID: peerId, reqMessage: '加个好友');
await client.groupManager!.createGroup(groupName: '项目组', memberUserIDs: [peerId]);
音视频通话(v0.1.0+) #
// 发起视频通话(一键完成信令+媒体+鉴权)
final session = await client.callManager!.startCall(
calleeID: 'user123',
video: true, // false 为音频通话
);
// 接听通话
await client.callManager!.answerCall(callID: callId, video: true);
// 挂断通话
await client.callManager!.hangup(callID: callId);
// 媒体控制
await client.callManager!.setMuted(true); // 静音
await client.callManager!.setCameraEnabled(false); // 关摄像头
await client.callManager!.switchCamera(); // 切换摄像头
// 渲染视频
final mediaEngine = client.callManager!.mediaEngine;
RTCVideoView(mediaEngine!.remoteRenderer); // 远端视频
RTCVideoView(mediaEngine!.localRenderer); // 本地视频
事件监听 #
class MyListener extends IMEventListener {
@override
void onNewMessage(IMMessage message) { /* 收到新消息 */ }
@override
void onConnectionStateChanged(ConnectionState state) { /* 连接状态变化 */ }
@override
void onKicked(KickedEvent e) { /* 被踢下线 */ }
@override
void onCallEvent(CallEvent e) { /* 通话信令 */ }
// onMessagesSynced / onTyping / onReadReceipt / onMessageRecall / onDraftUpdated / ...
}
Managers #
| Manager | 能力 |
|---|---|
friendshipManager |
好友申请/列表/黑名单/隐私/同步 |
groupManager |
建群/成员/邀请/申请/禁言/设置 |
conversationManager |
会话 CRUD/置顶/归档/清消息/同步 |
messageManager |
收发/历史/转发/撤回/反应/举报 |
callManager |
1v1/群通话(信令+媒体+鉴权) |
presenceManager |
在线状态、订阅、踢设备 |
searchManager |
用户/消息/群/全局/语义搜索 |
notificationManager |
系统通知、推送设备、角标 |
unreadManager |
未读数、已读 seq、已读回执 |
botManager |
Bot 创建/发消息 |
webhookManager |
出站 Webhook |
translateApi |
消息翻译 |
draftApi |
草稿云同步 |
音视频通话特性(v0.1.0+) #
- ✅ 一键通话:
startCall()/answerCall()自动完成信令+媒体+鉴权 - ✅ WHIP/WHEP 协议:基于 IETF 标准(RFC 9725)
- ✅ Bearer Token 鉴权:自动注入 JWT token(RFC 6750)
- ✅ 按需初始化:仅在服务端返回媒体配置时启动引擎
- ✅ 自动重连:ICE/网络失败自动重连(最多 3 次)
- ✅ 自动心跳:每 10 秒自动保活
- ✅ 媒体控制:静音、开关摄像头、切换摄像头
- ✅ 群通话:支持多人音视频通话
鉴权 #
SDK 通过 HTTP header 携带鉴权信息:
| Header | 说明 |
|---|---|
Authorization |
Bearer <jwt-token> |
X-Tenant-ID |
租户 ID |
X-User-Id |
用户 ID |
X-Device-Id |
设备 ID |
X-Platform |
平台标识(flutter / android / ios / web) |
token 过期后调用 client.updateToken(newToken) 刷新。
音视频通话鉴权:WHIP/WHEP 请求自动携带 Authorization: Bearer <token> 头,无需额外配置。
功能特性 #
- WebSocket 长连接 + 自动重连(指数退避)
- seq 增量同步
- 消息去重
- 草稿云同步
- 消息翻译
- 多端在线 / 踢设备
- 音视频通话(WebRTC)
- 群通话(SFU)
文档 #
- 音视频通话指南:
doc/音视频通话指南.md - 更新日志:
CHANGELOG.md - 接口文档:https://www.lemo-ai.com
导入约定 #
包内使用 package:andrew_im_sdk/...;宿主只需 import 'package:andrew_im_sdk/andrew_im_sdk.dart';。
依赖 #
- Dart SDK: ^3.5.0
- Flutter SDK
http,web_socket_channel,dioflutter_webrtc(v0.1.0+)
平台支持 #
| 平台 | 消息 | 音视频通话 |
|---|---|---|
| Android | ✅ | ✅ |
| iOS | ✅ | ✅ |
| Web | ✅ | ⚠️ 部分功能受限 |
| Desktop | ✅ | ❌ 暂不支持 |
License #
MIT