网易云信 Unity SDK 开发手册

下载并导入SDK

参照下图路径,将下载的网易云信Unity SDK解压出nim.unitypackage文件,并导入到自己的项目中,如图:

导入时,选择里面所有的文件(如果之前使用过旧版本,请务必先删除旧版本相关的文件)。 导入完成后,必须给每个需要支持的平台添加“UNITY”脚本定义符号,如下图所示:

注意: unitypackage后缀文件不支持中文路径,请在英文路径下双击打开。

Android 项目设置

支持 andorid 系统版本: 4.0 及以上

导入 SDK 后,在 Plugins/Android/ 目录下,可以看到 AndroidManifest里SDK 所需权限:

<uses-permission android:name="android.permission.INTERNET" />
<!-- Getting the state of internet for app!!!. --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- write or read user data file for app!!!. -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

开发者需要将这些SDK权限添加到自己APP的AndroidManifest里。

iOS 项目设置

1. iOS 项目配置

支持 iOS 系统版本:iOS 9.0及以上(实际上最低可支持iOS 6.0,如有需要单独提供)

导出iOS项目时,必须修改如下设置项才能正常使用。不发布到iOS平台可略过此部分

1.1 在Unity中修改项目的编译设置(Build Settings)

按下Ctrl+Shift+B打开Build Settings面板,点击Player Settings ...,切换到Setting for iOS选项卡,选择Other Settings栏, 修改Optimization配置项Script Call Optimization的值为Slow and Safe

1.2 在Xcode中修改导出的iOS工程的编译配置

2. 注意事项

如果Unity SDK是手动配置的话,下面还有几个问题需要注意:

2.1 Bitcode

如果在编译Xcode时,提示bitcode问题,则关闭bitcode或者在Unity里也配置好支持bitcode。

Unity 4.6.9之前的版本不支持bitcode的设置,但是生成的Xcode工程,使用Xcode7打开就会提示bitcode的错误,因为Xcode7默认是开启bitcode的。

3 隐私权限及相关设置

iOS 10要求开发者添加权限申请的描述,否则程序在iOS 10上会出现崩溃。开发者需要用到语音消息,那么就应该添加麦克风权限申请的描述。有两种方式可以添加:

  1. 在Unity的最新版本中,Player Settings页面中就可以添加描述信息。

  2. 在Xcode项目中找到info.plist,打开并添加以下键值对:

    key:Privacy - Microphone Usage Description

    value: 是否允许此app使用麦克风?

SDK接口说明

SDK文件目录说明

SDK C# 脚本讲解

SDK C# 代码在 nim 目录下

此外,还包含一些工具类,如JsonParser.cs提供了JSON系列化相关的辅助方法。

Audio C# 脚本讲解

代码位于nim/Audio子目录下,详见NIMAudioAPI.cs和NIMAudioDef.cs。

接口调用

初始化SDK

在使用SDK提供的功能之前 必须 调用 NIM.ClientAPI.Init 函数进行初始化,函数声明如下:

public static bool Init(string appDataDir, string appInstallDir = "", NimUtility.NimConfig config = null)

Unity demo AppData 目录设置:

public static string AppDataPath
{
    get
    {
        if (string.IsNullOrEmpty(_appDataPath))
        {
            if (Application.platform == RuntimePlatform.IPhonePlayer)
            {
                _appDataPath = Application.persistentDataPath + "/NimUnityDemo";
            }
            else if (Application.platform == RuntimePlatform.Android)
            {
                string androidPathName = "com.netease.nim_unity_android_demo";
                if (System.IO.Directory.Exists("/sdcard"))
                    _appDataPath = Path.Combine("/sdcard", androidPathName);
                else
                    _appDataPath = Path.Combine(Application.persistentDataPath, androidPathName);
            }
            else if (Application.platform == RuntimePlatform.WindowsEditor || 
            Application.platform == RuntimePlatform.WindowsPlayer)
            {
                _appDataPath = "NimUnityDemo";
            }
            Debug.Log("AppDataPath:" + _appDataPath);
        }
        return _appDataPath;
    }
}

清理SDK

