IM 即时通讯(增强版)
Web
动态与公告
IM UIKit 更新日志
NIM SDK 更新日志
新手接入指南
产品介绍
简介
产品优势
主要功能
功能介绍
账号集成与登录
基础消息功能
群组功能
聊天室功能
圈组功能
多端登录与互踢策略
海外数据中心
IM 平滑迁移方案
接口及业务限制
体验 Demo
下载 SDK 与 Demo 源码
快速开始
跑通 IM Demo 源码
实现单聊消息收发(不含 UI)
实现聊天室登录(不含 UI)
实现圈组消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能列表
快速集成 IM UIKit
非React框架快速集成
非React框架集成 IM UIKit
非 React 框架自定义示渲染
组件导入
初始化
全局上下文
登录相关
会话列表相关
集成会话列表界面
自定义会话列表界面 UI
会话消息相关
集成会话界面
实现自定义消息收发
自定义会话界面 UI
用户资料相关
集成用户资料组件
通讯录相关
集成通讯录界面
自定义通讯录界面 UI
搜素组件相关
集成搜索组件
自定义搜索组件 UI
主题样式设置
语言设置
初始化(兼容 NIM SDK)
常见问题
如何解决样式冲突
不含 UI 集成
集成 SDK
IM 登录与初始化相关
初始化并登录 IM
注销登录与销毁实例
多端登录与互踢
消息收发
历史消息
消息扩展
最近会话
服务端会话服务
用户资料托管
好友关系托管
在线状态订阅
系统通知
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
超大群概述
超大群管理
超大群成员管理
超大群消息管理
反垃圾
聊天室功能
聊天室概述
聊天室初始化与登录相关
初始化并登录聊天室
注销登录与销毁实例
聊天室标签功能
聊天室消息管理
聊天室成员管理
聊天室信息管理
聊天室队列服务
圈组功能
圈组概述
初始化与登录
通用接口校验说明
服务器相关
服务器概述
服务器管理
服务器成员管理
游客功能
服务器未读数管理
频道相关
频道概述
频道管理
频道黑白名单
频道分组
频道分组黑白名单
频道未读数管理
实时互动频道
搜索服务器与频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道用户定制权限
频道分组身份组
自定义权限项
成员权限查询与判定
身份组相关查询
圈组订阅机制
圈组消息相关
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
消息正在输入
获取频道最后一条消息
会话消息回复(Thread)
圈组快捷评论
圈组消息搜索
查询历史消息
查询@我的消息
圈组系统通知相关
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组内容审核
圈组第三方回调
圈组相关抄送
圈组各端接口命名差异
融合存储方案
最佳实践
聊天室重要消息投递
API 参考
NIM SDK API 参考
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
服务协议

初始化与登录

更新时间: 2023/04/11 17:00:27

圈组是网易云信开发的类 Discord 场景能力模块。在使用圈组的相关能力前,需要先初始化圈组 SDK 并登录圈组。

前提条件

集成圈组 SDK

实现流程

步骤1:初始化

创建圈组 SDK 实例并初始化。

import QChatSDK from 'nim-web-sdk-ng/dist/QCHAT_BROWSER_SDK'

// 初始化
const qchat = new QChatSDK({
  appkey: '{{YOUR_APP_KEY}}',
  token: '{{YOUR_TOKEN}}',
  account: '{{YOUR_ACCOUNT}}',
  linkAddresses: ['{{YOUR_ADDRESSES}}'],
  debugLevel: 'debug'
})

初始化重要参数

