登录登出

更新时间: 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: 在云信管理后台查看应用的 appKey
  • account: 账号, 应用内唯一
  • token: 账号的 token, 用于建立连接
  • onconnect: 连接建立后的回调(登录成功), 会传入一个对象, 包含登录的信息, 有以下字段
    • lastLoginDeviceId: 上次登录的设备的设备号
    • customTag: 客户端自定义tag
    • connectionId: 本次登录的连接号
    • ip: 客户端 IP
    • port: 客户端端口
    • 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的登录登出

此文档是否对你有帮助?
有帮助
去反馈
  • 参数解释
  • 清除单例实例