在程序退出前,调用函数NIM.ClientAPI.Cleanup()接口进行NIM SDK 的清理工作。在用户已经登录的情况下,Cleanup 需要在登出完成后才可以调用, 避免造成内存访问冲突。如下代码是典型的使用方法 (Logout 异步执行,需要在回调函数中执行Cleanup)

public void LogoutAndCleanup()
{
    NIM.ClientAPI.Logout(NIM.NIMLogoutType.kNIMLogoutAppExit, OnAppExitLogoutCompleted(result)=>
    {
        ClientAPI.Cleanup();
    });
}

登录与登出

首次登录

SDK 登录后会同步群信息,离线消息,漫游消息,系统通知等数据,所以首次登录前需要提前注册一些全局回调(具体说明请参阅API 文档)。

登录

调用函数 public static void Login(string appKey, string account, string token, LoginResultDelegate handler = null) 执行登录, 需要设置 LoginResultDelegate 委托来获取登录过程的不同状态。登录过程中的不同步骤和返回的错误码参考 枚举 NIMLoginStepResponseCode。 当登录步骤为 NIMLoginStep.kNIMLoginStepLogin 并且 错误码为 ResponseCode.kNIMResSuccess 时标明登录成功。

登录成功后需要注册一些回调函数或者事件接收来自sdk的通知,使应用程序能够做出合理的响应。

数据同步

NIM SDK 在登录后会同步群信息,离线消息,漫游消息,系统通知等数据。

class NIM.DataSync.DataSyncAPI

public delegate void DataSyncDelegate(NIMDataSyncType syncType, NIMDataSyncStatus status, string jsonAttachment);
public static void RegCompleteCb(DataSyncDelegate cb)

NIMDataSyncType 定义了同步数据的类型,数据同步完成时sdk会调用注册的委托通知应用程序。

被踢

云信内置踢人策略为:移动端(Android,iOS)互踢,桌面端(PC,Web)互踢,移动端和桌面端共存。 如果当前的互踢策略无法满足业务需求的话,可以联系我们取消内置互踢,根据多端登录的回调和当前的设备列表,判断本设备是否需要被踢出。如果需要踢出,直接调用登出接口并在界面上给出相关提示即可。

public delegate void KickoutResultHandler(NIMKickoutResult result);
NIM.ClientAPI.RegKickoutCb(KickoutResultHandler) 

调用 RegKickoutCb 注册委托后,在当前账号被其他客户端踢下线时会执行委托函数,参数中包含了对方的客户端类型和被踢掉的原因。

多端登录

public static void RegMultiSpotLoginNotifyCb(MultiSpotLoginNotifyResultHandler handler)

调用该函数注册委托后,当用户在某个客户端登录时,其他没有被踢掉的端会触发回调。在登录成功时,登录回调函数的参数里也包含了当前正在登录的其他设备。

掉线与自动重连

调用函数

public static void RegDisconnectedCb(Action handler)

注册账号掉线的回调函数,在掉线后sdk会尝试自动进行重新连接和登录,重连的回调函数通过

public static void RegAutoReloginCb(LoginResultDelegate handler, string jsonExtension = null)

注册。由于sdk已经处理了掉线自动重连,应用程序在收到掉线的通知后通常只需要在程序界面上告知用户即可。

注意:

SDK的回调函数并不会保存用户调用接口时的线程状态,所以用户需要自行切换线程,登录回调不在主线程,如果要更新UI数据需要将任务抛到主线程中执行。

注销/登出

应用层登出/注销自己的账号时需要调用 SDK 的登出操作 public static void Logout(NIMLogoutType logoutType, LogoutResultDelegate @delegate), 该操作会通知云信服务器进行 APNS 推送信息的解绑操作, 避免用户已登出但推送依然发送到当前设备的情况发生。在调用 Logout 时需要设置正确的 NIMLogoutType 参数,类型说明请参考API文档。

基础消息功能

消息功能概述

SDK 中 NIMIMMessage 是所有消息的基类,目前提供以下几种消息类型:

NIMTextMessage 文本消息
NIMImageMessage 图片消息
NIMFileMessage 文件消息
NIMAudioMessage 语音消息
NIMCustomMessage 自定义消息

发送消息

构造消息对象

使用适当的类型构造消息对象,设置消息属性,所有消息类型以下属性必须正确设置:

