聊天室

开发聊天室功能前可以先查阅聊天室FAQ,以对聊天室功能有大概的了解。

聊天室功能概述

聊天室特点:

初始化与清理

使用聊天室功能时必须调用 NIMChatRoom.ChatRoomApi.Init() 进行初始化,退出使用聊天室功能时需调用 NIMChatRoom.ChatRoomApi.Cleanup() 进行清理工作。两者必须配对使用,避免造成不必要的异常。

聊天室事件通知

聊天室的登录、登出,收到消息等等操作都是通过监听全局事件来通知给调用者。必须在调用登录操作之前,先监听所有的聊天室事件通知。建议在初始化完成后就注册事件监听。

登录聊天室事件

在开发者调用登录聊天室接口后,通过此事件通知开发者登录进度和结果。登录步骤按本地服务初始,连接服务器中,服务器连接完成,登录鉴权中,登录鉴权完成五个步骤顺序进行,当登录鉴权成功后,可以获取得到当前聊天室的信息和本人在聊天室中的成员信息。

NIMChatRoomLoginStep枚举说明

枚举 说明
kNIMChatRoomLoginStepInit 1 本地服务初始化
kNIMChatRoomLoginStepServerConnecting 2 服务器连接中
kNIMChatRoomLoginStepServerConnectOver 3 服务器连接结束,连接结果error_code
kNIMChatRoomLoginStepRoomAuthing 4 聊天室鉴权中
kNIMChatRoomLoginStepRoomAuthOver 5 聊天室鉴权结束,鉴权结果见error_code, error_code非408则需要开发者重新请求聊天室登录信息
public static event ChatRoomLoginDelegate LoginHandler;
void OnLoginHandler(NIMChatRoomLoginStep loginStep, ResponseCode errorCode, ChatRoomInfo roomInfo, MemberInfo memberInfo)
{
    if (loginStep == NIMChatRoom.NIMChatRoomLoginStep.kNIMChatRoomLoginStepRoomAuthOver 
      && errorCode == NIM.ResponseCode.kNIMResSuccess)
    {
         //进入聊天室成功
    }
    if (errorCode != NIM.ResponseCode.kNIMResSuccess)
    {
        //进入聊天室出错
    }
}
//监听登录事件
NIM.NIMChatRoom.ChatRoomApi.LoginHandler += OnLoginHandler;

//取消监听
NIM.NIMChatRoom.ChatRoomApi.LoginHandler -= OnLoginHandler;

退出聊天室事件

通知已经退出聊天室,除了主动退出聊天室之外,还包括被多端、主播和管理员踢出,以及聊天室被关闭或者被解散也会收到离开聊天室的通知。收到该通知后,该聊天不再自动重连进入聊天室。重新登录需要重新获取token

NIMChatRoomExitReason枚举参数说明

枚举 说明
kNIMChatRoomExitReasonExit 0 自行退出,重登前需要重新请求登录
kNIMChatRoomExitReasonRoomInvalid 1 聊天室已经被解散,重登前需要重新请求登录
kNIMChatRoomExitReasonKickByManager 2 被管理员踢出,重登前需要重新请求登录
kNIMChatRoomExitReasonKickByMultiSpot 3 多端登录被踢
kNIMChatRoomExitReasonIllegalState 4 当前链接状态异常
kNIMChatRoomExitReasonBeBlacklisted 5 被管理员加入黑名单
public static event ExitChatRoomDelegate ExitHandler;
void OnExitHandler(long roomId, ResponseCode errorCode, NIMChatRoomExitReason reason)
{
    ...
}
//监听事件
NIM.NIMChatRoom.ChatRoomApi.ExitHandler += OnExitHandler;

//取消监听
NIM.NIMChatRoom.ChatRoomApi.ExitHandler -= OnExitHandler;

聊天室连接状态更改通知

网络出现波动导致聊天室断开连接时,会通知开发者聊天室的连接状态。SDK 会监听网络状况,自动重连。

NIMChatRoomLinkCondition枚举参数说明

枚举 说明
kNIMChatRoomLinkConditionAlive 0 连接正常
kNIMChatRoomLinkConditionDeadAndRetry 1 连接失败,尝试重连
kNIMChatRoomLinkConditionDead 2 开发者需要重新申请聊天室登录信息
 public static event LinkStateChangedDelegate LinkStateChanged;
