聊天室

更新时间: 2023/10/17 03:52:33

聊天室功能概述

聊天室简介

聊天室是一种比群组更加松散、开放的形态,类似于一个广场,没有严格的准入机制,用户进出自由,一般来说也没有太固定的成员组织架构。典型的应用场景即我们非常熟悉的娱乐直播、教育直播内的聊天室。聊天室是一项付费拓展能力,需要在选购IM基础功能的情况下增购。

聊天室特点

  • 进入聊天室时必须建立新的连接,退出聊天室或者被踢会断开连接,在聊天室中掉线会有自动重连,开发者需要监听聊天室连接状态来做出正确的界面表现。
  • 支持聊天人数无上限。
  • 支持同时进入多个聊天室,会建立多个连接。
  • 不支持多端进入同一个聊天室,后进入的客户端会将前一个踢掉。
  • 断开聊天室连接后,服务器不会再推送该聊天室的消息给此用户。
  • 聊天室成员分固定成员和游客两种类型。
  • 目前服务器控制最多支持同时进入10个聊天室,超过10个服务器会将之前登录的聊天室踢出一个

所有的聊天室的事件和回调都不在主线程,如果需要处理界面元素,需要抛任务到主线程。

初始化与清理

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

建议 全局只调用一次 NIMChatRoom.ChatRoomApi.Cleanup()

C#private bool InitSDK()
{
    //create a NIMConfig object if need
    var config = new NimUtility.NimConfig();
    config.AppKey = "YOUR APP KEY";
    config.CommonSetting = new NimUtility.SdkCommonSetting
    {
        MaxLoginRetry = 3,//relogin times
        PredownloadAttachmentThumbnail = true, //auto download the thumbnails for the image message
        PreloadImageQuality = 100, // the quality of the image thumbnail
        PreloadImageResize = "100x100", //the size of the image thumbnail
        SyncSessionAck = true,
        CustomTimeout = 15,// login timeout,seconds
    };

    //the appDataPath must be writable and readable.Normally,you can use `Application.persistentDataPath` to save log files and cache files.
    //the appInstallPath is invalid,you should set `string.Empty` for it
    //the config can be null.
    //you should call `Init` before you call `login`.
    string appDataPath = Path.Combine(Application.persistentDataPath, "Sample");
    bool result = NIM.ClientAPI.Init(appDataPath, string.Empty, config);
    if (!result)
    {
        Debug.LogError($"NIM.ClientAPI.Init failed");
        return false;
    }
    Debug.Log($"NIM.ClientAPI.Init success!!");

    //Next,you should initialize chat room plugin.
    var chatRoomConfig = new NIMChatRoom.NIMChatRoomConfig();
    chatRoomConfig.AppKey = "YOUR APP KEY";
    NIMChatRoom.ChatRoomApi.Init(chatRoomConfig);

    return true;
}

聊天室事件通知

聊天室的登录、登出,收到消息等等操作都是通过监听全局事件来通知给调用者。必须在调用登录操作之前,先监听所有的聊天室事件通知。建议在初始化完成后就注册事件监听。退出聊天室之后,如果想要进入同一个聊天室,需要等待该聊天室退出结束之后才能再次进入。

登录聊天室事件

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

NIMChatRoomLoginStep枚举说明

枚举 说明
kNIMChatRoomLoginStepInit 1 本地服务初始化
kNIMChatRoomLoginStepServerConnecting 2 服务器连接中
kNIMChatRoomLoginStepServerConnectOver 3 服务器连接结束,连接结果error_code
kNIMChatRoomLoginStepRoomAuthing 4 聊天室鉴权中
kNIMChatRoomLoginStepRoomAuthOver 5 聊天室鉴权结束,鉴权结果见error_code, error_code非408则需要开发者重新请求聊天室登录信息
  • API 原型
public static event ChatRoomLoginDelegate LoginHandler;

  • 示例
void OnLoginHandler(NIMChatRoomLoginStep loginStep, ResponseCode errorCode, ChatRoomInfo roomInfo, MemberInfo memberInfo)
{
    //roomInfo,memberInfo有可能是null,需要判断是否为null,否则直接使用会导致NullReferenceException,从而导致回调线程异常,使其无法工作。
    if (loginStep == NIMChatRoom.NIMChatRoomLoginStep.kNIMChatRoomLoginStepRoomAuthOver 
      && errorCode == NIM.ResponseCode.kNIMResSuccess)
    {
         //进入聊天室成功
    }
    if (errorCode != NIM.ResponseCode.kNIMResSuccess)
    {
        //进入聊天室出错
    }
}
//监听登录事件
NIMChatRoom.ChatRoomApi.LoginHandler += OnLoginHandler;

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

退出聊天室事件

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

NIMChatRoomExitReason枚举参数说明

