登录登出
更新时间: 2023/08/15 02:24:16
信令SDK的账号就是IM账号,所以信令SDK的登录就是IM的登录。我们通过 NIM.getInstance
获取nim实例,
NIM.getInstance
接口为单例模式, 对于同一个账号, 永远返回同一份实例, 即只有第一次调用会初始化一个实例- 后续调用此接口会直接返回初始化过的实例, 同时也会调用接口更新 IM 配置更新传入的配置
- 后续调用此接口时, 如果连接已断开, 会自动建立连接
- 当发生掉线时,SDK 会自动进行重连
- 开发者在收到
onconnect
回调之后代表链接已经建立(登录成功)。
- 示例代码
javascript var nim = NIM.getInstance({
appKey: 'abcdefghijk', // 在开发者管理控制台创建的应用的appKey
account: 'foo', // IM账号名称
token: 'token', // 登录IM所需的token
//
onconnect: onConnect,
onwillreconnect: onWillReconnect,
ondisconnect: onDisconnect,
onerror: onError
// 更多方法和回调请看IM即时通讯
})
function onConnect() {
console.log('连接成功');
}
function onWillReconnect(obj) {
// 此时说明 SDK 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
console.log('即将重连');
console.log(obj.retryCount);
console.log(obj.duration);
}
function onDisconnect(error) {
// 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
console.log('丢失连接');
console.log(error);
if (error) {
switch (error.code) {
// 账号或者密码错误, 请跳转到登录页面并提示错误
case 302:
break;
// 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误
case 417:
break;
// 被踢, 请提示错误后跳转到登录页面
case 'kicked':
break;
default:
break;
}
}
}
function onError(error) {
console.log(error);
}
参数解释
debug
: 是否开启日志, 开发者可以开启日志, 这样 SDK 会将关键操作的信息打印到控制台上, 便于调试logFunc
: 日志分析函数。默认情况下,开发者使用云信 SDK 会将日志打印到 console 中,但在诸如移动端、混合应用场景,对错误的跟踪与查询并不是很方便。SDK 提供了logFunc
配置参数,可截获日志信息,输入到用户自定义的函数中(sdk 也提供了 plugin 供开发者参考)。辅助开发在在混合应用/PC 端/移动端浏览器上对信息做二次处理。appKey
: 在云信管理后台查看应用的 appKeyaccount
: 账号, 应用内唯一token
: 账号的 token, 用于建立连接onconnect
: 连接建立后的回调(登录成功), 会传入一个对象, 包含登录的信息, 有以下字段lastLoginDeviceId
: 上次登录的设备的设备号customTag
: 客户端自定义tagconnectionId
: 本次登录的连接号ip
: 客户端 IPport
: 客户端端口country
: 本次登录的国家
onwillreconnect
: 即将重连的回调- 此时说明 SDK 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
- 此回调会收到一个对象, 包含额外的信息, 有以下字段
duration
: 距离下次重连的时间retryCount
: 重连尝试的次数
ondisconnect
: 断开连接后的回调- 此时说明
SDK
处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面 - 此回调会收到一个对象, 包含错误的信息, 有以下字段
code
: 出错时的错误码, 可能为空302
: 账号或者密码错误, 请跳转到登录页面并提示错误417
: 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误'kicked'
: 被踢
- 此时说明
onerror
: 发生错误的回调, 会传入错误对象
清除单例实例
web sdk 连接实例均为单例模式,但可以调用相应接口清除内存中记录的实例,即断开连接,清除内存消息记录及时间戳,方便开发者做到干净重连。
js var nim = NIM.getInstance({...})
// 清除实例
nim.destroy({
done: function (err) {
console.log('实例已被完全清除')
}
})
注意
- 手动调用
nim.disconnect()
方法或nim.destroy()
方法后,会直接触发实例的ondisconnect
方法,但此时websocket并没有真正意义上被销毁,只有在done
回调的时候,才能保证socket是onclose
状态的。 - 这点在微信小程序里尤其重要,因为小程序只有两条websocket可用,如果在前一条socket没有close的时候,会占用socket资源,导致反复重连或者悄悄被踢的错误。
其他配置或者使用方式,可以查看NIM的登录登出。
此文档是否对你有帮助?