You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于TokBox SDK的iOS SWIFT视频通话中添加文字聊天功能

基于TokBox(OpenTok)iOS SDK实现视频通话内文字聊天方案

TokBox官方没有提供独立的文字聊天API,你可以使用SDK自带的信号(Signal)能力实现文字消息的收发,这是官方推荐的标准实现方案,不需要额外集成第三方SDK。

前置条件

你已经完成OpenTok iOS SDK集成,且视频通话的OTSession会话可以正常连接、音视频流推拉正常。

具体实现步骤

1. 遵守OTSessionDelegate协议

确保你的会话管理类遵守OTSessionDelegate协议,且已经给OTSession实例设置了delegate,信号接收回调依赖该代理。

2. 实现消息发送逻辑

调用OTSession的信号发送方法,自定义chatMessage作为消息类型标识,和其他业务信号做区分:

// 发送聊天消息方法
func sendChatMessage(content: String) {
    let signalType = "chatMessage"
    var sendError: OTError?
    // connection参数传nil代表给当前会话内所有用户发送消息
    openTokSession.sendSignal(withType: signalType, string: content, connection: nil, error: &sendError)
    
    if let error = sendError {
        print("消息发送失败:\(error.localizedDescription)")
        // 此处可添加UI层的发送失败提示
    } else {
        // 发送成功,将自己发送的消息插入本地聊天列表,避免重复接收
        insertChatMessage(content: content, isSenderSelf: true)
    }
}

3. 实现消息接收逻辑

在OTSessionDelegate的信号接收回调中,过滤出聊天类信号做处理:

func session(_ session: OTSession, receivedSignalType type: String?, from connection: OTConnection?, with string: String?, error: Error?) {
    if let error = error {
        print("信号接收失败:\(error.localizedDescription)")
        return
    }
    // 仅处理聊天类型的信号
    guard type == "chatMessage", let messageContent = string else { return }
    // 过滤自己发送的消息,避免重复展示
    guard connection?.connectionId != openTokSession.connection?.connectionId else { return }
    
    // 将对方发送的消息插入聊天列表,刷新UI
    insertChatMessage(content: messageContent, isSenderSelf: false)
}

注意事项

  • 单条信号的字符串内容最大限制为8KB,如果需要发送长文本、富文本、附件等内容,建议自行封装为JSON拆分发送,或搭配自建IM服务实现
  • 如果需要携带发送者昵称、头像、时间戳等扩展信息,可以把消息封装为Codable结构体,转成JSON字符串后再发送,接收时解析为模型即可
  • TokBox服务端不会存储信号的历史数据,如果需要实现聊天历史漫游功能,需要自行在服务端存储消息记录
  • 默认会话的PUBLISHER、SUBSCRIBER角色都拥有发送信号权限,如果你自定义了角色权限配置,需要确保角色开启了sendSignal权限

内容的提问来源于stack exchange,提问作者Moulali Pinjari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 20:45:02