浏览 SDKs · Flutter
平台
SDKsFlutter

发送自定义信令

使用 OpenIM Flutter SDK 在通话房间中发送和接收自定义信令。

复制

自定义信令用于向指定通话房间发送轻量级业务协商数据,例如举手、切换布局提示或业务侧状态同步。它不是聊天消息接口,也不能替代媒体引擎的数据通道。

参数说明

参数类型是否必填说明
roomIDString是目标通话房间 ID。
customInfoString是自定义业务信令内容,通常为 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 进行覆盖。相关其他通话事件请参考处理通话事件。