SessionType:NIMSessionType 会话类型,双人会话或者是群组会话
ReceiverID:string 接收方账号
ClientMsgID:string 消息ID,sdk默认使用GUID,用户可以自定义生成策略
ResendFlag: int 消息重发标记,消息发送失败需要重新发送时需要设置为 1 ,第一次发送保持默认值 0 即可

文本消息: TextContent 消息内容

包含附件的消息类型(图片、文件、语音) LocalFilePath 字段必须设置,为发送文件的完整路径

消息发送属性设置

SDK 提供消息发送设置来满足开发者的对服务器自定义需求

消息允许在消息历史中拉取开关 ServerSaveHistory

默认为 True 。正常而言所有消息都会出现在通过 MessagelogAPI.QueryMsglogOnline 返回的结果中,但是可以通过设置这个值来使得消息不出现在这其中。

消息支持漫游开关 Roaming

默认为 True 。 消息漫游的概念是指一定时间内发送的消息可以在另一端被同步到,以保证最大限度的消息同步。(如 iOS 上收发的消息过了一天登录 PC 仍旧会收到,这种消息我们称之为漫游消息)

消息支持多端同步开关 MultiSync

默认为 True 。在默认情况下,如果用户在 iOS 端和其他端(如 PC )同时登录一个帐号,那么 iOS 端发送的消息会被同步到其他端,同样其他端发送的消息也会被同步到 iOS 端。但是需要注意的是因为 iOS 经常会退到后台,所以其他端发送的消息在 iOS 断线后是通过漫游消息来同步到的。

消息被计入未读开关 NeedCounting

默认为 True 。默认情况下,用户收到的所有消息都会被计入未读。设置这个为 False 后,对应的消息被对端接受后将不计入未读消息计数内。本地写消息时,也可以用这个字段配置写入后是否计入未读。

消息需要被推送开关 NeedPush

默认为True。设置这个为 False 后,消息将不再有苹果推送通知。

消息推送前缀开关(一般为昵称) NeedPushNick

默认为True。将这个字段设为False,推送消息将不带有前缀,如推送消息 “ 小明:今天吃什么? ” 中的 “ 小明:” 将被省略。

消息是否需要抄送 Routable

默认为True。将这个字段设为False, 则不会抄送此消息给开发者的服务器(如果有配置的话)

发送消息

调用函数 NIM.TalkAPI.SendMessage(NIMIMMessage) 将创建的消息对象发送出去。

sdk 提供了消息发送的事件通知:

public static EventHandler<MessageArcEventArgs> OnSendMessageCompleted { get; set; }

注册该事件,能够获取消息的发送状态。该事件为全局静态变量,在登录成功后注册一次即可。

接收消息

消息接收由底层统一处理,SDK开放了一个事件通知 NIM.TalkAPI.OnReceiveMessageHandler 给外部注册,事件参数中包含了详细的消息信息。

提前注册好接收消息的回调函数。以下代码注册消息接收回调和处理函数:

NIM.TalkAPI.OnReceiveMessageHandler += ReceiveMessageHandler;
void ReceiveMessageHandler(object sender, NIM.NIMReceiveMessageEventArgs args)
{
    //处理自定义消息
    if (args.Message != null && args.Message.MessageContent.MessageType == NIMMessageType.kNIMMessageTypeCustom)
    {
        var m = args.Message.MessageContent as NIMCustomMessage<object>;
        //CustomContent 是一个JObject对象,可以根据Extention字段或者其他方法来决定如何解析
        var jObj = m.CustomContent as JObject;
        if (m.Extention == "1")
        {
            var x = jObj.ToObject<CustomMessageContent>();
            if (x != null)
            {

            }
        }
    }
    if (args.Message != null && args.Message.MessageContent.MessageType == NIM.NIMMessageType.kNIMMessageTypeText)
    {
        Action action = () =>
        {
            var m = args.Message.MessageContent as NIM.NIMTextMessage;
            this.listBox1.Items.Add(new string(' ', 50) + m.TextContent);
        };
        this.Invoke(action);
    }
}

已读回执

收到消息并读取后向对方发送一条已读回执,表示已经阅读了该条消息,对放将收到此回执。 调用 public static void SendReceipt(NIMIMMessage msg, MsglogStatusChangedDelegate cb, string jsonExtension = null) 发送回执。

