发布日期:2022-10-12 07:33:29 点击次数:
圈组是网易云信 IM 即时通讯服务的全新能力,可用来帮助您快速构建 “类 Discord 即时通讯社群”。本文介绍如何通过较少的代码集成 NetEase IM SDK (以下简称 NIM SDK)并调用 API,在您的应用中实现圈组消息收发。
联系商务经理开通圈组试用权限。如尚未开通IM电竞APP,您可通过云信官网首页右侧提供的微信和电话等联系方式咨询商务经理开通。
3. 创建应用后,可以在左侧导航栏中查看该应用,并单击 “App Key 管理”,并获取 App Key 和 App Secret。
3. 在测试页面,单击“新建账号”,并填写账号(即accid)、昵称(即 name)、密码(即 Token)后,单击“确定”。
本节仅介绍更为快速的 Gradle 自动集成方式。如需查看手动集成的具体说明,请参见手动集成。
SDK 的组件版本号必须一致,如圈组组件的版本号必须与其他组件的一致。可在SDK下载页面查看当前最新版本。
根据实际应用需求,在Manifest.xml中添加以下配置(请将 com.netease.nim.demo 替换为自己的包名),设置所需的权限。更多可添加的权限项,请参见初始化与集成。
如果您的 APK 最终会经过代码混淆,请在proguard配置文件中加入以下代码防止混淆:
配置 App Key 和部分 SDK 属性来满足不同的业务需求。例如,您可通过其成员参数
,将两者保存至本地。手动登录成功后,保存至本地的 accid 与 Token,可用于自动登录。自动登录可以在无网络或未登录成功的状态下直接访问用户本地 SDK 数据,完成登录。
:SDK 8.3.0 版本开始,支持动态登录模式。该登录模式下,Token 具备时效性,可有效提升 Token破解难度,降低鉴权信息泄露风险。
v5.0.0 版本开始支持通过先调用NIMClient#config方法再调用NIMClient#initSDK方法在任意位置初始化 SDK,该初始化方式适用于需要用户授权隐私信息采集的登录场景。具体请参见IM应用隐私合规。
登录开始后,observeOnlineStatus方法的Observer接口根据实际登录情况触发回调函数,返回具体的登录状态。如最终返回LOGINED,则代表登录成功。
调用时不需要再传入已在登录 IM 服务端时传入的 accid、Token、App Key、authType。此外,loginCallback也不需要传入,该参数代表圈组独立模式登录的回调,目前移动端仅支持非独立模式登录圈组服务端,即必须先登录 IM 服务端。
登录后,observeStatusChange方法的Observer接口触发回调函数,根据实际登录情况返回登录状态。如最终返回LOGINED,则代表登录成功。
圈组登录状态及其变化流程与 IM 的相同,具体请参见本文文末的登录状态参考。
本节以发送方与接收方的消息交互为例,介绍在不考虑用户权限控制的情况下,使用 SDK API 快速实现圈组消息收发的流程。
圈组服务端与圈组服务器是两个不同概念,前者指云信服务端提供圈组功能的部分,后者为圈组的特殊概念,对应 Discord 的 Server, 为社群本身,具体参见圈组主要概念。
发送方调用createServer方法创建圈组服务器。IM电竞APP为更加快速实现消息收发,创建时可将QChatInviteMode设置为AGREE_NEED_NOT(1)(发送邀请后,不需要被邀请方同意,被邀请方立即加入服务器)IM电竞APP。
创建成功后,需记录服务器的 ID(serverId),后续步骤将需要传入serverId。
创建成功后,需记录频道的 ID(channelId),后续步骤将需要传入channelId。
发送方调用inviteServerMembers方法,邀请接收方 加入圈组服务器。
发送方调用QChatMessageService#sendMessage方法,调用时传入圈组服务器与公开频道的ID,从而在公开频道中发送一条消息。
为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的 IM 账号(测试用),请确保在后续的正式生产环境中,将其替换为通过 IM 服务端 API生成的正式 IM 账号。
IM 和圈组的登录状态变化流程参见下图。图中,深蓝色元素代表登录状态,浅绿色元素代表自动登录或调用login方法的手动登录。
被其他端的登录踢下线,此时应该跳转至手动登录界面。具体机制参见多端登录与互踢策略。被踢后,无法自动登录
被服务器禁止登录(云信 IM 账号被禁用)。被禁止登录后,无法自动登录
云信 IM 账号(accid)或 Token 错误。出现该登录异常后,无法自动登录
数据库需要迁移到加密状态(类似被踢出、云信 IM 账号被禁用、Token 错误等情况。如自动登录失败,需要返回到登录界面进行重新登录操作)