andrew_im_sdk 0.1.22
andrew_im_sdk: ^0.1.22 copied to clipboard
Andrew IM SDK for Flutter — HTTP + WebSocket client for real-time messaging, conversations, groups, audio/video calls and more.
Changelog #
All notable changes to andrew_im_sdk will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.22 - 2026-09-07 #
Changed #
- HTTP 客户端只认 andrew-libs 统一信封
{code,message,data}:成功返回内层data(配合网关透传、不再剥信封)。 - Status API:兼容信封内层嵌套
post字段。
0.1.21 - 2026-09-03 #
0.1.20 - 2026-09-03 #
Added #
- 通话音频电平轮询:
onAudioLevels/activeSpeakerId(WebRTC getStats)。 - Android 屏幕共享:
requestCapturePermission+andrew_im_sdk/screen_share前台服务后再getDisplayMedia。 - iOS 屏幕共享:
getDisplayMedia使用video.deviceId = broadcast(需宿主 Broadcast Upload Extension + App Group)。
0.1.19 - 2026-09-03 #
Changed #
- 虚拟背景:
setVirtualBackground(mode, imagePath)经setVirtualBackgroundchannel 做人像背景虚化/自定义图。 - 通话录制:有远端时用
OUTPUT采扬声器混音;另存远端视频轨(path|remotePath)。
0.1.18 - 2026-09-03 #
Added #
- 虚拟背景对 WHIP 发布轨做帧虚化(宿主
MethodChannel('andrew_im_sdk/video_fx'))。 CallMediaEngine.startRecording/stopRecording本端落 mp4;CallManager.startCallRecording。
0.1.17 - 2026-09-03 #
Added #
- 通话实时字幕 / 虚拟背景 / 录制信令:
POST /v1/im/calls/{id}/media-event,WScall_subtitle/call_virtual_bg_toggle/call_recording_*。 CallManager.publishSubtitle/setVirtualBackground。
0.1.16 - 2026-09-03 #
Added #
- 青少年模式:
YouthModeManager/IMYouthModeSettings,/v1/im/youth-mode*。 - 好友 24h 状态:
StatusManager/IMStatusPost,/v1/im/status*。 - 语音转文字:
TranscribeApi。 - 群频道/讨论组、群相册/文件、群收款、接龙等 Group/Conversation API。
0.1.11 - 2026-09-03 #
Added #
MessageType.poll(14)与MessageType.encrypted(13)。- 群投票:
IMGroupPoll/GroupPollStatus/GroupPollResultVisibility,GroupApi/GroupManager发起、列表、详情、投票、改票、结束、删除、补选项、提醒未投。 RelationNotificationEvent.pollId,识别group_poll_*应用内通知。
0.1.9 - 2026-07-30 #
Changed #
- 枚举对齐 proto:
IMSession.type→IMSessionType;新增lastMessageType(MessageType)。 IMOnlineStatus.status→UserStatus;isOnline判断UserStatus.online。- 群邀请/入群申请
status→GroupInviteStatus/GroupApplicationStatus。 IMTypeCount.type→MessageType。
0.1.8 - 2026-07-29 #
Fixed #
- WebSocket 连接
:0端口 bug:修复ws_connect_io.dart中Uri.replace对ws://scheme 丢失默认端口导致连接地址变成http://host:0/...的问题,改用手动拼接 query string 保持原始 URL 不变。
0.1.7 - 2026-07-29 #
Added #
debugMode参数:AndrewIMClient(debugMode: true)开启后,所有 HTTP 请求都会通过debugPrint打印方法/URL/请求体/响应体(最多 600 字符),方便排查 API 问题。
0.1.6 - 2026-07-29 #
0.1.5 - 2026-07-29 #
Added #
- 本地消息存储:
LocalMessageStore抽象 +MemoryLocalMessageStore/FileLocalMessageStoreinit后自动打开用户维度文件库(Web 回退内存),恢复 seq 水位- 收发 / WS 推送 / seq 同步自动
upsert落盘 - 新增
AndrewIMClient.getConversationMessages:先读本地再增量补洞,离线可秒开
Compatibility #
- 默认行为对宿主透明;可通过构造注入自定义
LocalMessageStore - 公开导出
SeqRange/SessionMessageBatch便于宿主直接 pull-by-seq
0.1.4 - 2026-07-28 #
Changed #
- 好友请求状态 enum 化:
IMFriendApplication.status从String改为FriendRequestStatusFriendApi.getFriendRequests()/FriendshipManager.getFriendApplicationListAsRecipient()改为使用 enum 传递状态筛选- 与
andrew-chat最新 protobuf 契约对齐,避免好友请求状态在服务端 / SDK / App 之间出现字符串漂移
Compatibility #
FriendRequestStatus.fromJson()兼容 protobuf JSON 的两种返回形态:- 数字枚举值(
1 / 2 / 3) - 枚举名字符串(如
FRIEND_REQUEST_STATUS_PENDING)
- 数字枚举值(
0.1.3 - 2026-07-28 #
Fixed #
- Platform header 修复:
init未传 platform 时,X-Platformheader 与 WS query 出现null(http client 构造时误用原始参数而非自动检测结果)
0.1.2 - 2026-07-28 #
Added #
- 跨群群邀请列表:
groupManager.getReceivedGroupInvites()(被邀请人视角,跨群)- 新增模型
IMGroupInviteListResult - 对应 chat-api
GET /v1/im/groups/invites/received
- 新增模型
Changed #
- 搜索结果模型归位:
IMUserSearchResult、IMMessageSearchResult、IMGroupSearchResult、IMMediaSearchResult、IMGlobalSearchListResult、IMSearchHistoryListResult、IMSemanticSearchResult、IMSemanticSearchListResult统一迁移至model/search.dart(此前误置于 api 层),主导出文件正常导出
0.1.1 - 2026-07-27 #
Fixed #
- Platform 自动检测: 初始化时 platform 参数不再写死
flutter,改为dart:io Platform+kIsWeb自动检测(android/ios/macos/windows/linux/web),与 andrew-chat 的 platform 类型对齐
0.1.0 - 2026-07-27 #
Added #
WebRTC 音视频通话(重大功能)
-
CallMediaEngine: 完整的 WHIP/WHEP 媒体引擎
- WHIP 推流(发布本地音视频流)
- WHEP 拉流(订阅远端音视频流)
- Bearer Token 鉴权(符合 IETF WHIP RFC 9725)
- 自动重连机制(最多 3 次)
- 静音/开关摄像头/切换摄像头
- 本地/远端视频渲染器(RTCVideoRenderer)
-
CallManager 增强: 一键完成信令+媒体
startCall()- 发起通话(自动完成信令+媒体+鉴权)answerCall()- 接听通话(自动完成信令+媒体+鉴权)hangup()- 挂断通话(自动停止媒体+信令)rejectCall()- 拒绝通话cancelCall()- 取消通话startGroupCall()- 发起群通话joinGroupCall()- 加入群通话setMuted()/setCameraEnabled()/switchCamera()- 媒体控制hasMediaEngine- 检查媒体引擎状态
-
按需初始化机制
- 仅在服务端返回媒体配置时才启动引擎
- 节省资源,支持纯信令场景
- 自动检测
session.media字段
-
自动心跳保活
- 每 10 秒自动发送心跳
- 检测
shouldReconnectMedia自动重连媒体 - 检测
callEnded自动挂断
-
Bearer Token 鉴权
- WHIP/WHEP 请求自动携带 JWT token
- 符合 IETF RFC 6750 标准
- 无需手动配置
Changed #
- CallManager 重构: 从纯信令管理器升级为完整的通话管理器
- 依赖更新:
- 添加
flutter_webrtc: ^0.14.0 - 添加
dio: ^5.4.0 - 添加
flutterSDK 依赖
- 添加
Removed #
-
删除 Deprecated API:
initiateCall()→ 使用startCall()替代acceptCall()→ 使用answerCall()替代createGroupCall()→ 使用startGroupCall()替代joinCall()→ 使用joinGroupCall()替代endCall()→ 使用hangup()替代
-
删除 client.dart 中的重复方法:
callHeartbeat()→ 使用callManager!.heartbeat()替代getCallSession()→ 使用callManager!.getCallSession()替代createGroupCall()→ 使用callManager!.startGroupCall()替代joinCall()→ 使用callManager!.joinGroupCall()替代
Documentation #
- 新增
doc/音视频通话指南.md- 完整的通话功能使用文档 - 更新
README.md- 添加音视频通话特性说明
0.0.2 - 2026-07-20 #
Added #
- 消息、会话、群组、好友等 IM 核心功能
- WebSocket 长连接管理
- 消息同步、未读数管理
- 搜索、通知、Bot、Webhook 等扩展功能
- 消息翻译、草稿云同步
- 通话信令 API(CallManager 基础版)
升级指南 #
从 0.0.2 升级到 0.1.0 #
1. 更新依赖
dependencies:
andrew_im_sdk: ^0.1.0 # 从 ^0.0.2 升级
2. API 迁移
旧代码(v0.0.2):
// 发起通话(仅信令)
final session = await client.callManager!.initiateCall(
calleeID: 'user123',
callType: CallApi.callTypeVideo,
);
// 手动实现 WebRTC...
新代码(v0.1.0):
// 发起通话(信令+媒体+鉴权一体化)
final session = await client.callManager!.startCall(
calleeID: 'user123',
video: true,
);
// SDK 自动处理媒体引擎
final mediaEngine = client.callManager!.mediaEngine;
RTCVideoView(mediaEngine!.remoteRenderer);
3. 按需初始化
v0.1.0 采用按需初始化机制,媒体引擎仅在服务端返回媒体配置时才启动:
final session = await client.callManager!.startCall(...);
if (client.callManager!.hasMediaEngine) {
// 媒体引擎已启动
final engine = client.callManager!.mediaEngine!;
// 使用引擎...
} else {
// 服务端未返回媒体配置,引擎未启动
}
4. 鉴权
v0.1.0 自动处理 WHIP/WHEP 鉴权,无需手动配置:
// 旧代码(需要手动添加 token)
final headers = {
'Authorization': 'Bearer $token',
};
// 新代码(SDK 自动注入)
// 无需任何配置,SDK 自动使用初始化时的 JWT token
贡献者 #
- Andrew Team
许可证 #
Copyright © 2026 Lemo AI. All rights reserved.