void OnLinkStateChanged(long roomId, NIMChatRoomLinkCondition state)
{
    ...
}
//监听事件
NIM.NIMChatRoom.ChatRoomApi.LinkStateChanged += OnLinkStateChanged;

//取消监听
NIM.NIMChatRoom.ChatRoomApi.LinkStateChanged -= OnLinkStateChanged;

接收消息事件

收到一条聊天室消息,消息内容为Message。多个聊天室的消息都是通过该事件通知,开发者通过区分roomId来区分各自的聊天室。所有的聊天室消息本地都不做存储。

NIMChatRoomMsgType枚举说明

枚举 说明
kNIMChatRoomMsgTypeText 0 文本类型消息
kNIMChatRoomMsgTypeImage 1 图片类型消息
kNIMChatRoomMsgTypeAudio 2 声音类型消息
kNIMChatRoomMsgTypeVideo 3 视频类型消息
kNIMChatRoomMsgTypeLocation 4 位置类型消息
kNIMChatRoomMsgTypeNotification 5 活动室通知
kNIMChatRoomMsgTypeFile 6 文件类型消息
kNIMChatRoomMsgTypeTips 10 提醒类型消息
kNIMChatRoomMsgTypeRobot 11 波特机器人消息
kNIMChatRoomMsgTypeCustom 100 自定义消息
kNIMChatRoomMsgTypeUnknown 1000 未知类型消息,作为默认值

Message重要参数说明

类型 参数 说明
long RoomId 消息所属的聊天室id(服务器填充)
string SenderId 消息发送者
long TimeStamp 消息发送的时间戳(毫秒)(服务器填充)
NIMChatRoomClientType SenderClientType 消息发送方客户端类型,发送方不需要填写(服务器填充)
string SenderNickName 消息发送者昵称(服务器填充)
string SenderAvator 消息发送者头像(服务器填充)
string SenderExtension 消息发送者身份扩展字段(服务器填充)
NIMChatRoomMsgType MessageType 消息类型,详见NIMChatRoomMsgType
string MessageAttachment 消息内容,长度限制2048,如果约定的是json字符串,必须为可以解析为json的非格式化的字符串,除文本消息外,其他图片、语音、视频、地理位置、自定义消息都需要是目前约定好的json串,此内容是透传内容,本质上是IM消息的附件内容。参考发送消息的相应类型消息
string ClientMsgId 客户端消息id,发送方填写
bool resend_flag 消息是否需要重发,true:需要,false:不需要,默认是false(暂不支持)
string Extension 第三方扩展字段, 长度限制4096, 必须为可以解析为Json的非格式化的字符串
bool AntiSpamEnabled 是否需要过易盾反垃圾,true:需要,false:不需要,默认false
string AntiSpamContent (可选)开发者自定义的反垃圾字段,长度限制:5000字符
string LocalResourcePath 媒体文件本地绝对路径(客户端)(暂不支持)
string LocalResourceId 本地媒体文件ID(客户端)(暂不支持)
public static event ReceiveMessageDelegate ReceiveMessageHandler;
void OnRecvMessage(long roomId, Message message)
{
    ...
}
//监听事件
NIM.NIMChatRoom.ChatRoomApi.ReceiveMessageHandler += OnRecvMessage;

//取消监听
NIM.NIMChatRoom.ChatRoomApi.ReceiveMessageHandler -= OnRecvMessage;

发送消息结果通知

通过该事件,用户可以知道消息发送成功与否。

public static event SendMessageDelegate SendMessageHandler;
void OnSendMessageResult(long roomId, ResponseCode code, Message message)
{
    ...
}
//监听事件
NIM.NIMChatRoom.ChatRoomApi.SendMessageHandler += OnSendMessageResult;

//取消监听
NIM.NIMChatRoom.ChatRoomApi.SendMessageHandler -= OnSendMessageResult;

收到聊天室通知消息事件

聊天室的所有通知消息都通过该事件接收。包括成员进入/离开聊天室,禁言/解除禁言,加黑/取消加黑等等,详见Notification说明。

Notification参数说明

类型 参数 说明
NIMChatRoomNotificationId Type 通知类型,详见NIMChatRoomNotificationId
Notification.Data InnerData 通知内容

NIMChatRoomNotificationId枚举说明

