登录登出
更新时间: 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的登录登出。
此文档是否对你有帮助?





