# 消息通道
透明通道消息主要包含房间内消息(接口集成使用请查看章节1)和在线消息(接口集成使用请查看章节2),具体使用要求和场景举例参考下表:
在线消息 | 房间内消息 | |
---|---|---|
一对一发送 | 支持 | 支持 |
群发消息 | 不支持 | 支持 |
是否支持异步发送结果上报 | 支持 | 不支持 |
是否需要登录 | 是 | 是 |
是否需要建立通话 | 否 | 是 |
使用场景举例 | 1、实现不依赖通话的一对一聊天;2、实现一些通话前的自定义信令交互,比如呼叫、拒接/接听等等; | 1、实现通话中的一些自定义信令、通知等;2、实现通话中单聊和群聊; |
消息内容支持 | 只支持文本消息 | 只支持文本消息 |
消息内容大小最大支持(bit) | 4K | 4K |
# 1. 房间内消息
如果想在房间中给其他成员发送消息,可以调用 sendMessage (opens new window) 接口。
/**
* 发送房间内消息,消息内容不能大于4K
*
* @param type 消息类型
* @param content 消息内容
* @param toUserId 指定成员的用户ID,传 nil 即给通话中全部成员发送消息
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
- (bool)sendMessage:(NSString * __nonnull)type content:(NSString * __nonnull)content toUserId:(NSString * __nullable)toUserId;
消息通过实现 JRTCRoomCallback (opens new window) 的 onMessageReceived (opens new window) 接口上报。
/**
* 接收房间消息的回调
*
* 当房间中有成员调用 {@link JRTCRoom.sendMessage:content:toUserId: sendMessage} 接口发送消息时,接收消息的成员会收到此回调。
* @param type 消息类型,对应 {@link JRTCRoom.sendMessage:content:toUserId: sendMessage} 方法中的 type 参数
* @param content 消息内容,对应 {@link JRTCRoom.sendMessage:content:toUserId: sendMessage} 方法中的 content 参数
* @param fromUserId 消息发送成员的用户ID
* @param room 当前 JRTCRoom 对象
*/
- (void)onMessageReceived:(NSString *)type content:(NSString *)content fromUserId:(NSString *)fromUserId room:(JRTCRoom *)room;
示例代码:
// 成员1发送给所有成员
[room sendMessage:@"消息类型" content:@"消息内容" toUserId:nil];
// 成员1发送给某个成员
[room sendMessage:@"消息类型" content:@"消息内容" toUserId:@"接收者用户ID"];
// 成员2收到消息通知
- (void)onMessageReceived:(NSString *)type content:(NSString *)content fromUserId:(NSString *)fromUserId room:(JRTCRoom *)room {
// 收到来自 fromUserId 的消息,消息内容为 content
}
# 2. 在线消息
只要登录到 Juphoon RTC 平台就可以通过 JRTCClient (opens new window) 的 sendOnlineMessage (opens new window) 实现在线消息的收发,消息内容不能大于4K。
/**
* 发送在线消息,消息内容不能大于4K
*
* @param message 消息内容
* @param userId 用户ID
* @return 接口调用结果
* - 操作id: 接口调用成功
* - -1: 接口调用异常
*/
- (int)sendOnlineMessage:(NSString* _Nonnull)message userId:(NSString* _Nonnull)userId;
在线消息发送结果通过 onOnlineMessageSendResult (opens new window) 回调通知。
/**
* 在线消息发送结果回调
* @param result 发送结果是否成功
* - true:发送成功
* - false:发送失败
* @param operatorId 操作ID,对应 {@link JRTCClient#sendOnlineMessage:userId: sendOnlineMessage} 的返回值
*/
- (void)onOnlineMessageSendResult:(bool)result operatorId:(int)operatorId;
在线消息接收者会收到 onOnlineMessageReceived (opens new window) 回调通知。
/**
* 收到在线消息回调
* @param message 消息内容
* @param userId 对方用户ID
*/
- (void)onOnlineMessageReceived:(NSString *)message userId:(NSString *)userId;
示例代码:
// 给用户 7777 发送在线消息
int operatorId = [_client sendOnlineMessage:@"消息内容" userId:@"7777"];
// 给用户 7777 发送在线消息结果
- (void)onOnlineMessageSendResult:(bool)result operatorId:(int)operatorId {
if (result == true) {
// 在线消息发送成功
}
else {
// 在线消息发送失败
}
}
// 收到在线消息
- (void)onOnlineMessageReceived:(NSString *)message userId:(NSString *)userId {
// 收到来自 userId 的消息,消息内容为 message
}