参数
类型
说明
account string 用户的云信 IM 账号(accid
appkey string 在云信控制台获取的 App Key
token string 登录凭证,和云信 IM 账号一起确认用户身份
authType number 登录鉴权方式
  • 0:通过传入静态 token 进行鉴权。静态 token 恒定不变,且默认永久有效,除非主动调用云信服务端 API 刷新 token
  • 1:通过传入动态 token 进行鉴权。动态 token 可设置有效期,因此具备时效性。采用该鉴权方式可有效提升token 破解难度,降低密码泄露风险
  • 2:过云信的第三方回调功能进行鉴权。云信服务端不做 IM 登录鉴权,鉴权工作需由指定的第三方服务器(可以是应用服务器)进行
linkAddress string[] 与圈组服务端的连接地址列表。推荐使用云信服务端 API 获取。也可通过 IM 连接实例里的getQChatAddress方法获取如使用getQChatAddress方法获取连接地址,那么在登录圈组前,必须先登录 IM。
loginExt string 登录自定义字段,用于提交给应用服务端的第三方回调服务进行登录检测
needReconnect boolean 是否需要自动重连
reconnectionAttempts number 重连尝试次数
s3 any AWS s3 实例。针对有出海需求的用户提供 AWS 云存储支持。出海场景下不支持使用 SDK 自带的网易对象存储(NetEase Object Storage,NOS)的文件存储服务。为了不影响 SDK 体积,可注入 AWS s3 实例的模式来做融合存储,示例代码见注入 AWS s3 实例

完整的初始化入参请参见 QChatInitializeOptions

注入 AWS s3 实例

import s3 from 'aws-sdk/clients/s3'

const options = {
  appkey: ''
  account: '',
  token: '',
  s3: s3,
};
const qchat = new QChat(options);

aws-sdk 的安装脚本如下。请使用 2.1059.0 版本。

npm install aws-sdk

步骤2:设置监听事件

可在创建实例后设置监听事件。以下为监听“登录完成”事件的示例代码。

// 初始化-实例设置监听事件
qchat.on('logined', function (loginResult) { console.log(`login done!! ${loginResult}`) })

如果调用 destroy 方法销毁 SDK 实例,所以已设置监听的事件将移除。


部分重要事件如下:

事件 说明
logined 登录完成
willReconnect 即将重连
disconnect 断开连接
multiSpotLogin 多端登录
kicked 被踢下线
syncdone 同步完成
message 收到新消息
messageUpdate 消息有更新
unreadInfo 收到未读标记
systemNotification 收到系统通知
systemNotificationUpdate 系统通知有更新

完整的事件信息请参见 QChatEventInterface


const eventList = [
  'logined', 'willReconnect', 'disconnect', 'multiSpotLogin', 'kicked', 'syncdone',
  'message', 'messageUpdate', 'unreadInfo', 'systemNotification', 'systemNotificationUpdate',
]
eventList.forEach((key: any) => {
  qchat.on(key, (res: any) => {
    console.log(`Receive ${key} : `, res);
  });
})

步骤3:登录

调用login方法登录圈组。

// 实例登录
await qchat.login()

如果authType设置为通过第三方回调登录,那么在调用圈组登录接口后,还需发起圈组登录回调

登录相关

长连接的建立与断开

SDK 提供了如下 4 个方法维护 SDK 实例与云信服务端之间的长连接。

方法 说明
login 建立长连接并登录圈组
logout 登录圈组,并断开长连接。logout 完成后,SDK 实例不会被销毁,可再次掉调用login方法登录
destroy 销毁当前实例,退出登录状态。同时还会断开长连接、移除所有监听事件销毁部分内部变量,并且此实例再也无法调用 login进行登录
kickOtherClients 将当前用户账号登录的其他设备端踢下线,更多相关说明,参见下文的多端登录与互踢

多端登录与互踢

您可通过云信控制台或者接口对多端登录进行管控。

方式1:通过控制台管控

可在云信控制台配置如下多端登录与互踢策略

  • 只允许一端登录
  • 桌面端(PC 与 Web)互踢、移动端(Android 和 iOS )互踢、桌面端与移动端可同时登录。
  • 各端均可以同时登录在线(最多 10 个设备同时在线)

在控制台配置后,可注册kicked事件回调,监听被踢事件。

方式2:通过接口管控

  1. 其他设备端注册多端登录事件回调(MultiSpotLogin)。

  2. 本端调用kickOtherClients方法,将同时登录圈组的其他设备端踢下线。

    结果:

    其他设备端收到MultiSpotLogin事件。收到该事件回调后,建议其他设备端退出登录并切换到登录界面。

kickOtherClients 使用示例
  • 同账号在 A 设备:
const qchat = new QChatSDK({
  appkey: 'YOUR_APPKEY',
  account: 'YOUR_ACCOUNT_1',
  token: 'YOUR_TOKEN'
})

qchat.on('kicked', function (kickedReason) {
  console.log('Be kicked cause:', kickedReason)
})

await qchat.login()

  • 同账号在 B 设备:
const qchat = new QChatSDK({
  appkey: 'YOUR_APPKEY',
  account: 'YOUR_ACCOUNT_1',
  token: 'YOUR_TOKEN'
})

qchat.on('multiSpotLogin', (result) => {
  const deviceIds = []
  if (Array.isArray(result)) {
    const ids = result.filter(item => item.online && item.deviceId).map(item => item.deviceId)
    deviceIds = deviceIds.concat(ids)
  } else {
    result.online && deviceIds.push(result.deviceId)
  }

  // 1 秒后踢出 A 设备的自己的账号
  setTimeout(() => {
    const result = await qchat.kickOtherClients({
      deviceIds: deviceIds
    })
    deviceIds = []
    console.log('kick success!!', result)
  }, 1000)
})

await qchat.login()
此文档是否对你有帮助?
有帮助
我要吐槽
  • 前提条件
  • 实现流程
  • 步骤1:初始化
  • 初始化重要参数
  • 注入 AWS s3 实例
  • 步骤2:设置监听事件
  • 步骤3:登录
  • 登录相关
  • 长连接的建立与断开
  • 多端登录与互踢
  • 方式1:通过控制台管控
  • 方式2:通过接口管控