自定义消息

sdk支持用户自己增加新的消息类型,提供了自定义消息的基类 NIMCustomMessage 便于进行扩展。如下所示代码 CustomMessageContent 是自定义的消息体,将发送的字段用 Newtonsoft.Json.JsonProperty 属性进行标记,这样方便序列化操作,Extention 用于发送附加内容或者用来区别消息类型。 自定义消息的收发与普通消息保持一致,使用相同的函数。

class CustomMessageContent
{
    [Newtonsoft.Json.JsonProperty("text")]
    public string Text { get; set; }

    [Newtonsoft.Json.JsonProperty("imagepath")]
    public string ImagePath { get; set; }
}

class ImageTextMessage : NIMCustomMessage<CustomMessageContent>
{
    public override CustomMessageContent CustomContent { get; set; }

    public ImageTextMessage()
    {
        MessageType = NIMMessageType.kNIMMessageTypeCustom;
        CustomContent = new CustomMessageContent();
        Extention = "1";
    }
}

语音消息

在使用语音录制和播放功能时,首先应调用API接口InitModule进行初始化。 在退出程序前,调用API接口UnInitModule释放语音模块。

用户信息管理

NIM.User.UserAPI 提供用户资料管理功能,用户信息为 UserNameCard,定义了用户资料的所有信息。

获取本地用户资料

public static void GetUserNameCard(List<string> accountIdList, GetUserNameCardResultDelegate resultDelegate)

用户资料除自己之外,不保证其他用户资料实时更新。其他用户数据更新时机为:

获取服务器用户资料

public static void QueryUserNameCardOnline(List<string> accountIdList, GetUserNameCardResultDelegate resultDelegate)

此接口可以批量从服务器获取用户资料,出于用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。

更新自己的信息

public static void UpdateMyCard(UserNameCard card, UpdateNameCardResultDelegate d)

更新自己的信息时通常先调用 GetUserNameCard 获取到自己的原始信息,然后更新要修改的字段,把这个对象传递给上述函数。

用户信息变化通知

通过注册事件 UserNameCardChangedHandler 可以获取所有用户资料的变化通知。

好友关系管理

NIM.Friend.FriendAPI 提供好友关系管理功能。NIM.Friend.NIMFriendProfile 定义了好友关系的所有信息。

获取好友列表

public static void GetFriendsList(GetFriendsListResultDelegate cb)

好友列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。在函数的回调函数中可以获取到 NIM.Friend.NIMFriendProfile 对象的列表, 根据好友的ID通过调用 GetUserNameCard 获取用户的详细资料。

好友请求

public static void ProcessFriendRequest(string accid, NIMVerifyType verifyType, string msg, FriendOperationDelegate cb)

以下代码演示如何通过系统通知处理好友请求:

//注册系统通知
NIM.SysMessage.SysMsgAPI.ReceiveSysMsgHandler += OnReceiveSysMessage;

private void OnReceiveSysMessage(object sender, NIMSysMsgEventArgs e)
{
    var _sysMessage = e.Message;
    string _processFriendReqResult;
    //kNIMSysMsgTypeFriendAdd 表示为好友请求
    if (_sysMessage.Content.MsgType == NIMSysMsgType.kNIMSysMsgTypeFriendAdd)
    {
        //Attachment 字段为json串 {"vt":NIMVerifyType},key 为 "vt",value 为 枚举类型 `NIMVerifyType`
        string attach = _sysMessage.Content.Attachment;
        string senderId = _sysMessage.Content.SenderId;
        FriendRequestVerify type = FriendRequestVerify.Deserialize(attach);
        if (type.VerifyType == NIMVerifyType.kNIMVerifyTypeAsk)
        {
            _processFriendReqResult = string.Format("{0} 加你为好友,需要通过验证", senderId);
        }
        if(type.VerifyType == NIMVerifyType.kNIMVerifyTypeAdd)
        {
            _processFriendReqResult = string.Format("{0} 加你为好友", senderId);
        }
        if (type.VerifyType == NIMVerifyType.kNIMVerifyTypeReject)
        {
            _processFriendReqResult = string.Format("{0} 拒绝了你的好友请求", senderId);
        }
        if (type.VerifyType == NIMVerifyType.kNIMVerifyTypeAgree)
        {
            _processFriendReqResult = string.Format("{0} 同意了你的好友请求", senderId);
        }
    }
}

