直播间场景实践
准备工作
在开始之前,请确保已创建应用并完成客户端 SDK 集成。
直播间状态管理
直播间状态通常包括:待开始、直播中、暂停、结束、回放中。直播间状态由业务侧进行维护。
游客模式
适用场景:未在业务册注册登录的用户进入直播间。
建议通过注册用户获取 Token 连接融云,并在业务侧限制游客是否可以发送消息。
创建并加入聊天室
- 应用服务端通过 Server API 创建聊天室,客户端获取聊天室 ID 后可加入聊天室。
- 默认同一用户不能同时加入多个聊天室,可在融云控制台 IM 服务的服务配置页面启用单个用户加入多个聊天室功能。
- 加入聊天室时可通过客户端 SDK 获取最新的历史消息(默认 10 条,最多 50 条),您无法通过客户端 SDK 拉取指定的消息类型, 但可在融云控制台 IM 服务的服务配置页面设置加入聊天室获取指定消息配置。 如需拉取更多消息,可开启聊天室消息云端存储服务。
示例代码:
- Server SDK in Java
- Server SDK in PHP
- Server SDK in Go
Java
RongCloud rongCloud = RongCloud.getInstance("appKey", "appSecret");
//自定义 api地址方式
//RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret,api);
Chatroom chatroom = rongCloud.chatroom;
ChatroomDataModel chatroomDataModel = new ChatroomDataModel().setId("chatroomId3");
ResponseResult result2 = chatroom.createV2(chatroomDataModel);
System.out.println("createV2: " + result2.toString());
PHP
require "./../../RongCloud.php";
define("APPKEY", '');
define('APPSECRET','');
use RongCloud\RongCloud;
use RongCloud\Lib\Utils;
/**
* 创建聊天室
*/
function create()
{
$RongSDK = new RongCloud(APPKEY,APPSECRET);
$chatroom = [
['id'=> 'phpchatroom4',//聊天室 id
'name'=> 'phpchatroom1']//聊天室 name
];
$result = $RongSDK->getChatroom()->create($chatroom);
Utils::dump("创建聊天室",$result);
}
create();
Go
func TestRongCloud_ChatRoomCreateNew(t *testing.T) {
rc := NewRongCloud(
os.Getenv("APP_KEY"),
os.Getenv("APP_SECRET"),
)
// 创建聊天室
whiteUserIds := []string{"111", "222", "333"}
err := rc.ChatRoomCreateNew(
"chatroom001",
WithChatroomDestroyType(1),
WithChatroomDestroyTime(120),
WithChatroomIsBan(true),
WithChatroomWhiteUserIds(whiteUserIds),
)
t.Log(err)
}
常见问题:
- 客户端是否支持直接创建聊天室? 不支持,仅服务端可创建聊天室。
- 用户未加入聊天室也能发送消息? 默认允许,可在融云控制台 IM 服务的服务配置页面开启SDK 用户不在聊天室中不能发送消息功能,开启后则需加入聊天室才能发送消息。
- 用户加入或退出聊天室时,其他聊天室成员是否有感知? 默认无感知,但您可以通过聊天室成员变化监听功能,开启后用户加入、退出聊天室后,向其他聊天室成员发送回调通知。您可以在融云控制台 IM 服务的服务配置页面免费开启此功能,开启 15 分钟后生效。
- 用户多端登录时,其中 1 台设备退出聊天室后,别的设备不会同时退出吗? 默认不会。如您需其他端都退出,可以在融云控制台 IM 服务的服务配置页面免费开启多端同时在线情况下,一端退出聊天室其他端同步退出功能,开启 15 分钟后生效。
聊天室销毁(聊天室保活)
- 聊天室具有自动销毁机制,默认 1 个小时内无用户加入或发送消息,会自动将聊天室内所有成员踢出并销毁聊天室,详见聊天室销毁机制。您可通过设置"自动销毁类型"来修改销毁时间 ,最长为 7 天 (针对指定聊天室设置),详见设置聊天室自动销毁类型。
- 如果您希望聊天室不会自动销毁,可开启聊天室保活服务。您最多可设置 5 个保活的聊天室,如需增加数量,请联系商务。服务开启 15 分钟后生效,详见保活聊天室。此服务在旗舰版需付费使用,尊享版免费使用。
- 如果您同时使用了音视频服务,可将聊天室绑定音视频房间。当聊天室达到预设的自动销毁条件时,系统会先检测已绑定的音视频房间(RTCRoomId)是否仍存在:如果绑定的音视频房间仍存在,则阻止聊天室自动销毁;如果绑定的音视频房间已销毁,则直接销毁聊天室。详见绑定音视频房间。
聊天室公告
适用场景:通过此功能,您可以让用户在直播间列表页面查看每个直播间的公告,或在直播间内看到直播间的公告。
通过聊天室属性管理(KV)实现公告功能:
- 加入聊天室。
- 通过聊天室属性管理(KV)设置聊天室公告信息。
- 客户端通过获取聊天室 KV 属性来获取当前聊天室公告信息。
- 通过
KVStatusListener中的onChatRoomKVUpdate事件来同步被更改的聊天室 KV 属性,以达到通知所有聊天室成员的效果。详见添加聊天室 KV 监听器。
客户端示例代码:
- Android
- iOS
- Web
Java
// 设置聊天室属性(KV)
String chatRoomId = "聊天室 ID";
// 聊天室属性名称,Key 支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式,最大长度 128 个字符
String key = "自定义了聊天室key";//上下麦状态也可使用聊天室属性(KV) 实现。
// 聊天室属性对应的值,最大长度 4096 个字符
String value = "这是一则聊天室公告";
// true 发送通知; false 不发送。如果发送通知,SDK 会接收到类型标识为 RC:chrmKVNotiMsg 的聊天室属性通知消息(ChatRoomKVNotiMessage),并且消息内容中包含 K,V
boolean sendNotification = false;
// 退出后是否删除
boolean isAutoDel = false;
//通知的自定义字段, sendNotification 为 ture 时有效
String notificationExtra = "通知的自定义字段";
RongChatRoomClient.getInstance().setChatRoomEntry(chatRoomId, key, value, sendNotification, isAutoDel, notificationExtra, new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {
}
});
//接收端接收:
//在加入聊天室之前设置聊天室属性(KV)状态监听器,
RongChatRoomClient.getInstance().addKVStatusListener(new RongChatRoomClient.KVStatusListener() {
@Override
public void onChatRoomKVSync(String roomId) {
//聊天室属性(KV)列表同步完成时触发。
}
@Override
public void onChatRoomKVUpdate(String roomId, Map<String, String> chatRoomKvMap) {
//onChatRoomKVUpdate 中监听感知 KV 更新
//聊天室属性(KV)列表更新完成时触发,首次同步 KV 时返回全量 KV,后续触发时仅返回新增、修改的 KV。
}
@Override
public void onChatRoomKVRemove(String roomId, Map<String, String> chatRoomKvMap) {
//KV 被删除时触发。
}
});