如何在基于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
相关产品推荐
相关产品推荐