枚举 说明
kNIMChatRoomExitReasonExit 0 自行退出,重登前需要重新请求登录
kNIMChatRoomExitReasonRoomInvalid 1 聊天室已经被解散,重登前需要重新请求登录
kNIMChatRoomExitReasonKickByManager 2 被管理员踢出,重登前需要重新请求登录
kNIMChatRoomExitReasonKickByMultiSpot 3 多端登录被踢
kNIMChatRoomExitReasonIllegalState 4 当前链接状态异常
kNIMChatRoomExitReasonBeBlacklisted 5 被管理员加入黑名单
  • API 原型
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 连接失败,尝试重连,断网之后会通知此状态,等网络恢复会重新通知登录事件LoginHandler
kNIMChatRoomLinkConditionDead 2 开发者需要重新申请聊天室登录信息
  • API 原型
 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(客户端)(暂不支持)
  • API 原型
public static event ReceiveMessageDelegate ReceiveMessageHandler;

  • 示例
void OnRecvMessage(long roomId, Message message)
{
    ...
}
//监听事件
NIM.NIMChatRoom.ChatRoomApi.ReceiveMessageHandler += OnRecvMessage;

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

发送消息结果通知

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

  • API 原型
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 当通知类型为成员进入时,代表临时禁言时长(秒),其他通知不带此数据
  • API 原型
 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 模块的接口

  • API 原型
public static void RequestLoginInfo(long roomId, RequestChatRoomLoginInfoDelegate cb,string json_ext="");
  • 参数说明
参数 说明
roomId 聊天室id,即房间号, 必填)
cb 结果通知回调
json_ext 扩展信息,预留
  • API 示例
//以测试房间号3001为例
long roomId = 3001;
string _token = "";
NIM.Plugin.ChatRoom.RequestLoginInfo(roomId, (response, authResult) =>
{
    if (response == NIM.ResponseCode.kNIMResSuccess)
    {
        _token = authResult; //此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);
        });
    }
});

以上示例代码中的LoomLoom.cs,是一个开源脚本,可以帮助开发者在 Unity 开发中便捷地调用主线程。Loom.cs 的 github 仓库地址:https://github.com/ufz-vislab/unity/blob/master/Misc/Loom.cs

登录聊天室

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

LoginData参数说明

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

查阅示例代码

离开聊天室

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

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

发送消息

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

  • 为保证用户体验(如避免服务器过载),目前针对消息接收,有两套流控机制。第一套针对普通消息,聊天室用户每秒至多可接收20条,超过部分会因为流控随机丢弃。第二套针对高优先级消息,每秒至多接收10条,超过部分无法保证不丢失。
  • 为避免丢失重要消息(通常为服务端消息),可将发送聊天室消息的 HighPriority 参数设置为 true 实现高优先级接收服务端消息,进而保证高优先级消息流控上限内(每秒10条)的重要消息不丢失。详情请参见发送聊天室消息中的 HighPriority 参数说明。
  • 1秒内默认最多可调用该接口100次。如需上调上限,请在官网首页通过微信、在线消息或电话等方式咨询商务人员。
  • API 原型
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支持查询在云端的聊天室历史消息记录。

  • API 原型
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:不禁言
  • API 原型
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 四个属性。同时,在更新时可以设置是否在聊天室内广播通知。

  • API 原型
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 管理员
  • API 原型
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,从云端获取。

  • API 原型
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) =>
{
	...
});

更新自己的聊天室信息

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

  • API 原型
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字符串
  • API 原型
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, errorCodememberInfo) =>
{
	...
});

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

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

临时禁言成员

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

  • API 原型
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, errorCodememberInfo) =>
{
	...
},false,null);

踢出在线成员

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

  • API 原型
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

  • API 原型
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。

  • API 原型
 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数组。

  • API 原型
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);

删除麦序队列

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

  • API 原型
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);

清理聊天室

聊天室资源清理。全局只调用一次。在NIM.ClientApi.Cleanup之前调用。

  • API 原型
public static void Cleanup();
  • 示例
private void OnApplicationQuit()
{
    //You Must call logout and cleanup resources for IM SDK.
    //In this,you should call synchronous method.
    // `Cleanup` should be called once only 
    //Firstly,you should exit chat room.
    NIMChatRoom.ChatRoomApi.Exit(CHATROOM_ID);
    NIM.ClientAPI.Logout(NIMLogoutType.kNIMLogoutAppExit);

    //Cleanup chat room plugin and then cleanup IM resources.
    NIMChatRoom.ChatRoomApi.Cleanup();
    NIM.ClientAPI.Cleanup();
}
此文档是否对你有帮助?
有帮助
去反馈
  • 聊天室功能概述
  • 聊天室简介
  • 聊天室特点
  • 初始化与清理
  • 聊天室事件通知
  • 登录聊天室事件
  • 退出聊天室事件
  • 聊天室连接状态更改通知
  • 接收消息事件
  • 发送消息结果通知
  • 收到聊天室通知消息事件
  • 进入聊天室
  • 获取token
  • 登录聊天室
  • 离开聊天室
  • 发送消息
  • 查询云端历史消息记录
  • 聊天室管理
  • 获取聊天室信息
  • 更新聊天室信息
  • 获取聊天室成员列表
  • 获取指定聊天室成员信息
  • 更新自己的聊天室信息
  • 聊天室权限管理
  • 设置成员身份标识
  • 临时禁言成员
  • 踢出在线成员
  • 聊天室队列服务
  • 新加(更新)麦序队列元素
  • 取出麦序队列元素
  • 获取所有队列元素
  • 删除麦序队列
  • 清理聊天室