{"id":18438173,"url":"https://github.com/easemob/emclient-unity","last_synced_at":"2025-04-07T20:35:08.294Z","repository":{"id":37429659,"uuid":"359765626","full_name":"easemob/emclient-unity","owner":"easemob","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-17T06:11:55.000Z","size":185196,"stargazers_count":5,"open_issues_count":1,"forks_count":6,"subscribers_count":11,"default_branch":"new","last_synced_at":"2025-03-17T07:27:19.399Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easemob.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-20T09:55:25.000Z","updated_at":"2025-03-17T06:12:00.000Z","dependencies_parsed_at":"2025-02-14T08:24:55.044Z","dependency_job_id":"b406e972-a674-4453-b4b3-7fb94290394b","html_url":"https://github.com/easemob/emclient-unity","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Femclient-unity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Femclient-unity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Femclient-unity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Femclient-unity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easemob","download_url":"https://codeload.github.com/easemob/emclient-unity/tar.gz/refs/heads/new","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247726270,"owners_count":20985858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T06:18:56.735Z","updated_at":"2025-04-07T20:35:03.212Z","avatar_url":"https://github.com/easemob.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 环信IM Unity SDK\n\n文章主要讲解环信 IM Unity SDK 如何使用。\n\n[环信官网](https://www.easemob.com/)\n\n[环信Unity集成文档](https://doc.easemob.com/document/unity/quickstart.html)\n\n[环信Windows集成文档](https://doc.easemob.com/document/windows/quickstart.html)\n\n[环信iOS集成文档](http://docs-im.easemob.com/im/ios/sdk/prepare)\n\n[环信Android集成文档](http://docs-im.easemob.com/im/android/sdk/import)\n\n源码地址: [Github](https://github.com/easemob/emclient-unity)  \n任何问题可以通过 [Github Issues](https://github.com/easemob/emclient-unity/issues) 提问\n\n**QQ群: 891289413**\n\n## 前期准备\n\n如果您还没有 Appkey，可以前往[环信官网](https://www.easemob.com/)注册[即时通讯云](https://console.easemob.com/user/register)。\n\n进入 console -\u003e 添加应用 -\u003e Appkey 获取 `Appkey`。\n\n### 下载 SDK\n\n[UnitySDK下载页面](https://www.easemob.com/download/im)\n\n#### 导入SDK 到 Unity\n\n`Assets` -\u003e `Import Package` -\u003e `Custom Package..`  -\u003e `imUnitySDK.unitypackage`\n\n## SDK讲解\n\n- `SDKClient` 用于管理sdk各个模块和一些账号相关的操作，如注册，登录，退出;\n- `IChatManager`用于管理聊天相关操作，如发送消息，接收消息，发送已读回执，获取会话列表等;\n- `IContactManager` 用于管理通讯录相关操作，如获取通讯录列表，添加好友，删除好友等;\n- `IGroupManager`用于群组相关操作，如获取群组列表，加入群组，离开群组等;\n- `IRoomManager`用于管理聊天室，如获取聊天室列表;\n\n\n### SDKClient\n\n#### 初始化\n\n```C#\n// 设置 Appkey\nOptions options = new Options(appKey: \"easemob-demo#easeim\");\n\n// 初始化 sdk\nSDKClient.Instance.InitWithOptions(options);\n```\n\n\n#### 注册\n\n```C#\nSDKClient.Instance.CreateAccount(\"username\", \"password\", new CallBack(\n    onSuccess: () =\u003e {\n        Debug.Log(\"执行成功\");\n    },\n    onError: (code, desc) =\u003e {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e客户端注册需要将注册方式设置为`开放注册`，具体说明请参考文档[用户管理](http://docs-im.easemob.com/im/server/ready/user#%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86)。\n\n#### 登录\n\n```C#\nSDKClient.Instance.Login(\"username\", \"password\", handle: new CallBack(\n    onSuccess: () =\u003e {\n        Debug.Log(\"执行成功\");\n    },\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n}\n```\n\n#### 获取当前登录环信id\n\n```C#\nString currentUsername = SDKClient.Instance.CurrentUsername();\n```\n\n#### 退出\n\n```C#\nSDKClient.Instance.Logout(true, new CallBack(\n    onSuccess: () =\u003e {\n        Debug.Log(\"执行成功\");\n    },\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e退出也有失败的情况，需要确定是否失败。  \n\u003e注册环信id详细说明请参考文档[用户体系集成](http://docs-im.easemob.com/im/server/ready/user)。\n\n\n#### 监听服务器连接状态\n\n```C#\npublic class TestSDK : MonoBehaviour, IConnectionDelegate\n{\n\n    private void Start()\n    {\n        // 添加监听，需在sdk 初始化后调用\n        SDKClient.Instance.AddConnectionDelegate(this);\n    }\n\n    private void OnDestroy()\n    {\n        // 移除监听\n        SDKClient.Instance.DeleteConnectionDelegate(this);\n    }\n\n    // 成功连接回调\n    public void OnConnected()\n    {\n\n    }\n\n    // 服务器断开连接时触发的回调\n    public void OnDisconnected()\n    {\n\n    }\n\n    // 当前登录账号在其它设备登录时会接收到此回调\n    public void OnLoggedOtherDevice(string deviceName)\n    {\n\n    }\n\n    // 当前登录账号已经被从服务器端删除时会收到该回调\n    public void OnRemovedFromServer()\n    {\n\n    }\n\n    // 当前用户账号被禁用时会收到该回调\n    public void OnForbidByServer()\n    {\n\n    }\n\n    // 当前登录账号因密码被修改被强制退出\n    public void OnChangedIMPwd()\n    {\n\n    }\n\n    // 当前登录账号因达到登录设备数量上限被强制退出\n    public void OnLoginTooManyDevice()\n    {\n\n    }\n\n    // 当前登录设备账号被登录其他设备的同账号踢下线\n    public void OnKickedByOtherDevice()\n    {\n\n    }\n\n    // 当前登录设备账号因鉴权失败强制退出\n    public void OnAuthFailed()\n    {\n\n    }\n\n    // Token 过期回调\n    public void OnTokenExpired()\n    {\n\n    }\n\n    // Token 即将过期回调\n    public void OnTokenWillExpire()\n    {\n\n    }\n\n    // App 激活数量已达到上限值\n    public void OnAppActiveNumberReachLimitation()\n    {\n\n    }\n}\n\n```\n\n#### 获取当前连接状态\n\n```C#\nbool isConnected = SDKClient.Instance.IsConnected;\n```\n\n#### 获取 unity sdk 版本号\n\n```C#\nstring version = SDKClient.Instance.SdkVersion;\n```\n\n### IChatManager\n\n#### 获取会话列表\t\n\n```C#\nList\u003cConversation\u003econversations = SDKClient.Instance.ChatManager.LoadAllConversations();\n```\n\n\u003e会话列表是存在本地的一种消息管理对象，如果您会话中没有消息则表示会话不存在。\n\n\n#### 创建会话\n\n```C#\n// emId: 会话对应环信id, 如果是群组或者聊天室，则为群组id或者聊天室id\n  Conversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\n```\n\n#### 获取会话中的消息\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\nconv.LoadMessages(handle:new ValueCallBack\u003cList\u003cMessage\u003e\u003e(\n    onSuccess: (messages) =\u003e {\n        Debug.Log(\"获取成功\");\n    },\n    onError:(code, desc) =\u003e {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n#### 获取会话中未读消息数\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"conversationId\");\nint unreadCount = conv.UnReadCount;\n```\n\n#### 设置单条消息为已读\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\nconv.MarkMessageAsRead(\"messageId\");\n```\n\n#### 设置所有消息为已读\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\nconv.MarkAllMessageAsRead();\n```\n\n#### 发送消息已读状态\n\n```C#\nSDKClient.Instance.ChatManager.SendMessageReadAck(\"messageId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 删除会话中的消息\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\nconv.DeleteMessage(\"messageId\");\n```\n\n#### 删除会话中所有的消息\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"conversationId\");\nconv.DeleteAllMessages();\n```\n\n#### 插入消息\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\nconv.InsertMessage(message);\n```\n\n\u003e SDK在您发送和接收消息(_cmd类型消息除外_)后会自动将消息插入数据库中，并不需要您自己将消息插入数据库，但如果您需要自己插入一条消息时可以调用该api。\n\n#### 更新消息\n\n```C#\nConversation conv = SDKClient.Instance.ChatManager.GetConversation(\"emId\");\nconv.UpdateMessage(message);\n```\n\n\n#### 删除会话\n\n```C#\nSDKClient.Instance.ChatManager.DeleteConversation(\"emId\");\n```\n​\t\n#### 构建要发送的消息\n\n```C#\n// 文本消息\nMessage textMessage = Message.CreateTextSendMessage(\"接收方id\", \"消息内容\");\n\n// 图片消息\nMessage imgMessage = Message.CreateImageSendMessage(\"接收方id\", localPath: \"图片路径\", displayName: \"图片名称.xx\");\n\n// 视频消息\nMessage videoMessage = Message.CreateVideoSendMessage(\"接收方id\", localPath: \"适配路径\", displayName: \"适配文件名称.xx\");\n\n// 音频消息\nMessage voiceMessage = Message.CreateVoiceSendMessage(\"接收方id\", localPath: \"音频文件路径\", displayName: \"音频文件名称.xx\", duration: 10);\n\n// 文件消息\nMessage fileMessage = Message.CreateFileSendMessage(\"接收方id\", localPath:\"文件路径\", displayName:\"文件名称.xx\");\n\n// 位置消息\nMessage localMessage = Message.CreateLocationSendMessage(\"接收方id\", address:\"位置名称\", latitude:0.11, longitude:0.31);\n\n// cmd消息\nMessage cmdMessage = Message.CreateCmdSendMessage(\"接收方id\", action: \"自定义事件\");\n\n// 自定义消息\nMessage customMessage = Message.CreateCustomSendMessage(\"接收方id\", customEvent: \"自定义事件\");\n```\n\n\u003e 如果您是要构建群组或者聊天室消息，需要修改消息的`MessageType`属性, 如:   \n\u003e `message.MessageType = MessageType.Group;`\n\n#### 发送消息\n\n```C#\nSDKClient.Instance.ChatManager.SendMessage(ref message, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    },\n    // 只有带有附件的消息才会回调进度\n    onProgress: (progress) =\u003e { }\n));\n```\n\u003e环信收发消息并不需要对方是您通讯录中的成员，只要知道对方的环信id就可以发送消息。\n\n```\n#### 撤回消息\n\n```C#\nSDKClient.Instance.ChatManager.RecallMessage(\"messageId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 消息撤回为增值服务，您只能撤回2分钟内的消息，如需开通，请[咨询商务](https://www.easemob.com/pricing/im#p08)。\n\n\n#### 收消息监听\n\n```C#\n\npublic class TestSDK : MonoBehaviour, IChatManagerDelegate\n{\n\n    private void Start()\n    {\n        // 添加监听，需在sdk 初始化后调用\n        SDKClient.Instance.ChatManager.AddChatManagerDelegate(this);\n    }\n\n    private void OnDestroy()\n    {\n        // 移除监听\n        SDKClient.Instance.ChatManager.AddChatManagerDelegate(this);\n    }\n\n    // 收到消息\n    public void OnMessagesReceived(List\u003cMessage\u003e messages)\n    {\n\n    }\n\n    // 收到CMD消息\n    public void OnCmdMessagesReceived(List\u003cMessage\u003e messages)\n    {\n\n    }\n\n    // 发出的消息已读回调\n    public void OnMessagesRead(List\u003cMessage\u003e messages)\n    {\n\n    }\n\n    // 发出的消息已送达回调\n    public void OnMessagesDelivered(List\u003cMessage\u003e messages)\n    {\n\n    }\n\n    // 消息被撤回回调\n    public void OnMessagesRecalled(List\u003cMessage\u003e messages)\n    {\n\n    }\n\n    // 发出的群消息已读更新\n    public void OnReadAckForGroupMessageUpdated()\n    {\n\n    }\n\n    // 发出的群消息已读\n    public void OnGroupMessageRead(List\u003cGroupReadAck\u003e list)\n    {\n\n    }\n\n    // 会话列表变化\n    public void OnConversationsUpdate()\n    {\n\n    }\n\n    // 会话已读\n    public void OnConversationRead(string from, string to)\n    {\n\n    }\n\n    // 消息Reaction发生变更\n    public void MessageReactionDidChange(List\u003cMessageReactionChange\u003e list)\n    {\n\n    }\n\n    // 消息内容发生变更\n    public void OnMessageContentChanged(Message msg, string operatorId, long operationTime)\n    {\n\n    }\n}\n\n\n```\n\n### IContactManager\n\n#### 从服务器获取通讯录中的用户列表\n\n```C#\nSDKClient.Instance.ContactManager.GetAllContactsFromServer(new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError:(code, desc) =\u003e {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\n#### 发送添加申请\n\n```C#\nSDKClient.Instance.ContactManager.AddContact(\"emId\", \"hello\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 添加申请不会发推送，如果用户不在线，等上线后会收到。\n\n#### 删除通讯录中的成员\n\n```C#\nSDKClient.Instance.ContactManager.DeleteContact(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 从服务器获取黑名单\n\n```C#\nSDKClient.Instance.ContactManager.GetBlockListFromServer(new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 添加用户到黑名单中\n\n```C#\nSDKClient.Instance.ContactManager.AddUserToBlockList(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 黑名单和通讯录是独立的，被添加人不需要在您的通讯录中，如果是通讯录中成员被加入到黑名单后，他仍然会出现在您的通讯录名单中，同时他也会出现在您的黑名单中。被添加到黑名单后，您双方均无法收发对方的消息。\n\n#### 将用户从黑名单中删除\n\n```C#\nSDKClient.Instance.ContactManager.RemoveUserFromBlockList(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\n#### 通讯录监听\n\n```C#\npublic class TestSDK : MonoBehaviour, IContactManagerDelegate\n{\n\n    private void Start()\n    {\n        // 添加监听，需在sdk 初始化后调用\n        SDKClient.Instance.ContactManager.AddContactManagerDelegate(this);\n    }\n\n    private void OnDestroy()\n    {\n        // 移除监听\n        SDKClient.Instance.ContactManager.RemoveContactManagerDelegate(this);\n    }\n\n    // 联系人增加回调\n    public void OnContactAdded(string username)\n    {\n\n    }\n\n    // 联系人减少回调\n    public void OnContactDeleted(string username)\n    {\n\n    }\n\n    // 收到添加好友请求\n    public void OnContactInvited(string username, string reason)\n    {\n\n    }\n\n    // 发出的添加好友请求被同意\n    public void OnFriendRequestAccepted(string username)\n    {\n\n    }\n\n    // 发出的添加好友请求被解决\n    public void OnFriendRequestDeclined(string username)\n    {\n\n    }\n}\n\n```\n\n#### 同意添加申请\n\n```C#\nSDKClient.Instance.ContactManager.AcceptInvitation(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 拒绝添加申请\n\n```C#\nSDKClient.Instance.ContactManager.DeclineInvitation(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n### IGroupManager\n\n#### 从服务器获取已加入群组列表\n\n```C#\nSDKClient.Instance.GroupManager.FetchJoinedGroupsFromServer(handle: new ValueCallBack\u003cList\u003cGroup\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 从缓存中获取已加入群组列表\n\n```C#\nList\u003cGroup\u003egroups = SDKClient.Instance.G服务器获取公开群组列表\n\n```C#\nSDKClient.Instance.GroupManchPublicGrouomServer(new ValueCallBack\u003cCursorResult\u003cGroupInfo\u003e\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 创建群组\n\n```C#\nSDKClient.Instance.GroupManager.CreateGroup(\"群组名称\", options: new GroupOptions(GroupStyle.PrivateMemberCanInvite), new ValueCallBack\u003cGroup\u003e(\n    onSuccess: (group) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e GroupOptions `GroupStyle` 等参数进行设置，群组有四种，分别是:\n `PrivateOnlyOwnerInvite` 私有群，只有群主和管理员能邀请他人进群，被邀请人会收到邀请信息，同意后可入群;\n `PrivateMemberCanInvite` 私有群，所有人都可以邀请他人进群，被邀请人会收到邀请信息，同意后可入群;\n `PublicJoinNeedApproval` 公开群，可以通过获取公开群列表api取的，申请加入时需要群主或管理员同意;\n `PublicOpenJoin` 公开群，可以通过获取公开群列表api取，可以直接进入;\n\n\n#### 获取群组详情\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupSpecificationFromServer(\"groupId\", new ValueCallBack\u003cGroup\u003e(\n    onSuccess: (group) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 获取群成员列表\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupMemberListFromServer(\"groupId\", handle: new ValueCallBack\u003cCursorResult\u003cstring\u003e\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 加入公开群组\n\n```C#\nSDKClient.Instance.GroupManager.JoinPublicGroup(\"groupId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 需要群组类型是 `PublicOpenJoin` ,调用后直接加入群组。\n\n#### 申请加入公开群\n\n```C#\nSDKClient.Instance.GroupManager.applyJoinToGroup(\"groupId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 需要群组类型是 `PublicJoinNeedApproval` ,申请后，群主和管理员会收到加群邀请，同意后入群。\n\n#### 邀请用户入群\n\n```C#\nSDKClient.Instance.GroupManager.AddGroupMembers(\"groupId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 需要群组类型是 `PrivateOnlyOwnerInvite` 或 `PrivateMemberCanInvite` ,\n `PrivateOnlyOwnerInvite` 时，群主和管理员可以调用；\n `PrivateMemberCanInvite ` 是，群中任何人都可以调用；\n被邀请方会收到邀请通知，同意后进群。邀请通知并不会以推送的形式发出，如果用户不在线，等上线后会收到，用户同意后入群。\n\n#### 从群组中删除用户\n\n```C#\nSDKClient.Instance.GroupManager.DeleteGroupMembers(\"emId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主和管理员可以调用。\n\n#### 添加管理员\n\n```C#\nSDKClient.Instance.GroupManager.AddGroupAdmin(\"emId\", \"memberId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主可以调用。被操作人会收到被添加为管理员回调，该回调无推送，如用户不在线，上线后会收到。\n\n\n#### 移除管理员\n\n```C#\nSDKClient.Instance.GroupManager.RemoveGroupAdmin(\"emId\", \"adminId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主可以调用。被操作人会收到被移除管理员回调，该回调无推送，如用户不在线，上线后会收到。\n\n#### 退出群组\n\n```C#\nSDKClient.Instance.GroupManager.LeaveGroup(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 解散群组\n\n```C#\nSDKClient.Instance.GroupManager.DestroyGroup(\"emId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 只有群主可以调用。\n\n#### 转移群组\n\n```C#\nSDKClient.Instance.GroupManager.ChangeGroupOwner(\"emId\", \"newOwnerId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 只有群主可以调用。\n\n#### 获取群组黑名单列表\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupBlockListFromServer(\"emId\", new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 将群成员添加到群黑名单\n\n```C#\nSDKClient.Instance.GroupManager.BlockGroupMembers(\"groupId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用，被操作用户当前必须是群成员，当用户被加入到群黑名单后，该用户将从群成员中移除并加入到当前群的黑名单中。同时该用户将无法再进入该群。\n\n#### 将用户从黑名单移除\n\n```C#\nSDKClient.Instance.GroupManager.UnBlockGroupMembers(\"groupId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用，当账号从黑名单中移除后可以再允许申请加群。\n\n#### 获取群禁言列表\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupMuteListFromServer(\"groupId\", handle: new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n\n```\n\n#### 对成员禁言\n\n```C#\nSDKClient.Instance.GroupManager.MuteGroupMembers(\"groupId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用，被禁言的用户仍然可以收到群中的消息，但是无法发出消息， 白名单中的用户即使被加入到禁言列表中也不受影响。\n\n#### 对成员解除禁言\n\n```C#\nSDKClient.Instance.GroupManager.UnMuteGroupMembers(\"groupId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用。\n\n#### 对所有成员禁言\n\n```C#\nSDKClient.Instance.GroupManager.MuteGroupAllMembers(\"groupId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e该方法只有群主和管理员可以调用，对群主，管理员，白名单中的成员无效，且针对所有人的`禁言`操作与 `muteMembers` 、 `unMuteMembers` 接口不冲突，该接口的操作并不会导致 `getGroupMuteListFromServer` 接口的返回的数据变化。\n\n#### 对所有成员解除禁言\n\n```C#\nSDKClient.Instance.GroupManager.UnMuteGroupAllMembers(\"groupId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用，且针对所有人的`解除禁言`操作与`muteMembers`、`unMuteMembers`接口不冲突，该接口的操作并不会导致`getGroupMuteListFromServer`接口的返回的数据变化。当调用该方法后，之前在禁言列表中的用户仍在禁言列表中，且仍处于禁言状态。\n\n#### 获取白名单列表\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupAllowListFromServer(\"groupId\", new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 将用户添加到白名单中\n\n```C#\nSDKClient.Instance.GroupManager.AddGroupAllowList(\"groupId\", members, new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用，当用户被加入到白名单后，当群组全部禁言或者被添加到禁言列表后仍可以发言。\n\n#### 将用户从白名单中移除\n\n```C#\nSDKClient.Instance.GroupManager.RemoveGroupAllowList(\"groupId\", members, new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 该方法只有群主和管理员可以调用。\n\n#### 判断自己是否在白名单中\n\n```C#\nSDKClient.Instance.GroupManager.CheckIfInGroupAllowList(\"groupId\",  new ValueCallBack\u003cbool\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 不接收群消息\n\n```C#\nSDKClient.Instance.GroupManager.BlockGroup(\"groupId\",  new ValueCallBack\u003cbool\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e设置后群组中的所有消息都无法收到，用户不在线时也不会有推送告知。\n\n#### 恢复接收群消息\n\n```C#\nSDKClient.Instance.GroupManager.UnBlockGroup(\"groupId\",  new ValueCallBack\u003cbool\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 更新群名称\n\n```C#\nSDKClient.Instance.GroupManager.ChangeGroupName(\"groupId\", \"new name\", new ValueCallBack\u003cbool\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主或管理员可以调用。\n\n#### 更新群描述\n\n```C#\nSDKClient.Instance.GroupManager.ChangeGroupDescription(\"groupId\", \"new description\", new ValueCallBack\u003cbool\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主或管理员可以调用。\n\n\n#### 获取群组公告\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupAnnouncementFromServer(\"groupId\", new ValueCallBack\u003cstring\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 更新群公告\n\n```C#\nSDKClient.Instance.GroupManager.UpdateGroupAnnouncement(\"groupId\", \"new announcement\",new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主或管理员可以调用。\n\n#### 获取群共享文件列表\n\n```C#\nSDKClient.Instance.GroupManager.GetGroupFileListFromServer(\"groupId\", new ValueCallBack\u003cList\u003cGroupSharedFile\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 上传群共享文件\n\n```C#\nSDKClient.Instance.GroupManager.UploadGroupSharedFile(\"groupId\", \"file path\", handle: new ValueCallBack\u003cList\u003cGroupSharedFile\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 下载群共享文件\n\n```C#\nSDKClient.Instance.GroupManager.DownloadGroupSharedFile(\"groupId\", \"fileId\", savePath, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 删除群共享文件\n\n```C#\nSDKClient.Instance.GroupManager.DeleteGroupSharedFile(\"groupId\", \"fileId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主，管理员，文件上传者可以调用。\n\n#### 群回调监听\n\n```C#\npublic class TestSDK : MonoBehaviour, IGroupManagerDelegate\n{\n\n    private void Start()\n    {\n        // 添加监听，需在sdk 初始化后调用\n        SDKClient.Instance.GroupManager.AddGroupManagerDelegate(this);\n    }\n\n    private void OnDestroy()\n    {\n        // 移除监听\n        SDKClient.Instance.GroupManager.RemoveGroupManagerDelegate(this);\n    }\n\n    // 收到加群邀请\n    public void OnInvitationReceivedFromGroup(string groupId, string groupName, string inviter, string reason)\n    {\n\n    }\n\n    // 收到加群申请\n    public void OnRequestToJoinReceivedFromGroup(string groupId, string groupName, string applicant, string reason)\n    {\n\n    }\n\n    // 发出的加群申请被同意\n    public void OnRequestToJoinAcceptedFromGroup(string groupId, string groupName, string accepter)\n    {\n\n    }\n\n    // 发出的加群申请被拒绝\n    public void OnRequestToJoinDeclinedFromGroup(string groupId, string groupName, string decliner, string reason)\n    {\n\n    }\n\n    // 发出的加群邀请被同意\n    public void OnInvitationAcceptedFromGroup(string groupId, string invitee)\n    {\n\n    }\n\n    // 发出的加群邀请被拒绝\n    public void OnInvitationDeclinedFromGroup(string groupId, string invitee, string reason)\n    {\n\n    }\n\n    // 群成员被删除\n    public void OnUserRemovedFromGroup(string groupId, string groupName)\n    {\n\n    }\n\n    // 群解散\n    public void OnDestroyedFromGroup(string groupId, string groupName)\n    {\n\n    }\n\n    // 自动同意加群邀请\n    public void OnAutoAcceptInvitationFromGroup(string groupId, string inviter, string inviteMessage)\n    {\n\n    }\n\n    // 收到禁言列表增加回调\n    public void OnMuteListAddedFromGroup(string groupId, List\u003cstring\u003e mutes, long muteExpire)\n    {\n\n    }\n\n    // 收到禁言列表减少回调\n    public void OnMuteListRemovedFromGroup(string groupId, List\u003cstring\u003e mutes)\n    {\n\n    }\n\n    // 收到管理员列表增加回调\n    public void OnAdminAddedFromGroup(string groupId, string administrator)\n    {\n\n    }\n\n    // 收到管理员列表减少回调\n    public void OnAdminRemovedFromGroup(string groupId, string administrator)\n    {\n\n    }\n\n    // 收到群主变更回调\n    public void OnOwnerChangedFromGroup(string groupId, string newOwner, string oldOwner)\n    {\n\n    }\n\n    // 收到群成员增加回调\n    public void OnMemberJoinedFromGroup(string groupId, string member)\n    {\n\n    }\n\n    // 收到群成员减少回调\n    public void OnMemberExitedFromGroup(string groupId, string member)\n    {\n\n    }\n\n    // 收到群公告变更回调\n    public void OnAnnouncementChangedFromGroup(string groupId, string announcement)\n    {\n\n    }\n\n    // 收到群文件增加回调\n    public void OnSharedFileAddedFromGroup(string groupId, GroupSharedFile sharedFile)\n    {\n\n    }\n\n    // 收到群文件减少回调\n    public void OnSharedFileDeletedFromGroup(string groupId, string fileId)\n    {\n\n    }\n\n    // 收到允许列表添加回调\n    public void OnAddAllowListMembersFromGroup(string groupId, List\u003cstring\u003e allowList)\n    {\n\n    }\n\n    // 收到允许列表删除回调\n    public void OnRemoveAllowListMembersFromGroup(string groupId, List\u003cstring\u003e allowList)\n    {\n\n    }\n\n    // 收到全体成员禁言状态变化回调\n    public void OnAllMemberMuteChangedFromGroup(string groupId, bool isAllMuted)\n    {\n\n    }\n\n    // 收到群组禁用状态发生变化回调\n    public void OnStateChangedFromGroup(string groupId, bool isDisable)\n    {\n\n    }\n\n    // 收到群详情发生了变更回调\n    public void OnSpecificationChangedFromGroup(Group group)\n    {\n\n    }\n\n    // 收到群成员自定义属性发生了变更回调\n    public void OnUpdateMemberAttributesFromGroup(string groupId, string userId, Dictionary\u003cstring, string\u003e attributes, string from)\n    {\n\n    }\n}\n\n```\n\n#### 同意加群申请\n\n```C#\nSDKClient.Instance.GroupManager.AcceptGroupJoinApplication(\"groupId\", \"memberId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主和管理员可以调用。\n\n#### 拒绝加群申请\n\n```C#\nSDKClient.Instance.GroupManager.DeclineGroupJoinApplication(\"groupId\", \"memberId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 群主和管理员可以调用。\n\n#### 同意加群邀请\n\n```C#\nSDKClient.Instance.GroupManager.AcceptGroupInvitation(\"groupId\", new ValueCallBack\u003cGroup\u003e(\n    onSuccess: (group) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 拒绝加群邀请\n\n```C#\nSDKClient.Instance.GroupManager.DeclineGroupInvitation(\"groupId\", handle: new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n### IRoomManager\n\n#### 从服务器获取聊天室列表\n\n```C#\nSDKClient.Instance.RoomManager.FetchPublicRoomsFromServer(handle: new ValueCallBack\u003cPageResult\u003cRoom\u003e\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 创建聊天室\n\n```C#\nSDKClient.Instance.RoomManager.CreateRoom(\"RoomName\", new ValueCallBack\u003cRoom\u003e(\n    onSuccess: (room) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e聊天室创建需要单独拥有权限，具体可以参考文档[聊天室管理](http://docs-im.easemob.com/im/server/basics/chatroom)。\n\n#### 加入聊天室\n\n```C#\nSDKClient.Instance.RoomManager.JoinRoom(\"roomId\", new ValueCallBack\u003cRoom\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 离开聊天室\n\n```C#\nSDKClient.Instance.RoomManager.LeaveRoom(\"roomId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 销毁聊天室\n\n```C#\nSDKClient.Instance.RoomManager.DestroyRoom(\"roomId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e聊天室销毁需要单独拥有权限，具体可以参考文档[聊天室管理](http://docs-im.easemob.com/im/server/basics/chatroom)。\n\n#### 转移聊天室\n\n```C#\nSDKClient.Instance.RoomManager.ChangeRoomOwner(\"roomId\", \"newOwnerId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e聊天室转移需要单独拥有权限，具体可以参考文档[聊天室管理](http://docs-im.easemob.com/im/server/basics/chatroom)。\n\n#### 获取聊天室详情\n\n```C#\nSDKClient.Instance.RoomManager.FetchRoomInfoFromServer(\"roomId\", new ValueCallBack\u003cRoom\u003e(\n    onSuccess: (room) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 获取聊天室成员\n\n```C#\nSDKClient.Instance.RoomManager.FetchRoomMembers(\"roomId\", new ValueCallBack\u003cCursorResult\u003cstring\u003e\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 移除聊天室成员\n\n```C#\nSDKClient.Instance.RoomManager.DeleteRoomMembers(\"roomId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或管理员调用。\n\n#### 添加管理员\n\n```C#\nSDKClient.Instance.RoomManager.AddRoomAdmin(\"roomId\", \"memberId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n\n```\n\n\u003e 创建者调用，被操作者会收到回调。\n\n#### 移除管理员\n\n```C#\nSDKClient.Instance.RoomManager.RemoveRoomAdmin(\"roomId\", \"adminId\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者调用，被操作者会收到回调。\n\n#### 获取禁言列表\n\n```C#\nSDKClient.Instance.RoomManager.FetchRoomMuteList(\"roomId\",  new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 设置禁言\n\n```C#\nSDKClient.Instance.RoomManager.MuteRoomMembers(\"roomId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或者管理员调用。\n\n#### 解除禁言\n\n```C#\nSDKClient.Instance.RoomManager.UnMuteRoomMembers(\"roomId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或者管理员调用。\n\n#### 获取黑名单列表\n\n```C#\nSDKClient.Instance.RoomManager.FetchRoomBlockList(\"roomId\", new ValueCallBack\u003cList\u003cstring\u003e\u003e(\n    onSuccess: (list) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 添加黑名单\n\n```C#\nSDKClient.Instance.RoomManager.BlockRoomMembers(\"roomId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或管理员调用。\n\n#### 移除黑名单\n\n```C#\nSDKClient.Instance.RoomManager.UnBlockRoomMembers(\"roomId\", members, new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或管理员调用。\n\n\n#### 修改聊天室名称\n\n```C#\nSDKClient.Instance.RoomManager.ChangeRoomName(\"roomId\", \"new name\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或管理员调用。\n\n#### 修改聊天室描述\n\n```C#\nSDKClient.Instance.RoomManager.ChangeRoomDescription(\"roomId\", \"new description\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或管理员调用。\n\n#### 获取聊天室公告\n\n```C#\nSDKClient.Instance.RoomManager.FetchRoomAnnouncement(\"roomId\", new ValueCallBack\u003cstring\u003e(\n    onSuccess: (result) =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n#### 修改聊天室公告\n\n```C#\nSDKClient.Instance.RoomManager.UpdateRoomAnnouncement(\"roomId\", \"new announcement\", new CallBack(\n    onSuccess: () =\u003e\n    {\n        Debug.Log(\"执行成功\");\n    },\n\n    onError: (code, desc) =\u003e\n    {\n        Debug.Log($\"错误码 -- {code}\");\n        Debug.Log($\"错误描述 -- {desc}\");\n    }\n));\n```\n\n\u003e 创建者或管理员调用\n\n#### 添加聊天室监听\n\n```C#\npublic class TestSDK : MonoBehaviour, IRoomManagerDelegate\n{\n\n    private void Start()\n    {\n        // 添加监听，需在sdk 初始化后调用\n        SDKClient.Instance.RoomManager.AddRoomManagerDelegate(this);\n    }\n\n    private void OnDestroy()\n    {\n        // 移除监听\n        SDKClient.Instance.RoomManager.RemoveRoomManagerDelegate(this);\n    }\n\n\n    // 聊天室被销毁回调\n    public void OnDestroyedFromRoom(string roomId, string roomName)\n    {\n\n    }\n\n    // 有用户加入聊天室回调\n    public void OnMemberJoinedFromRoom(string roomId, string participant)\n    {\n\n    }\n\n    // 有用户离开聊天室回调\n    public void OnMemberExitedFromRoom(string roomId, string roomName, string participant)\n    {\n\n    }\n\n    // 当前账号被移出聊天室\n    public void OnRemovedFromRoom(string roomId, string roomName, string participant)\n    {\n\n    }\n\n    // 被禁言用户增加\n    public void OnMuteListAddedFromRoom(string roomId, List\u003cstring\u003e mutes, long expireTime)\n    {\n\n    }\n\n    // 被禁言用户减少\n    public void OnMuteListRemovedFromRoom(string roomId, List\u003cstring\u003e mutes)\n    {\n\n    }\n\n    // 管理员增加\n    public void OnAdminAddedFromRoom(string roomId, string admin)\n    {\n\n    }\n\n    // 管理员减少\n    public void OnAdminRemovedFromRoom(string roomId, string admin)\n    {\n\n    }\n\n    // 聊天室拥有者变更\n    public void OnOwnerChangedFromRoom(string roomId, string newOwner, string oldOwner)\n    {\n\n    }\n\n    // 聊天室公告变更\n    public void OnAnnouncementChangedFromRoom(string roomId, string announcement)\n    {\n\n    }\n\n    // 聊天室成员因为离线被移除\n    public void OnRemoveFromRoomByOffline(string roomId, string roomName)\n    {\n    }\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasemob%2Femclient-unity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasemob%2Femclient-unity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasemob%2Femclient-unity/lists"}