枚举值 说明
kNIMChatRoomNotificationIdMemberIn 成员进入聊天室
kNIMChatRoomNotificationIdMemberExit 成员离开聊天室
kNIMChatRoomNotificationIdAddBlack 成员被加入黑名单
kNIMChatRoomNotificationIdRemoveBlack 成员被取消黑名单
kNIMChatRoomNotificationIdAddMute 成员被禁言
kNIMChatRoomNotificationIdRemoveMute 成员被取消禁言
kNIMChatRoomNotificationIdAddManager 设置为管理员
kNIMChatRoomNotificationIdRemoveManager 被取消管理员
kNIMChatRoomNotificationIdAddFixed 设置为聊天室固定成员
kNIMChatRoomNotificationIdRemoveFixed 被取消聊天室固定成员
kNIMChatRoomNotificationIdClosed 聊天室被关闭了
kNIMChatRoomNotificationIdInfoUpdated 聊天室信息更新
kNIMChatRoomNotificationIdMemberKicked 成员被踢出聊天室
kNIMChatRoomNotificationIdMemberTempMute 临时禁言
kNIMChatRoomNotificationIdMemberTempUnMute 解除临时禁言
kNIMChatRoomNotificationIdMyRoleUpdated 成员主动更新了聊天室内的角色信息(仅指nick/avator/ext)
kNIMChatRoomNotificationIdRoomMuted 聊天室被禁言了,只有管理员可以发言,其他人都处于禁言状态
kNIMChatRoomNotificationIdRoomDeMuted 聊天室解除全体禁言状态