删除好友

用户与用户之间可以解除好友关系,修改成功后会同时修改本地缓存数据。

public static void DeleteFriend(string accid, FriendOperationDelegate cb)

好友关系变更通知

通过注册 FriendProfileChangedHandler,在好友关系发生变化时会收到通知。好友关系变化包括以下类型:

群组功能

群组功能对应的管理类为 NIM.Team.TeamAPI,提供了普通群 (Normal) 以及高级群 (Advanced) 两种形式的群聊功能。高级群拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。推荐 APP 开发时只选择一种群类型进行开发。普通群和高级群在原则上是不能互相转换的,他们的群类型在创建时就已经确定。在 SDK 2.4.0 版本后,高级群可以拥有普通群的全部功能,推荐使用高级群进行开发。

获取群组

NIM SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。 SDK 提供了批量获取自己的群接口、以及根据单个群 id 查询的接口。同样 SDK 也提供了远程获取群信息的接口。 类NIMTeamInfo 封装了群信息。

本地获取

public static void QueryCachedTeamInfo(string tid, QueryCachedTeamInfoResultDelegate action)

在线获取

public static void QueryTeamInfoOnline(string tid, TeamChangedNotificationDelegate action)

创建群组

public static void CreateTeam(NIMTeamInfo teamInfo, string[] idList, string postscript, TeamChangedNotificationDelegate action)

NIMTeamInfo 包含群组的详细信息,通过设置该对象可以指定群类型,群组权限,群资料等信息;如果设置了 postscript,会发送给群中的每个成员。

加入群组

用户可以通过被动接受邀请主动加入两种方式进入群组。

邀请用户入群

public static void Invite(string tid, string[] idList, string postscript, TeamChangedNotificationDelegate action)

请求完成后,如果是普通群,被邀请者将直接入群;如果是高级群,云信服务器会下发一条系统消息到目标用户,目标用户可以选择同意或者拒绝入群。

主动申请入群(仅限高级群)

public static void ApplyForJoiningTeam(string tid, string reason, TeamChangedNotificationDelegate action)

请求完成后,云信服务器会下发一条系统消息给群管理员,管理员可以选择通过或者拒绝申请。

编辑群组资料

普通成员可以修改自己的群资料,管理员以上权限的群成员可以修改他人群资料以及群组信息。

public static void UpdateTeamInfo(string tid, NIMTeamInfo info, TeamChangedNotificationDelegate action)

群组权限管理(仅限高级群)

高级群群主可以对群进行权限管理。

添加管理员

public static void AddTeamManagers(string tid, string[] managerIdArray, TeamChangedNotificationDelegate action)

将 managerIdArray 中包含的账号全部设置为群管理员

移除管理员

public static void RemoveTeamManagers(string tid, string[] managerIdArray, TeamChangedNotificationDelegate action)

转让群

public static void TransferTeamAdmin(string tid, string newOwnerId, bool leaveTeam, TeamChangedNotificationDelegate action)

当群管理员需要把其他人设置为管理员或者在退出群时需要调用该函数,将管理员权限转让给其他成员。

群组成员

NIMTeamMemberInfo 封装群组成员信息。SDK 提供了查询群成员信息、修改成员属性、用户退群、踢出指定群成员等功能。

群组通知

当发生枚举 NIMNotificationType 中定义的事件时会触发群组通知,通过注册 TeamEventNotificationHandler 接收通知。群通知是接收型的消息,开发者不应该自己手动去创建和发送群通知消息。

聊天室

集成聊天室必读

聊天室功能概述

聊天室特点:

初始化与清理

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

进入聊天室

进入聊天室前,需要通过调用IM模块接口获取进入聊天室的权限,注意:这里调用的是 IM SDK 模块的接口

NIM.Plugin.ChatRoom.RequestLoginInfo(roomId, (response, authResult) =>
{
    if (response == NIM.ResponseCode.kNIMResSuccess)
    {

    }
});

获取权限成功后会得到权限信息(回调函数第二个参数authResult),接下去再调用进入聊天室的接口。

