快速集成直播聊天室
本教程主要描述如何使用融云 IM SDK 在 Web 端(Javascript)快速实现一个直播聊天室。
前置条件
创建融云开发者账号,获取 App Key。
步骤 1:导 入 SDK
使用 NPM 安装最新版本的 IM SDK
npm install @rongcloud/engine@latest @rongcloud/imlib-next@latest -S
步骤 2:初始化 SDK
创建 RongIMLib 实例。
// CMD
const RongIMLib = require('@rongcloud/imlib-next')
// ES
import * as RongIMLib from '@rongcloud/imlib-next'
在初始化方法中传入 App Key。请务必保证此过程只被执行一次。如果 App Key 不属于中国(北京)数据中心,必须在初始化配置中传入指定的导航服务器和统计服务器地址。
RongIMLib.init({ appkey: '<Your-AppKey>', navigators: ['https://nav.sg-light-edge.com'] });
- 新加坡数据中心 Navi Server 地址:nav.sg-light-edge.com(主)、nav-b.sg-light-edge.com(备)
步骤 3:添加消息监听器
应用需要通过 SDK 提供的消息监听器接收消息与通知。[addEventListener] 方法用来接收来自于 IMLib 内的各种事件通知,同类型事件可以多次添加不同的监听函数。当前用户会通过该监听器接收所有类型的消息。
const Events = RongIMLib.Events
RongIMLib.addEventListener(Events.MESSAGES, (evt) => {
console.log(evt.messages)
})
步骤 4:建立 IM 连接
使用融云即时通讯功能前必须与融云服务器建立 IM 连接。建立 IM 连接时需要传入用户 Token。
建立 IM 时传入的用户 Token 表示用户在融云的唯一标识。您需要自行维护 App 用户注册流程,为用户分配唯一的用户标识(User ID),并使用该用户 ID 向融云申请建立 IM 连接所需使用的 Token。
步骤 4.1:获取 Token
客户端 SDK 不提供获取 Token 的 API。您需要通过融云服务端 API 获取 Token。
通过 App 层定义的用户 ID(userId
)换取融云服务中使用的身份验证 Token。同一个用户 ID 可多次获取 Token,如果 Token 在有效期内,均可用于连接融云服务 。同一用户 ID 如需重新获取 Token 使用同一接口。
调用融云服务端 API 必须进行身份验证。请在请求中添加以下 HTTP 标头(Header)字段:
App-Key
: App KeyNonce
: 随机数Timestamp
: Unix 时间戳Signature
: 按以下顺序将 App Secret、Nonce、Timestamp 拼接成一个字符串,进行 SHA1 哈希计算。App Secret 与 App Key 对应,可从控制台 App Key 页面获取。
在获取 Token 时,HTTP 请求正文中需要传入用户 ID(userId
)、名称(name
)和头像(portraitUri
)。
POST /user/getToken.json HTTP/1.1
Host: api.rong-api.com
App-Key: Your_AppKey
Nonce: 14314
Timestamp: 1408710653491
Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8
Content-Type: application/x-www-form-urlencoded
userId=jlk456j5&name=Ironman&portraitUri=http%3A%2F%2Fabc.com%2Fmyportrait.jpg
用户 ID 支持大小写英文字母与数字的组合,最大长度 64 字节。注意,名称(name
)和头像(portraitUri
)仅供移动端远程推送时使用。在重新获取 Token 时如果传入新的数据,则会覆盖旧的名称与头像数据。
返回结果中会包含传入的用户 ID 与对应的 Token。Token 长度在 256 字节以内,您可以缓存在应用内。
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{"code":200, "userId":"jlk456j5", "token":"sfd9823ihufi"}
步骤 4.2:连接聊天服务器
在初始化完成后可建立 IM 连接,传入上一步中获取的用户 Token。
RongIMLib.connect('<Your-token>').then((res) => {
if (res.code === 0) {
console.log(res.data.userId)
}
})
一旦连接成功,SDK 的重连机制开始生效。当因为网络原因断线时,SDK 会不停重连直到连接成功为止,不需要您做额外的连接操作。
步骤 5:加入聊天室
在融云聊天室业务中,您需要先创建一个聊天室,并将用户加入聊天室,用户才能在聊天室中收发消息。
通常情况下,您通过服务端 API 创建聊天室,而用户一般通过客户端 SDK 加入聊天室。为了保持该教程的简单性,我们将直接调用客户端的创建并加入聊天室的接口 joinChatRoom
,一次完成创建与加入聊天室的动作。
const chatRoomId = "chatroomId";
const count = -1;
RongIMLib.joinChatRoom(chatRoomId, {
count: count
}).then(res => {
// 加入聊天室成功
if (res.code === RongIMLib.ErrorCode.SUCCESS){
console.log(res.code)
} else {
console.log(res.code, res.msg)
}
}).catch(error => {
console.log(error)
})
count
变量的值表示加入聊天室时需要获取的历史消息数量,-1
表示加入聊天室不获取任何历史消息。