再来看下`Notification.Data参数说明

类型 参数 说明
string Extension 上层开发自定义的事件通知扩展字段, 必须为可以解析为Json的非格式化的字符串
string OperatorId 操作者的账号id
string OperatorNick 操作者昵称
string[] TargetAccountsNick 被操作者的nick列表
string[] TargetIdCollection 操作者的账号id列表
long MuteDuration 当通知为临时禁言相关时有该值,禁言时代表本次禁言的时长(秒),取消禁言时代表本次剩余禁言时长(秒)
int Muted 当通知类型为成员进入时有该值,代表是否禁言状态,1:是 缺省或0:不是
int TempMuted 当通知类型为成员进入言时有该值,代表临时禁言状态
long TempMutedDuration 当通知类型为成员进入时,代表临时禁言时长(秒),其他通知不带此数据
 public static event ReceiveNotificationDelegate ReceiveNotificationHandler;
void OnReceiveNotificationHandler(long roomId, Notification notification)
{
    ...
}
//监听事件
NIM.NIMChatRoom.ChatRoomApi.ReceiveNotificationHandler += OnReceiveNotificationHandler;

//取消监听
NIM.NIMChatRoom.ChatRoomApi.ReceiveNotificationHandler -= OnReceiveNotificationHandler;

进入聊天室

获取token

聊天室依赖IM,进入聊天室前,需要通过调用IM模块接口获取进入聊天室的授权信息,在开发者调用登录聊天室接口时将此授权信息传入接口。聊天室可以同时登录多个,每个聊天室都要各自根据roomId请求授权信息.

注意:这里调用的是 IM SDK 模块的接口

public static void RequestLoginInfo(long roomId, RequestChatRoomLoginInfoDelegate cb,string json_ext="");
参数 说明
roomId 聊天室id,即房间号, 必填)
cb 结果通知回调
json_ext 扩展信息,预留
//以测试房间号3001为例
long roomId = 3001;
string _token = "";
NIM.Plugin.ChatRoom.RequestLoginInfo(roomId, (response, authResult) =>
{
    if (response == NIM.ResponseCode.kNIMResSuccess)
    {
        _token = result; //此token即为所需要的授权信息
        //如果在直接调用NIMChatRoom.ChatRoomApi.Login,尽量请抛一个异步任务去操作,如下;
        Loom.QueueOnMainThread (() => {
            LoginData loginData = new LoginData();
            loginData.Nick = "nickName";
            loginData.Icon = "https://xxxx.png";//图片url
            loginData.Extension = "{\"myExt\:\"111\"}";
            loginData.NotifyExtension = "{\"myNotifyExt\:\"2222\"}";
            NIMChatRoom.ChatRoomApi.Login(roomId,_token,loginData);
        });
    }
});

登录聊天室

进入聊天室时,可以通过LoginData设置本人在聊天室的昵称,头像,以及传递通知信息和扩展信息等。登录过程通过登录聊天室事件通知开发者。

LoginData参数说明

类型 参数 说明
string Nick 进入聊天室后展示的昵称,选填
string Icon 进入聊天室的头像,填头像的url,选填
string Extension 扩展字段信息,必须是json字符串,选填
string NotifyExtension 进入聊天室通知扩展字段,必须是json字符串,选填
public static void Login(long roomId, string request, LoginData loginData = null);
参数 说明
roomId 聊天室id,即房间号, 必填)
request 通过接口获取token获取的授权信息,必填
loginData 进入聊天室时附带的个人信息,选填

查阅示例代码

离开聊天室

离开聊天室,会断开聊天室对应的链接,并不再收到该聊天室的任何消息。如果用户要离开聊天室,可以手动调用离开聊天室接口。

public static void Exit(long roomId);
参数 说明
roomId 聊天室id,即房间号, 必填)
//以测试房间号3001为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.Exit(roomId);

发送消息

先创建消息内容Message,然后通过NIMChatRoom.ChatRoomApi.SendMessage接口。发送结果通过发送消息结果通知给用户。可发送多种类型消息,包括文本,图片,语音,视频,地理位置等等各种自定义消息,具体消息内容可参见IM的消息收发。本地没有保存消息历史记录,可以查询云端历史消息记录

public static void SendMessage(long roomId, Message msg);
参数 说明
roomId 聊天室id,即房间号, 必填)
msg 消息内容 详见Message
Message createMessage(long room_id)
{
    Message msg = new Message();
    msg.MessageType = NIMChatRoomMsgType.kNIMChatRoomMsgTypeText;
    msg.AntiSpamEnabled = false;
    msg.AntiSpamContent = "";
    msg.MessageAttachment = "这是一条测试消息";
    msg.ClientMsgId = "nsgid"; //生成唯一的的消息id

    return msg;
}

//以测试房间号3001为例
long roomId = 3001;
Message msg = createMessage(roomId);
NIMChatRoom.ChatRoomApi.SendMessage(roomId,msg);

查询云端历史消息记录

SDK支持查询在云端的聊天室历史消息记录。

public static void QueryMessageHistoryOnline(long roomId, long startTimeStamp, int count, QueryMessageHistoryResultDelegate cb);
参数 说明
roomId 聊天室id,即房间号, 必填)
startTimeStamp 查询起始时间戳(毫秒)
count 查询数量,必须为大于0的值
cb 结果回调通知
//以测试房间号3001为例
long roomId = 3001;
long startTimetag = 1520391909233;//13位时间戳(毫秒)
NIMChatRoom.ChatRoomApi.QueryMessageHistoryOnline(roomId,startTimetag,20,(roomId,code,messages)=>
{
    ...
});

聊天室管理

获取聊天室信息

进入聊天室的事件中会有聊天室的信息,此外还能通过单独的接口获取聊天室信息。SDK 本地不缓存聊天室信息,只提供向服务器查询的接口,因此接口调用遵循服务器接口使用频率限制。

ChatRoomInfo重要参数说明

类型 参数 说明
long RoomId 聊天室id,即房间号
string RoomName 聊天室名称,管理员可以更新此信息
string Announcement 聊天室公告
string BroadcastUrl 视频直播流地址
string CreatorId 聊天室创建者账号id
int Valid 聊天室有效标记,1:有效,0: 无效
string Extension 第三方扩展字段, 必须为可以解析为Json的非格式化的字符串, 长度4k
int OnlineMembersCount 在线人数
bool IsMuted 聊天室禁言标志,1:禁言 0:不禁言
public static void GetRoomInfo(long roomId, GetRoomInfoDelegate cb);
参数 说明
roomId 聊天室id,即房间号, 必填)
cb 结果回调通知
//以测试房间号3001为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.GetRoomInfo(roomId, (room_Id, errorCode, info) =>
{
    ...
});

更新聊天室信息

SDK支持更新聊天室信息,仅管理员拥有此权限。目前只支持更新ChatRoomInfoRoomNameAnnouncementBroadcastUrlExtension 四个属性。同时,在更新时可以设置是否在聊天室内广播通知。

public static void UpdateRoomInfo(long roomId, ChatRoomInfo info, UpdateRoomInfoDelegate cb, bool notify, string notify_ext);
参数 说明
roomId 聊天室id,即房间号, 必填
info 聊天室更新信息
cb 结果回调通知
notify 是否聊天室内广播通知,true:通知,此时notify_ext不为空 false:不通知
notify_ext 通知中的自定义字段,长度限制2048
//以测试房间号3001为例
long roomId = 3001;
var ri = new ChatRoomInfo
{
    RoomId = roomId,
    Announcement ="聊天室公告",
    RoomName = "newName",
    BroadcastUrl = "http://xxxxx",
    Extension = "{\"test"\:\"1111\"}", //自定义扩展字串
};

NIMChatRoom.ChatRoomApi.UpdateRoomInfo(roomId, ri,(room_Id, errorCode) =>
{
    ...
},false,null);

获取聊天室成员列表

该接口可以获取固定成员信息、仅在线的固定成员信息及游客信息 MemberInfo,其中的扩展字段由该用户进入聊天室时填写。 固定成员有四种类型,分别是创建者,管理员,普通用户,受限用户。禁言用户和黑名单用户都属于受限用户。本地不缓存成员列表信息,均直接从云端获取。

MemberInfo重要参数说明

类型 参数 说明
long RoomId 聊天室id,即房间号
string MemberId 成员账号
ChatRoomMemberType MemberType 成员类型,-1:受限用户; 0:普通;1:创建者;2:管理员 ,详见ChatRoomMemberType
int Level 成员级别: >=0,表示用户开发者可以自定义的级别
string CreatorId 聊天室创建者账号id
string Nick 聊天室内的昵称字段,可以由用户进聊天室时提交
string MemberIcon 聊天室内的头像,可以由用户进聊天室时提交
string Extension 第三方扩展字段, 必须为可以解析为Json的非格式化的字符串, 长度4k
NIMChatRoomOnlineState OnlineState 成员是否处于在线状态, 仅特殊成员才可能离线, 对游客/匿名用户而言只能是在线,0:离线 1: 在线
NIMChatRoomGuestFlag GuestFlag 是否是普通游客类型,0:不是游客,1:是游客; 游客身份在聊天室中没有持久化, 只有在线时才会有内存状态
long JoinTimeStamp 进入聊天室的时间戳(毫秒),对于离线成员该字段为空
bool IsInBlacklist 是否在黑名单 1:是 0:否
bool IsMuted 是否被禁言 1:是 0:否
bool IsValid 是否有效 1:是 0:否
bool TempMuted 是否被临时禁言 1:是 0:否
long TempMuteRestDuration 临时禁言剩余时长,单位秒
long UpdateTimetag 固定成员的记录更新时间戳,用于固定成员列表的排列查询

NIMChatRoomGetMemberType枚举说明

枚举 说明
kNIMChatRoomGetMemberTypeSolid 0 固定成员,固定成员,包括创建者,管理员,普通等级用户,受限用户(禁言+黑名单),即使非在线也可以在列表中看到,有数量限制
kNIMChatRoomGetMemberTypeTemp 1 非固定成员,非固定成员,又称临时成员,只有在线时才能在列表中看到,数量无上限

成员类型ChatRoomMemberType枚举说明

枚举 说明
Restricted -1 受限制成员
Normal 0 普通成员
Creator 1 创建者
Manager 2 管理员
public static void QueryMembersOnline(long roomId, NIMChatRoomGetMemberType memberType, long timeOffset, int limit, QueryMembersResultDelegate cb);
参数 说明
roomId 聊天室id,即房间号, 必填)
memberType 成员类型
timeOffset 距离当前时间的时间戳
limit 查询数量
cb 结果回调通知
//以测试房间号3001为例
long roomId = 3001;
long timeOffset = 0;//距离当前时间的时间戳
NIMChatRoom.ChatRoomApi.QueryMembersOnline(roomId,NIMChatRoomGetMemberType.kNIMChatRoomGetMemberTypeSolid,timeOffset,20, (room_Id, errorCode, members) =>
{
    ...
});

获取指定聊天室成员信息

该接口可以获取指定多个账号的成员信息MemberInfo,从云端获取。

public static void QueryMemberInfosByIdCollection(long roomId, string[] idCollection, QueryMembersResultDelegate cb);
参数 说明
roomId 聊天室id,即房间号, 必填)
idCollection 成员id集合
cb 结果回调通知
//以测试房间号3001,聊天室成员test1,test2为例
long roomId = 3001;
string[] ids = new string[] ();
ids.add("test1");
ids.add("test2");

NIMChatRoom.ChatRoomApi.QueryMemberInfosByIdCollection(roomId,ids, (room_Id, errorCode, members) =>
{
    ...
});

更新自己的聊天室信息

目前支持更新本人聊天室成员信息。目前只支持昵称,头像和扩展字段的更新。可以设置更新是否通知,如果设置通知,则通过收到聊天室通知消息事件通知给用户。

public static void UpdateMyRoleInfo(long roomId, MemberInfo info, UpdateMyRoleDelegate cb, bool notify, string notify_ext,string jsonExt = null);
参数 说明
roomId 聊天室id,即房间号, 必填)
MemberInfo 成员信息,将需要修改的字段修改为新的字段,目前只支持更新 MemberInfoNick, MemberIcon,Extension 三个属性。详见MemberInfo
cb 结果回调通知
notify 是否聊天室内广播通知,true:通知,此时notify_ext不为空 false:不通知
notify_ext 通知中的自定义字段,长度限制2048
jsonExt 预留字段
//以测试房间号3001,聊天室成员test1,test2为例
long roomId = 3001;
var ri = new MemberInfo
{
    RoomId = roomId,
    Nick = "newNick",
    MemberIcon = "http://xxxx/newIcon.png",
    Extension = null,
};

NIMChatRoom.ChatRoomApi.UpdateMyRoleInfo(roomId,ri, (room_Id, errorCode) =>
{
    ...
},false,null);

聊天室权限管理

设置成员身份标识

设置/取消管理员时, 服务器会通过收到聊天室通知消息事件通知给用户。通知类型查看说明。如果游客被设为管理员,再被取消管理员,该成员不再变为游客,而成为普通成员。

NIMChatRoomMemberAttribute枚举说明

枚举 说明
kNIMChatRoomMemberAttributeAdminister 1 管理员(固定成员),仅创建者拥有操作提升权限
kNIMChatRoomMemberAttributeNomalSold 2 普通成员,操作者必须是创建者或管理员
kNIMChatRoomMemberAttributeBlackList -1 黑名单成员,操作者必须是创建者或管理员
kNIMChatRoomMemberAttributeMuteList -2 被永久禁言成员,操作者必须是创建者或管理员

MemberProperty参数说明

类型 参数 说明
string MemberId 成员账号id
NIMChatRoomMemberAttribute Attribute 成员身份标识,详见NIMChatRoomMemberAttribute
bool Optional 对应设置成员身份标识,1:设置 0:取消设置
int Level 用户等级,对Optional= 1 or 2时才有效
JsonExtension NotifyExtension 操作产生的通知事件中开发者自定义的扩展字段,需要是json字符串
public static void SetMemberPropertyOnline(long roomId, MemberProperty property, SetMemberPropertyDelegate cb);
参数 说明
roomId 聊天室id,即房间号, 必填)
property 成员属性信息,详见MemberProperty
cb 操作结果回调
//以测试房间号3001,聊天室成员test1为例
long roomId = 3001;

//设置/取消管理员
var ri = new MemberProperty
{
    RoomId = roomId,
    MemberId = "test1",
    Attribute = NIMChatRoomMemberAttribute.kNIMChatRoomMemberAttributeAdminister,
    Optional = true,//如果ri.Optional设置为false,则为取消管理员
};

NIMChatRoom.ChatRoomApi.SetMemberPropertyOnline(roomId,ri, (room_Id, errorCode,memberInfo) =>
{
    ...
});

//设置/取消永久禁言
var prop = new MemberProperty
{
    RoomId = roomId,
    MemberId = "test1",
    Attribute = NIMChatRoomMemberAttribute.kNIMChatRoomMemberAttributeMuteList,
    Optional = true,//如果ri.Optional设置为false,则为取消禁言
};

NIMChatRoom.ChatRoomApi.SetMemberPropertyOnline(roomId,prop, (room_Id, errorCode,memberInfo) =>
{
    ...
});

临时禁言成员

此接口提供临时禁言/解除临时禁言成员的功能。如果需要永久禁言,请通过设置成员身份标识接口将用户设置为禁言用户。 如果禁言时长时间到了,自动取消禁言。设置临时禁言成功后的通知消息中,包含的时长是禁言剩余时长。若设置禁言时长为0,表示取消临时禁言。若第一次设置的禁言时长还没结束,又设置第二次临时禁言,以第二次设置的时间开始计时。

public static void TempMuteMember(long roomId, string accid, long duration, TempMuteMemberDelegate cb, bool notify, string notify_ext);
参数 说明
roomId 聊天室id,即房间号, 必填)
accid 成员账号,必填)
duration 临时禁言时长(秒),解禁填0
cb 操作结果回调
notify 是否聊天室内广播通知
notify_ext 通知中的自定义字段,长度限制2048
//以测试房间号3001,聊天室成员test1为例,禁言60秒
long roomId = 3001;
NIMChatRoom.ChatRoomApi.TempMuteMember(roomId,"test1", 60,(room_Id, errorCode,memberInfo) =>
{
    ...
},false,null);

踢出在线成员

踢出成员。仅管理员可以踢;如目标是管理员仅创建者可以踢。可以添加被踢通知扩展字段,这个字段会放到被踢通知的扩展字段中。被踢出聊天室的通知通过聊天室通知事件下发给开发者。

public static void RemoveMember(long roomId, string memberId, string notify, RemoveMemberDelegate cb);
参数 说明
roomId 聊天室id,即房间号, 必填)
memberId 成员账号)
notify 放到事件通知中的扩展字段
cb 操作结果回调
//以测试房间号3001,聊天室成员test1为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.RemoveMember(roomId,"test1","notify" ,(room_Id, errorCode) =>
{
    ...
});

聊天室队列服务

聊天室提供队列服务,针对直播连麦场景使用。

新加(更新)麦序队列元素

聊天室队列服务:加入或者更新队列元素(聊天室管理员权限).当 element_key 不存在时候,调用该接口,表示加入新元素。 当 element_key 已存在的时候,调用该接口,表示修改对应 element_keyelemnet_value

public static void QueueOfferAsync(long roomId, string element_key, string elemnet_value, ChatRoomQueueOfferDelegate cb, string json_extension = "");
参数 说明
roomId 聊天室id,即房间号, 必填)
element_key 新元素的唯一key,长度限制128字节
elemnet_value 新元素内容,长度限制4096字节
cb 操作结果回调
json_extension 扩展参数,预留
//以测试房间号3001为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.QueueOfferAsync(roomId,"key1","value1", (room_Id, errorCode) =>
{
    ...
},null);

取出麦序队列元素

element_key是唯一键,element_key 若为空, 则表示取出头元素。若不为空, 则表示取出指定元素。操作成功后,在回调通知中result获得该元素的key和value。

 public static void QueuePollAsync(long roomId, string element_key, ChatRoomQueuePollDelegate cb, string json_extension = "");
参数 说明
roomId 聊天室id,即房间号, 必填)
element_key 元素的唯一key,长度限制128字节
cb 操作结果回调
json_extension 扩展参数,预留
//以测试房间号3001为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.QueuePollAsync(roomId,"key1",(room_Id, errorCode,result) =>
{
    //result:获取的队列元素的json字符串,如{"key":"key1","value":"value1"}
    ...
},null);

获取所有队列元素

排序列出所有队列元素,在result返回队列元素的json数组。

public static void QueueListAsync(long roomId, ChatRoomQueueListDelegate cb, string json_extension = "");
参数 说明
roomId 聊天室id,即房间号, 必填)
cb 操作结果回调
json_extension 扩展参数,预留
//以测试房间号3001为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.QueueListAsync(roomId,(room_Id, errorCode,result) =>
{
    //result:获取的队列元素的json数组,如[{"key":"key1","value":"value1"},{"key":"key2","value":"value2"}]
    ...
},null);

删除麦序队列

将整个麦序队列删除,需要管理员权限。

public static void QueueDropAsync(long roomId, ChatRoomQueueDropDelegate cb, string json_extension = "");
参数 说明
roomId 聊天室id,即房间号, 必填)
cb 操作结果回调
json_extension 扩展参数,预留
//以测试房间号3001为例
long roomId = 3001;
NIMChatRoom.ChatRoomApi.QueueDropAsync(roomId,(room_Id, errorCode) =>
{
    ...
},null);