ZIM SDK 提供多人房间聊天功能,支持用户向房间内发送文本消息或自定义消息,实现了多人在线交流、同步分享。
多人房间聊天功能可应用于小班课或者会议室等场景,房间成员数量上限请参考 计费说明。
在实现“房间管理”功能之前,请确保:
用户可以通过以下两种方式,创建房间并进入房间。
房间内的用户,可以通过 sendRoomMessage 接口,向房间内发送消息,详情请参考 收发房间消息。
如果 roomID 已存在:
如果 roomID 不存在:
以下流程中,我们以客户端 A 创建并加入房间,客户端 B 和其他客户端加入房间为例。
客户端 A 登录后,创建一个房间,可以调用 createRoom 接口,传入 ZIMRoomInfo 信息,即可创建并加入房间。同时可以通过错误码 ZIMError
的参数值,判断是否创建成功。相关错误码请查看 常见错误码。
// roomID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '<', '=', '.', '>', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~'。
// roomName 最大 64 字节的字符串,无特殊字符限制。
ZIMRoomInfo zimRoomInfo = new ZIMRoomInfo();
zimRoomInfo.roomID = roomID;
zimRoomInfo.roomName = roomName;
zim.createRoom(zimRoomInfo, new ZIMRoomCreatedCallback() {
@Override
public void onRoomCreated(ZIMRoomFullInfo zimRoomFullInfo, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS) {
// 创建成功
} else {
// 创建失败
}
}
});
客户端 B 和其他客户端先后加入房间,可以调用 joinRoom 接口,传入由 A 创建的房间 roomID,即可加入房间。同时可以根据错误码 ZIMError
的参数值,判断用户是否加入成功。相关错误码请查看 常见错误码。
zim.joinRoom(roomID, new ZIMRoomJoinedCallback() {
@Override
public void onRoomJoined(ZIMRoomFullInfo zimRoomFullInfo, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS) {
// 加入房间成功。
} else {
// 加入房间失败。
}
}
});
当房间有其他成员加入时,可以使用 setEventHandler 的回调接口 onRoomMemberJoined 方法,实现对其他房间成员加入的监听。
例如,当客户端 B 加入由 A 创建的房间时,A 将收到房间内成员变动的通知。
zim.setEventHandler(new ZIMEventHandler() {
// 加入房间通知
@Override
public void onRoomMemberJoined(ZIM zim, ArrayList<ZIMUserInfo> memberList, final String roomID) {
// 通过该通知收到加入房间的用户信息
}
});
以下流程中,我们以客户端 X 创建并进入房间,客户端 Y 和其他客户端直接进入房间为例。
ZIMRoomInfo zimRoomInfo = new ZIMRoomInfo();
zimRoomInfo.roomID = roomID;
zimRoomInfo.roomName = roomName;
ZIMRoomAdvancedConfig config = new ZIMRoomAdvancedConfig();
zim.enterRoom(zimRoomInfo, config, new ZIMRoomEnteredCallback() {
@Override
public void onRoomEntered(ZIMRoomFullInfo zimRoomFullInfo, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS) {
// 进入成功
} else {
// 进入失败
}
}
});
用户如果想要离开房间,可以调用 leaveRoom 接口,传入房间的 roomID,即可退出此房间;房间内的其他用户可以通过 setEventHandler 的回调接口 onRoomMemberLeft,收到成员变动通知。
离开房间后,将不能收到房间内的消息。
// 离开房间
zim.leaveRoom(roomID, new ZIMRoomLeftCallback() {
@Override
public void onRoomLeft(String roomID, ZIMError errorInfo) {
}
});
zim.setEventHandler(new ZIMEventHandler() {
// 离开房间通知
@Override
public void onRoomMemberLeft(ZIM zim, ArrayList<ZIMUserInfo> memberList, final String roomID) {
// 通过该通知收到加入房间的用户信息
}
});
当所有成员离开房间后,房间将自动销毁。ZIM SDK 支持通过 ZIMRoomAdvancedConfig 设置房间延迟销毁,最大延迟为 3 小时。
联系我们
文档反馈