void foo()
{
    NIMChatRoom.LoginData data = new NIMChatRoom.LoginData();
    data.Nick = "【C# Client】";
    NIMChatRoom.ChatRoomApi.Login(roomId, authResult, data);
}

进入聊天室前需要提前注册一些全局回调(具体说明请参阅API 文档),以下以注册进入聊天室结果通知回调为例:

void ChatRoomApi_LoginHandler(NIMChatRoom.NIMChatRoomLoginStep loginStep, NIM.ResponseCode errorCode, NIMChatRoom.ChatRoomInfo roomInfo, NIMChatRoom.MemberInfo memberInfo)
{
    if (loginStep == NIMChatRoom.NIMChatRoomLoginStep.kNIMChatRoomLoginStepRoomAuthOver && errorCode == NIM.ResponseCode.kNIMResSuccess)
    {
    }
    if (errorCode != NIM.ResponseCode.kNIMResSuccess)
    {
        //TODO:进入聊天室出错
    }
}

void foo()
{
    NIMChatRoom.ChatRoomApi.LoginHandler += ChatRoomApi_LoginHandler;
}

离开聊天室(被踢)

离开聊天室需调用 NIMChatRoom.ChatRoomApi.Exit(roomId);开发者可以注册 NIMChatRoom.ChatRoomApi.ExitHandler 事件获取离开聊天室的结果。

void ChatRoomApi_ExitHandler(long roomId, NIM.ResponseCode errorCode, NIMChatRoom.NIMChatRoomExitReason reason)
{
    if (errorCode == NIM.ResponseCode.kNIMResSuccess)
    {
    }
}

void foo()
{
    NIMChatRoom.ChatRoomApi.ExitHandler += ChatRoomApi_ExitHandler;
}

除了被多端、主播和管理员踢出以外,聊天室被关闭或者被解散也会收到离开聊天室的通知。

聊天室连接情况通知

开发者可以通过注册事件 NIMChatRoom.ChatRoomApi.LinkStateChanged 获取聊天室网络连接状况

void ChatRoomApi_LinkStateChanged(long roomId, NIMChatRoomLinkCondition state)
{

}

void foo()
{
    NIMChatRoom.ChatRoomApi.LinkStateChanged += ChatRoomApi_LinkStateChanged;
}

获取/更新聊天室信息

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

void foo()
{
    NIMChatRoom.ChatRoomApi.GetRoomInfo(roomId, (room_Id, errorCode, info) =>
    {
    });
}

更新聊天室信息(需要管理员权限)

public static void UpdateRoomInfo(long roomId, ChatRoomInfo info, UpdateRoomInfoDelegate cb, bool notify, string notify_ext)

目前只支持更新ChatRoomInfo 的RoomName,Announcement,BroadcastUrl,Extension 四个属性。

更新自己的信息

ChatRoomApi.UpdateMyRoleInfo.UpdateMyRoleInfo(long roomId, MemberInfo info, UpdateMyRoleDelegate cb, bool notify, string notify_ext)

目前只支持更新 MemberInfo 的 Nick, MemberIcon,Extension 三个属性

聊天室消息收发

聊天室SDK 支持文本、图片、音频、视频、地理位置、通知消息、提醒消息、文件消息和自定义消息等多种种类型消息。

查询消息历史

SDK 本地不缓存任何消息历史,只提供向服务器查询消息历史的接口,因此接口调用遵循服务器接口使用频率限制。

void foo()
{
    NIMChatRoom.ChatRoomApi.QueryMessageHistoryOnline(roomId, 0, 50, (room_Id, errorCode, messages) =>
    {
        if (errorCode == NIM.ResponseCode.kNIMResSuccess)
        {
            //TODO:查询成功
        }

    });
}

获取聊天室在线成员

SDK 本地不缓存聊天室成员信息,只提供向服务器查询的接口,因此接口调用遵循服务器接口使用频率限制。

SDK 提供了两种获取聊天室在线成员信息的接口:

踢出在线成员

void foo()
{
    NIMChatRoom.ChatRoomApi.RemoveMember(roomId, "userId", "踢出提示文本", (room_Id, errorCode) =>
    {
    });
}

聊天室权限设置

设置管理员、设置普通成员、设置黑名单、禁言通过调用同一个接口 SetMemberPropertyOnline实现。

聊天室队列服务