SDKsFlutter
发送自定义信令
使用 OpenIM Flutter SDK 在通话房间中发送和接收自定义信令。
自定义信令用于向指定通话房间发送轻量级业务协商数据,例如举手、切换布局提示或业务侧状态同步。它不是聊天消息接口,也不能替代媒体引擎的数据通道。
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
roomID | String | 是 | 目标通话房间 ID。 |
customInfo | String | 是 | 自定义业务信令内容,通常为 JSON 序列化字符串。 |
final signal = jsonEncode({
'version': 1,
'eventID': eventID,
'type': 'hand-raised',
'userID': currentUserID,
'sentAt': DateTime.now().millisecondsSinceEpoch,
});
await OpenIM.iMManager.signalingManager.signalingSendCustomSignal(
roomID: roomID,
customInfo: signal,
);返回结果
Future 成功表示服务端已接受本次发送请求,并不代表其他参与者已经处理完毕。自定义信令适合轻量、临时的通话协商,不提供大文件、聊天记录或长期状态的传输与保存能力。
接收自定义信令
通过 OnSignalingListener 的 onReceiveCustomSignal 回调接收信令:
void handleCustomSignal(CustomSignaling info) {
final signalRoomID = info.roomID;
final customInfo = info.customInfo;
if (signalRoomID != activeRoomID || customInfo == null) return;
final signal = parseAndValidateCallSignal(customInfo);
if (hasAppliedSignal(signalRoomID!, signal.eventID)) return;
applyCallSignal(signal);
}
Future<void> registerCustomSignalListener() {
return OpenIM.iMManager.signalingManager.setSignalingListener(
OnSignalingListener(onReceiveCustomSignal: handleCustomSignal),
);
}建议客户端在业务数据中包含协议版本与业务幂等 eventID,按 roomID:eventID 幂等处理,避免重复执行或因乱序到达导致界面不一致。由于 SDK 未提供注销方法,退出登录或切换账号时应停止向旧状态写入,并在新账号登录后重新传入完整的 listener 进行覆盖。相关其他通话事件请参考处理通话事件。
这个页面有帮助吗?