浏览 SDKs · Android
平台
SDKsAndroid

发送自定义信令

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

复制

在指定通话房间内发送少量与通话相关的业务信息,例如举手、切换布局提示或临时状态同步。该能力用于轻量临时信令同步,不适合作为持久化聊天消息或传输大量文件数据。

发送信令

roomID 与 customInfo 都是必填字符串。需要传递结构化数据时,应定义稳定的数据格式并序列化为 JSON。

JSONObject signal = new JSONObject();
signal.put("version", 1);
signal.put("eventID", eventID);
signal.put("type", "hand-raised");
signal.put("userID", currentUserID);
signal.put("sentAt", System.currentTimeMillis());

OpenIMClient.getInstance().signalingManager.signalingSendCustomSignal(
    new OnBase<String>() {
        @Override
        public void onSuccess(String result) {
            // 信令发送请求已完成。
        }

        @Override
        public void onError(int code, String error) {
            // code 和 error 说明失败原因。
        }
    },
    roomID,
    signal.toString()
);

参数说明

参数类型是否必填说明
baseOnBase<String>是异步请求回调。
roomIDString是目标通话房间的 ID。
customInfoString是自定义信令内容,建议使用结构化 JSON 字符串。

返回结果

成功回调仅表示当前自定义信令已被服务端接收并分发,不代表对端已处理。信令载荷中建议携带协议版本与唯一 eventID,便于接收端去重。自定义信令适用于轻量级、临时性的房间状态协商,不适合作为持久化聊天消息。

接收信令

收到自定义信令时,OnSignalingListener.onReceiveCustomSignal 会返回 CustomSignalingInfo。先确认它属于当前房间并校验数据格式,再更新界面:

@Override
public void onReceiveCustomSignal(CustomSignalingInfo info) {
    // 先检查 info.getRoomID(),再按业务协议解析 info.getCustomInfo()。
}

如果业务需要避免重复处理,可以在自定义信令中携带唯一事件 ID,并在接收端记录已处理的事件。消息可能不会按发送顺序到达,因此不要依赖到达顺序决定业务状态。

将信令接收回调与其他通话回调一起注册到处理通话事件中的信令监听器。信令管理器在全局仅保留一个活跃监听器实例,重复设置会覆盖已注册的其他通话事件回调。

自定义信令不是可重放的长期状态记录。连接恢复后,如需校准房间或业务状态,可重新查询房间信息或业务数据。