Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface NIMGetInstanceOptions

Hierarchy

  • NIMGetInstanceOptions

Index

Properties

Methods

Properties

account: string

云信 IM 账号(又称 accid),即应用的用户在云信的唯一标识。

notice

应用本身的用户帐号和云信的 IM 账号(accid)彼此独立。云信的 IM 账号只用于云信 IM 服务的鉴权,IM 账号并不等同于应用的用户账号。

appKey: string

应用的 App Key,即您的应用在云信的账号。

note

您可在云信控制台创建 App Key。详情参见创建应用

authType?: number

登录 IM 的鉴权方式(默认为 0):

  • 0:通过传入静态 token 进行鉴权。静态 token 恒定不变,且默认永久有效,除非主动调用云信服务端 API 刷新 token
  • 1:通过传入动态 token 进行鉴权。动态 token 可设置有效期,因此具备时效性。采用该鉴权方式可有效提升token 破解难度,降低密码泄露风险。动态鉴权生成方式请参考: 服务器动态token
  • 2:过云信的第三方回调功能进行鉴权。云信服务端不做 IM 登录鉴权,鉴权工作需由指定的第三方服务器(可以是应用服务器)进行。

注意如果使用 动态token 鉴权,需要监听 onwillreconnect 回调,并在 onwillreconnect 中设置动态 token

note

具体的 token 获取方式和相关登录方式,请参见初始化与登录

autoMarkRead?: boolean

是否自动标记消息为已收到,默认为 true。

如果设置为 false,所有的消息(包括普通消息和系统通知)都不会自动标记已读,需要手动调用标记已读接口 markMsgRead 来告知服务端消息已接收。否则服务器会在初始化时通过离线消息通知,以及离线系统通知通知下发消息。

关联函数

  • MessageInterface.markMsgRead
  • deprecated
    customClientType?: string

    自定义客户端类型,请设置大于 0 的整数。可实现自定义多端登录策略,具体策略可在云信管理后台配置。详情请查看文档: 自定义多端登录

    notice

    默认端类型只有 Web,PC,AOS,iOS。如果开发者需要更细致的类型区分,如微信小程序等环境,可通过该字段自行做映射。

    customTag?: string

    客户端自定义 tag。最多 32 个字符。

    多端登录场景下,如果某个设备端登录时设置了该字段,其他设备端可通过 onloginportschange 回调获取该字段信息。

    关联函数

  • NIMGetInstanceOptions.onloginportschange
  • 示例

    //设备1
    NIM.getInstance({
    account: 'test1',
    onloginportschange: function(err, data) {
    //设备2登录时,打印:
    //data: [{
    // account: 'test1',
    // customTag: 'customTag from test1',
    // connectionId, deviceId, ip, mac, online, os, time, type
    //}]
    console.log('data', data)
    }
    })

    //设备2
    NIM.getInstance({
    account: 'test1',
    customTag: 'customTag from test1'
    })
    db?: boolean

    是否使用 IM 业务数据库(采用 indexedDb),默认 true

    notice

    • 请在 onsyncdone 结束后,再调用 db 相关操作。否则可能调用时,db尚未打开
    • 在 safari 浏览器(桌面端,及iOS系统浏览器)中,使用 SDK 操作数据库时存在一些异常问题,因此 SDK 在移动端 safari 上禁用了数据库。建议移动端浏览器使用 Web SDK 时默认不开启数据库,在初始化时将db设置为 false。
    • 在支持数据库的浏览器上,SDK 会将消息、会话、群组等数据缓存到 indexedDB 数据库中, 后续同步都是增量更新, 加快初始化同步速度。

    若开发时遇到'不支持数据库', 'db::checkDB', 'Not_Support_DB' 等消息,请检查:

    • 请在 getInstance 回调函数 onsyncdone 结束后调用会使用数据库的操作
    • 请确保你使用的不是 Safari 浏览器
    dbLog?: boolean

    是否将日志存储到本地数据库,默认 true,即默认将日志存储到本地数据库。后续如需拉取本地数据库中的日志,请联系云信技术支持。

    note

    日志数据库与 IM 业务数据库为两个数据库,互不影响。

    debug?: boolean

    是否打印调试日志。默认为false,即不打印日志

    deprecated

    推荐使用logLevel控制日志打印级别

    note

    注意,该属性仅影响控制台日志是否开启,不会影响存储在indexdb中的日志级别。

    defaultLink?: string

    默认的备用长连接地址

    notice

    当 LBS 请求出错时,NIM SDK会尝试该长连接地址。若不传此参数,长连接地址默认为云信的公网备用地址。

    expire?: number

    本地数据库中的日志有效期。单位:小时,默认为 72 小时。

    notice

    该字段仅在 dbLog 为 true 时生效。

    httpsEnabled?: boolean

    消息内容里的文件的 CDN 链接是否强制使用 HTTPS 协议。默认 false。

    lbsBackup?: boolean

    是否开启备用 LBS 地址,默认为 true,即 NIM SDK 会将上一次连接成功的 LBS 地址存储到浏览器本地缓存 localStorage 作为备用,当主 LBS 不可用时,会尝试请求备用 LBS 地址进行连接。

    lbsBackupUrlsCustomer?: string[]

    自定义的备用 LBS 地址数组,用于自定义接口去代理 LBS 返回,防止运营商劫持。当主 LBS 不可用且浏览器本地缓存的备用 LBS 地址均不可用时,NIM SDK 会尝试请求自定义的备用 LBS ,优先级比lbsBackup 提到的 localstorage 里缓存的低。

    lbsUrl?: string

    默认使用的 LBS 连接地址

    notice

    NIM SDK 需要先请求 LBS 地址才能获取到与云信服务端的长连接地址,再建立长连接。若不传此参数,长连接地址默认为云信的公网备用地址。

    logLevel?: "debug" | "info" | "warn" | "error" | "off"

    日志级别,默认为 off,即不输出任何日志。该属性会同时影响indexdb和控制台中的日志级别

    • off:不输出任何日志
    • debug:输出debug、info、warn 和 error 级别的日志
    • info:输出 info、warn、和 error 级别的日志
    • warn:输出 warn 和 error 级别的日志
    • error:输出 error 级别的日志
    loginExt?: string

    登录自定义扩展字段,可转发给指定的第三方服务器,不会同步至其他端。authType为 2,即通过第三方回调进行 IM 登录鉴权时,必须传入,用于第三方服务器鉴权。

    note

    第三方回调鉴权相关说明,请参见通过第三方回调登录

    needReconnect?: boolean

    是否开启自动重连,默认 true,即如果长连接因为网络问题、心跳超时等原因断开,NIM SDK 默认自动尝试重连。

    note

    重连的时间间隔从 1.6~8s 之间累加,每次重连将触发 onwillreconnect 事件。

    nosScene?: string

    上传的文件在 NOS 上的存储场景。

    常见说明

    • 常用场景为根据资源类型设置存储场景,然后设置定时任务调用 清理文件 删除。
    • IM 默认的存储场景为: 'im'
    • Chatroom 默认的存储场景为: 'chatroom'

    存储场景优先级

    • sendFile 或者 previewFile 时的 nosScene 参数
    • 初始化参数的 nosScene 参数
    • 默认参数: 'im' 或者 'chatroom'

    私有化安全链接

    • 私有化生成安全链接,请设置 nosScene: '_nim_security'
    • 接收方使用 getNosAccessToken 获取带有鉴权信息的链接
    • 使用 deleteNosAccessToken 设置鉴权信息无效

    关联函数

    nosSurvivalTime?: number

    上传的文件在网易云存储服务(NetEase Object Storage, NOS)上的存储有效期。

    notice

    默认为 Infinity(永久)。设置的时间不得小于一天,单位:秒。

    privateConf?: { isABTestEnable?: boolean; isDataReportEnable?: boolean; isMixStoreEnable?: boolean; loginSDKTypeParamCompat?: boolean }

    私有化配置

    Type declaration

    • Optional isABTestEnable?: boolean

      是否开启ABTest,主版本默认是true,稳定版默认是false

      注:稳定版本 8.9.111~8.9.1xx 支持,且主干版本 > 9.11.0 支持

    • Optional isDataReportEnable?: boolean

      是否开启数据上报,默认是true

      注:稳定版本 8.9.111~8.9.1xx 支持,且主干版本 > 9.11.0 支持

    • Optional isMixStoreEnable?: boolean

      是否开启融合存储,主版本默认是true,稳定版默认是false

      注:稳定版本 8.9.111~8.9.1xx 支持,且主干版本 > 9.11.0 支持

    • Optional loginSDKTypeParamCompat?: boolean

      是否需要兼容私有化环境登录参数。

      默认在稳定版为 true,在开发版为 false

      注:稳定版本 >= 8.9.125 支持,主干版本 >= 9.16.0 支持 注:稳定版 8.9.122~8.9.124,主干版本 9.14.3~9.14.4,如果是私有化环境且未升级到最新版本,需要在 options 中设置该变量为 true,否则会导致登录失败。

    quickReconnect?: boolean

    是否开启快速自动重连,默认 false。若设置为 true,NIM SDK 会监听浏览器的 offline 和 online 事件来嗅探网络断开和恢复,将会做相应的断开和重连策略。

    notice

    该字段只有在 needReconnect 为 true 时才有效。

    reconnectionAttempts?: number

    SDK 尝试重连的最大次数,超过后则不再尝试重连。

    note

    当重连尝试达到最大次数,将结束重连过程,最终触发 ondisconnect 回调,表示彻底断开。

    resetUnreadMode?: boolean

    调用关联函数重置会话未读数失败后,是否需要继续重置当前客户端的未读数,默认为true

    • true:继续重置当前客户端未读数。注意,此时本地显示未读数,和服务端保存的未读数不一样
    • false:不重置当前客户端未读数

    关联函数

    rollbackClearMsgsUnread?: boolean

    调用 clearServerHistoryMsgsWithSync 清空历史消息后,是否更新会话未读数以及最后一条消息,并触发 onupdatesessions 回调函数,默认为true。

    rollbackDelMsgUnread?: boolean

    撤回消息后是否更新相应会话的未读数,默认 true

    假设该参数设置为 true 且某会话有 2 条未读消息,如果其中 1 条消息被撤回了,那么该会话未读数变为 1

    关联函数

    deprecated
    secure?: boolean

    是否通过 HTTPS 协议跟服务器建立连接, 默认 true

    socketConcurrent?: number

    socket 并发连接数。

    自从 v9.12.0 开始支持 Socket 并发连接数上限。仅支持设置为 1-3 的整数。默认值为1,表示不支持并发连接。 如果您需要加快 Socket 连接,建议您设置该参数。

    syncAvSignal?: boolean

    是否同步信令未读消息,默认true

    注:9.10.0及以上支持

    syncBroadcastMsgs?: boolean

    是否在初始化时同步离线广播消息,默认 false。

    syncExtraTeamInfo?: boolean

    是否在初始化时同步用户在各个群中的信息。默认为true。如果设置为 false,则初始化阶段 onMyTeamMembers 不会触发。

    onMyTeamMembers 返回了当前用户在各个群中的信息,包括但不限于:

    • mute: 当前成员在群内是否静音
    • muteNotiType: 群消息提醒策略
    • muteTeam: 群组静音是否开启
    • nickInTeam: 群内昵称
    • invitorAccid: 邀请人账号

    关联函数

  • NIMGetInstanceOptions.onMyTeamMembers
  • syncFriendUsers?: boolean

    是否在初始化时同步好友对应的用户名片列表, 默认true

    syncFriends?: boolean
    • 是否在初始化时同步好友列表, 默认 true
    • 如果初始化时未同步好友名单, 可以后续通过 FriendInterface.getFriends 获取好友列表
    syncMsgReceipts?: boolean

    是否在初始化时同步已读回执时间戳, 默认 true。

    若设置为true,则初始化阶段回调函数onsessions中,可以根据session.msgReceiptTime查看会话的已读回执时间

    关联函数

    syncRelations?: boolean

    是否同步黑名单和静音列表, 默认true。若设置为true,则初始化同步接收黑名单和静音列表

    syncRoamingMsgs?: boolean

    是否同步p2p,以及高级群的漫游消息,默认 true。

    syncSessionUnread?: boolean

    默认为false。该参数有两个作用:

    1. 初始化阶段是否同步会话未读数
    2. 一个端设置未读数时,会话在其它端也标记为已读

    关联函数

    syncStickTopSessions?: boolean

    是否在初始化时同步云端的置顶会话信息,默认 false。置顶会话信息通过 onStickTopSessions 传给用户,并附带在会话的 isTop 属性中

    关联函数

    示例场景

    syncSuperTeamRoamingMsgs?: boolean

    是否在初始化时同步超大群的漫游消息, 默认 true。

    syncSuperTeams?: boolean

    是否在初始化时同步超大群列表, 默认true

    syncTeams?: boolean
    • 是否在初始化时同步群列表, 默认 true。
    • 若传 false 就收不到 onteams 回调,开发者后续可以通过 TeamInterface.getTeams 获取群列表
    token: string

    IM 账号的登录凭证。该登录凭证只会在登录 IM (建立 SDK 与云信服务端的长连接)时校验一次。

    Methods

    • 是否对日志做额外的处理,诸如日志存储、日志上报等等。

      该函数会截获 SDK 日志的参数,供开发者使用。

      关联函数

      示例

      const logs = []

      setInterval(() => {
      if (logs.length > 0) {
      //每隔2分钟,将logs的内容上传到您的业务服务器
      //...

      //清空logs
      logs = []
      }
      }, 120000)

      NIM.getInstance({
      logFunc: {
      log: function (data) {
      logs.push(`log: ${data}`)
      },
      warn: function (data) {
      logs.push(`warn: ${data}`)
      },
      info: function (data) {
      logs.push(`info: ${data}`)
      },
      debug: function (data) {
      logs.push(`debug: ${data}`)
      },
      error: function (data) {
      logs.push(`error: ${data}`)
      }
      }
      })

      Parameters

      Returns void

    • onClearServerHistoryMsgs(dataArr: { ext: undefined | string; sessionId: string; time: number }[]): void
    • 多端同步或初始化同步时,接收函数 MessageLogInterface.clearServerHistoryMsgsWithSync 调用后的回调函数。

      无论用户是否注册该回调,SDK都会在收到多端同步删除云端历史时,清空本地数据库中对应会话的数据。

      用户收到该事件后,应该将会话中,时间早于该事件时间的消息清空

      示例场景

      Parameters

      • dataArr: { ext: undefined | string; sessionId: string; time: number }[]

      Returns void

    • onDeleteMsgSelf(data: { custom?: string; deletedTime: number; from: string; idClient: string; idServer: string; scene: "p2p" | "team" | "superTeam"; time: number; to: string }): void
    • 多端登录时,接收到删除本地消息的回调函数

      Parameters

      • data: { custom?: string; deletedTime: number; from: string; idClient: string; idServer: string; scene: "p2p" | "team" | "superTeam"; time: number; to: string }
        • Optional custom?: string

          扩展字段

          注:推荐传入 JSON 序列化的字符串

        • deletedTime: number

          消息删除的时间

        • from: string

          消息发送方, 帐号

        • idClient: string

          端测生成的消息id, 可作为消息唯一主键使用。

        • idServer: string

          服务器用于区分消息用的ID, 用于获取历史消息和获取包含关键词的历史消息。

        • scene: "p2p" | "team" | "superTeam"

          消息场景:

          • p2p:单聊场景
          • team:群聊场景
          • superteam:超大群场景
        • time: number

          时间戳

        • to: string

          消息接收方, 帐号或群id

      Returns void

    • onDeleteQuickComment(data: { from: string; idClient: string; idServer: string; scene: "p2p" | "team" | "superTeam"; time: number; to: string }, comment: { body: number; custom?: string; from: string; time: number }): void
    • 删除快捷评论时,消息的发送者,以及快捷评论发送者的多端登录账户会收到 onDeleteQuickComment 回调函数

      关联函数

      示例

      // key: sessionId
      // value.msgs: 消息列表
      // value.msgs[idx].quickComments: 评论列表
      const sessions = {}

      function getSessionId(msg) {
      if (msg.scene !== 'p2p') {
      return `${msg.scene}-${msg.to}`
      } else if (msg.from === nim.account) {
      return `p2p-${msg.to}`
      } else {
      return `p2p-${msg.from}`
      }
      }


      nim = NIM.getInstance({
      // 收到了删除评论的通知,从快捷评论队列中移除评论
      onDeleteQuickComment: function(msg, comment) {
      const sessionId = getSessionId(msg)
      const session = sessions[sessionId]
      if (session) {
      for (let _msg of session.msgs) {
      if (_msg.idClient === msg.idClient) {
      // 找到了被评论的消息
      _msg.quickComments = _msg.quickComments || []

      // 剔除同一账号类型相同的快捷评论
      for (let i = _msg.quickComments.length - 1; i >= 0; i--) {
      if (_msg.quickComments[i].from === comment.from && _msg.quickComments[i].body === comment.body) {
      _msg.quickComments.splice(i, 1)
      break
      }
      }
      }
      }
      }
      }
      })

      Parameters

      • data: { from: string; idClient: string; idServer: string; scene: "p2p" | "team" | "superTeam"; time: number; to: string }
        • from: string

          消息发送方, 帐号

        • idClient: string

          端测生成的消息id, 可作为消息唯一主键使用。

        • idServer: string

          服务器用于区分消息用的ID, 用于获取历史消息和获取包含关键词的历史消息。

        • scene: "p2p" | "team" | "superTeam"

          消息场景:

          • p2p:单聊场景
          • team:群聊场景
          • superteam:超大群场景
        • time: number

          时间戳

        • to: string

          消息接收方, 帐号或群id

      • comment: { body: number; custom?: string; from: string; time: number }
        • body: number

          快捷评论内容

        • Optional custom?: string

          扩展内容

        • from: string

          该评论的发送方的 account ID

        • time: number

          评论的发送时间。

      Returns void

    • onDismissSuperTeam(data: { teamId: string }): void
    • 群解散时,群内所有成员收到 onDismissSuperTeam 的回调。群解散接口只能够通过服务器API调用

      示例

      const superTeamById = {}

      nim = NIM.getInstance({
      onDismissSuperTeam: function (data) {
      console.log('debug++ onDismissSuperTeam', data)
      const teamId = data.teamId
      delete superTeamById[teamId]
      }
      })

      Parameters

      • data: { teamId: string }
        • teamId: string

      Returns void

    • onDismissTeam(data: { teamId: string }): void
    • (初始化同步, 在线, 多端同步)收到了当前账户,在各个群内的信息设置。比如当前用户是否为群主、管理员、是否设置了免打扰等等。

      注: 自己的超级群成员信息里有字段可以代表对此群的免打扰策略,开发者可自行组合到 session 中。

      Parameters

      Returns void

    • (初始化同步, 在线, 多端同步)收到了当前账户,在各个群内的信息设置。比如当前用户是否为群主、管理员、是否设置了免打扰等等。

      Parameters

      Returns void

    • onPinMsgChange(data: { msg: NIMMsgPinInfo; pinTag: { createTime: number; pinCustom?: string; pinFrom: string; updateTime: number } }, action: "add" | "update" | "delete"): void
    • 新增、更新、删除 一条消息的PIN标记时,会触发多端登录设备的 onPinMsgChange 回调

      关联函数

      示例

      // key: sessionId
      // value.msgs: 会话中消息列表
      // value.msgs[idx].pinInfo: 如果有pinInfo,说明该消息被收藏
      const sessions = {}

      // 找到会话列表中被PIN的消息
      function getMsgInSessions(msg) {
      const sessionId = getSessionId(msg)
      const session = sessions[sessionId]
      if (session) {
      const msgs = session.msgs || []
      for (let _msg of msgs) {
      if (msg.idClient === _msg.idClient) {
      return _msg
      }
      }
      }
      }

      function getSessionId(msg) {
      if (msg.scene !== 'p2p') {
      return `${msg.scene}-${msg.to}`
      } else if (msg.from === nim.account) {
      return `p2p-${msg.to}`
      } else {
      return `p2p-${msg.from}`
      }
      }

      nim = NIM.getInstance({
      onPinMsgChange: function (data, action) {
      const _msg = getMsgInSessions(data.msg)
      if (action === 'add' || action === 'update') {
      _msg.pinInfo = data.pinTag
      } else {
      _msg.pinInfo = undefined
      }
      }
      })

      Parameters

      • data: { msg: NIMMsgPinInfo; pinTag: { createTime: number; pinCustom?: string; pinFrom: string; updateTime: number } }
        • msg: NIMMsgPinInfo

          被 pin 标记的消息的基础结构

        • pinTag: { createTime: number; pinCustom?: string; pinFrom: string; updateTime: number }
          • createTime: number
          • Optional pinCustom?: string

            pin 标记的扩展字段

          • pinFrom: string

            pin 标记的操作者

          • updateTime: number
      • action: "add" | "update" | "delete"

      Returns void

    • onQuickComment(msg: { from: string; idClient: string; idServer: string; scene: "p2p" | "team" | "superTeam"; time: number; to: string }, comment: { body: number; custom?: string; from: string; time: number }): void
    • 对消息添加快捷评论后,消息的发送者,以及快捷评论的多端登录设备,会收到 onQuickComment 回调函数

      快捷评论只能够发送整数类型的字段。常用快捷评论给消息添加表情类的回复。比如1代表鲜花,2代表开心,等等。

      同一个用户发送多次同一类型的快捷评论时,先发送的评论会被后续的发送覆盖

      关联函数

      示例

      // key: sessionId
      // value.msgs: 消息列表
      // value.msgs[idx].quickComments: 评论列表
      const sessions = {}

      function getSessionId(msg) {
      if (msg.scene !== 'p2p') {
      return `${msg.scene}-${msg.to}`
      } else if (msg.from === nim.account) {
      return `p2p-${msg.to}`
      } else {
      return `p2p-${msg.from}`
      }
      }

      nim = NIM.getInstance({
      //收到了新的评论,将评论附加到消息的快捷评论队列中
      onQuickComment: function(msg, comment) {
      const sessionId = getSessionId(msg)
      const session = sessions[sessionId]
      if (session) {
      for (let _msg of session.msgs) {
      if (_msg.idClient === msg.idClient) {
      // 找到了被评论的消息
      _msg.quickComments = _msg.quickComments || []

      // 先剔除同一账号类型相同的快捷评论
      for (let i = _msg.quickComments.length - 1; i >= 0; i--) {
      if (_msg.quickComments[i].from === comment.from && _msg.quickComments[i].body === comment.body) {
      _msg.quickComments.splice(i, 1)
      break
      }
      }

      _msg.quickComments.push(comment)
      }
      }
      }
      }
      })

      Parameters

      • msg: { from: string; idClient: string; idServer: string; scene: "p2p" | "team" | "superTeam"; time: number; to: string }
        • from: string

          消息发送方, 帐号

        • idClient: string

          端测生成的消息id, 可作为消息唯一主键使用。

        • idServer: string

          服务器用于区分消息用的ID, 用于获取历史消息和获取包含关键词的历史消息。

        • scene: "p2p" | "team" | "superTeam"

          消息场景:

          • p2p:单聊场景
          • team:群聊场景
          • superteam:超大群场景
        • time: number

          时间戳

        • to: string

          消息接收方, 帐号或群id

      • comment: { body: number; custom?: string; from: string; time: number }
        • body: number

          快捷评论内容

        • Optional custom?: string

          扩展内容

        • from: string

          该评论的发送方的 account ID

        • time: number

          评论的发送时间。

      Returns void

    • onRemoveSuperTeamMembers(data: { account: string[]; team?: NIMSuperTeam; teamId: string }): void
    • 有成员离开超级群时,包括该成员在内所有在线的客户端,触发该回调函数。

      notice

      开发者需要判定 data 里 account 是否包含当前 IM 账号(accid), 来处理当前 IM 账号被踢出群的情况。

      Parameters

      • data: { account: string[]; team?: NIMSuperTeam; teamId: string }
        • account: string[]

          被添加的用户的 IM 账号(accid)

        • Optional team?: NIMSuperTeam

          群的信息。

          注: 已知主动离开群的场景触发的 onRemoveSuperTeamMembers 是不存在 team 信息的。

        • teamId: string

          群 ID

      Returns void

    • onRemoveTeamMembers(data: { account: string[]; team?: NIMTeam; teamId: string }): void
    • 有成员离开群组时,包括该成员在内所有在线的客户端,触发该回调函数。

      notice

      开发者需要判定 data 里 account 是否包含当前 IM 账号(accid), 来处理当前 IM 账号被踢出群的情况。

      关联函数

      示例场景

      Parameters

      • data: { account: string[]; team?: NIMTeam; teamId: string }
        • account: string[]

          被添加的用户的 IM 账号(accid)

        • Optional team?: NIMTeam

          群的信息。

          注: 已知主动离开群的场景触发的 onRemoveSuperTeamMembers 是不存在 team 信息的。

        • teamId: string

          群 ID

      Returns void

    • onSessionsWithMoreRoaming(datas: NIMSession[]): void
    • deprecated

      不建议使用

      钩子函数-在初始化时同步接收会话仍有更多的漫游消息回调。

      注:其中的 session.time 之前的时间里,仍有超过漫游数量限制而未漫游下来的消息。开发者可以进入会话时,通过获取历史消息再拉取消息。

      Parameters

      Returns void

    • 初始化时同步超级群列表的回调

      示例

      const superTeamById = {}

      nim = NIM.getInstance({
      syncSuperTeams: true
      onSuperTeams: function (teamArr) {
      for (let team of teamArr) {
      superTeamById[team.teamId] = team
      }
      }
      })

      Parameters

      Returns void

    • 在线阶段,群主收到超级群创建的通知(超级群只能够通过服务器接口创建)

      Parameters

      Returns void

    • onTeamMsgReceipt(data: { teamMsgReceipts: { account: string; idClient: string; idServer: string; read: number; teamId: string; unread: number }[] }): void
    • deprecated

      已废弃。推荐开发者调用 NIMGetInstanceOptions.onMsgReceipts

      Parameters

      • data: { teamMsgReceipts: { account: string; idClient: string; idServer: string; read: number; teamId: string; unread: number }[] }
        • teamMsgReceipts: { account: string; idClient: string; idServer: string; read: number; teamId: string; unread: number }[]

          data.teamMsgReceipts:

          • teamId: 消息所属群id
          • idServer: 消息的idServer
          • idClient: 消息的idClient
          • read: 当前已标记 receipt 的人数
          • unread: 当前未标记 receipt 的人数
          • account: 当前标记 receipt 者的账号 account ID

      Returns void

    • onTransferTeam(data: { from: { id: string; type: "normal" | "manager" | "owner"; updateTime: number }; team: NIMTeam; to: { id: string; type: "normal" | "manager" | "owner"; updateTime: number } }): void
    • 群主变更时,所有在线群成员都会收到此回调

      Parameters

      • data: { from: { id: string; type: "normal" | "manager" | "owner"; updateTime: number }; team: NIMTeam; to: { id: string; type: "normal" | "manager" | "owner"; updateTime: number } }
        • from: { id: string; type: "normal" | "manager" | "owner"; updateTime: number }

          转让者的信息

          • id: string

            群成员 ID (群 ID + account)

          • type: "normal" | "manager" | "owner"

            群成员类型

            • 'normal' (普通成员)
            • 'owner' (群主)
            • 'manager' (管理员)
          • updateTime: number

            更新时间

        • team: NIMTeam
        • to: { id: string; type: "normal" | "manager" | "owner"; updateTime: number }

          被转让的目标用户的信息

          • id: string

            群成员 ID (群 ID + account)

          • type: "normal" | "manager" | "owner"

            群成员类型

            • 'normal' (普通成员)
            • 'owner' (群主)
            • 'manager' (管理员)
          • updateTime: number

            更新时间

      Returns void

    • onUpdateSuperTeam(data: Pick<NIMSuperTeam, "custom" | "teamId" | "updateTime" | "announcement" | "avatar" | "intro" | "name">): void
    • onUpdateSuperTeamManagers(data: { account: string[]; isManager: boolean; members: Pick<NIMSuperTeamMember, "id" | "updateTime" | "type">[]; team: Pick<NIMSuperTeam, "teamId" | "memberUpdateTime"> }): void
    • onUpdateSuperTeamMember(data: Pick<NIMSuperTeamMember, "id" | "account" | "custom" | "muteTeam" | "nickInTeam" | "teamId" | "updateTime" | "muteNotiType">): void
    • onUpdateSuperTeamMembersMute(data: { account: string[]; members: Pick<NIMSuperTeamMember, "id" | "teamId" | "updateTime" | "type" | "mute">[]; mute: boolean; team: NIMSuperTeam }): void
    • 对指定成员禁言或者解除禁言后,超级群内所有在线成员收到该回调

      Parameters

      • data: { account: string[]; members: Pick<NIMSuperTeamMember, "id" | "teamId" | "updateTime" | "type" | "mute">[]; mute: boolean; team: NIMSuperTeam }
        • account: string[]

          被添加的用户的账号

        • members: Pick<NIMSuperTeamMember, "id" | "teamId" | "updateTime" | "type" | "mute">[]

          被添加的用户的群成员基础信息

        • mute: boolean

          是否静音.

          若为 false 代表被移出静音列表.

        • team: NIMSuperTeam

          群的基础信息

      Returns void

    • onUpdateTeamManagers(data: { account: string[]; isManager: boolean; members: { account: string; id: string; type: "normal" | "manager" | "owner"; updateTime: number }[]; team: { memberUpdateTime: number; teamId: string } }): void
    • 群管理成员变更时,在线群成员会收到该回调

      Parameters

      • data: { account: string[]; isManager: boolean; members: { account: string; id: string; type: "normal" | "manager" | "owner"; updateTime: number }[]; team: { memberUpdateTime: number; teamId: string } }
        • account: string[]

          被添加的用户的账号

        • isManager: boolean

          是否为管理员.

          若为 false 代表被移出管理员列表.

        • members: { account: string; id: string; type: "normal" | "manager" | "owner"; updateTime: number }[]

          被添加的用户的群成员基础信息

        • team: { memberUpdateTime: number; teamId: string }

          群的基础信息

          • memberUpdateTime: number

            群成员最后更新时间戳

          • teamId: string

            群Id

      Returns void

    • onUpdateTeamMembersMute(data: { account: string[]; members: { id: string; mute?: boolean; teamId: string; type: "normal" | "manager" | "owner"; updateTime: number }; mute: boolean; team: NIMTeam }): void
    • 对指定成员禁言或者解除禁言后,群内所有在线成员收到该回调

      Parameters

      • data: { account: string[]; members: { id: string; mute?: boolean; teamId: string; type: "normal" | "manager" | "owner"; updateTime: number }; mute: boolean; team: NIMTeam }
        • account: string[]

          被添加的用户的账号

        • members: { id: string; mute?: boolean; teamId: string; type: "normal" | "manager" | "owner"; updateTime: number }

          被添加的用户的群成员基础信息

          • id: string

            群成员 ID (群 ID + account)

          • Optional mute?: boolean

            (该成员)是否被禁言

          • teamId: string

            群ID

          • type: "normal" | "manager" | "owner"

            群成员类型

            • 'normal' (普通成员)
            • 'owner' (群主)
            • 'manager' (管理员)
          • updateTime: number

            更新时间

        • mute: boolean

          是否静音.

          若为 false 代表被移出静音列表.

        • team: NIMTeam

          群的基础信息

      Returns void

    • onblacklist(datas: { account: string; createTime: number; updateTime: number }[]): void
    • onconnect(data: { connectionId: string; country?: string; customTag?: string; ip: string; lastLoginDeviceId: string; port: string }): void
    • SDK 与云信服务端建立长连接的回调。用户可以通过onwillreconnect, onconnect, ondisconnect等回调函数,在界面中提示应用的网络状态。

      连接建立后的回调, 会传入一个对象, 包含登录的信息, 有以下字段:

      • lastLoginDeviceId: 上次登录的设备的设备号
      • customTag: 客户端自定义tag,登录时多端同步改字段,最大32个字符
      • connectionId: 本次登录的连接号
      • ip: 客户端IP
      • port: 客户端端口
      • country: 本次登录的国家

      关联函数

      示例场景

      Parameters

      • data: { connectionId: string; country?: string; customTag?: string; ip: string; lastLoginDeviceId: string; port: string }
        • connectionId: string

          本次登录的连接号

        • Optional country?: string

          地区

        • Optional customTag?: string

          客户端自定义 tag。最多 32 个字符。

        • ip: string

          本机外网IP 地址

        • lastLoginDeviceId: string

          上次登录的设备的设备号

        • port: string

          端口

      Returns void

    • SDK 与云信服务端断开长连接的回调。用户可以通过onwillreconnect, onconnect, ondisconnect等回调函数,在界面中提示应用的网络状态

      • 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码 code 提示相应的错误信息, 并且跳转到登录页面

      关联函数

      示例场景

      示例

        // store代指你的应用中存放数据的对象
      NIM.getInstance({
      ondisconnect: function (res) {
      // 根据断开的 code 设置页面提示
      // 数字类型的 code 为初次登陆时,服务器返回的状态码
      // 字符类型的 code 为登录保持态断开时的状态码
      if (typeof res.code === "number") {
      if (res.code === 302) {
      store.uistate.networkHint = "账号或者密码错误";
      } else if (res.code === 403) {
      store.uistate.networkHint = "账号禁止登录";
      } else if (res.code === 422) {
      store.uistate.networkHint = "账号被禁用";
      } else if (res.code === 417) {
      store.uistate.networkHint = "重复登录, 已经在其它端登录了";
      } else {
      store.uistate.networkHint = "账号无法登录";
      }
      } else if (res.code === "kicked") {
      if (res.reason === 'samePlatformKick' || res.reason === 'otherPlatformKick') {
      store.uistate.networkHint = '当前账户已在其它设备中登录'
      } else if (res.reason === 'serverKick') {
      store.uistate.networkHint = '当前设备已被服务器踢掉'
      } else {
      store.uistate.networkHint = '账号已被踢出'
      }
      } else if (res.code === "allAttemptsFailed") {
      store.uistate.networkHint = "无法连接至服务器";
      } else if (res.code === "logout") {
      store.uistate.networkHint = "当前账户已登出";
      } else {
      store.uistate.networkHint = "当前账户已登出";
      }

      redirect("loginPage");
      }
      })

      Parameters

      Returns void

    • 初始化阶段发生错误的回调。

      notice

      这里的“错误”,通常为数据库错误,也有少量情况为连接错误,建议开发者做错误收集。

      Parameters

      Returns void

    • 多端登录状态变化的回调, 可通过该回调获取登录端列表。以下情况该回调触发:

      • 登录时其它端在线
      • 登录后其它端上线或者下线

      Parameters

      Returns void

    • onmutelist(datas: { account: string; createTime: number; updateTime: number }[]): void
    • 初始化阶段返回静音列表。注意,和黑名单一样,静音名单为单向的。静音名单主要的作用是设置会话免打扰:

      • 静音列表中用户发送消息时,不会有离线消息推送
      • 应用层可以根据静音列表,决定是否渲染消息未读数通知

      关联函数

      示例场景

      Parameters

      • datas: { account: string; createTime: number; updateTime: number }[]

      Returns void

    • onofflinemsgs(datas: { msgs: NIMMessage[]; scene: "p2p" | "team" | "superTeam"; sessionId: string; to: string }): void
    • 在初始化阶段,或者在线时,接收订阅事件。

      接收订阅事件之前,需要调用 subscribeEvent 订阅事件。

      订阅事件时,可以设置有效时间,在有效时间内重新登录,无需重新调用 subscribeEvent

      订阅事件类型

      1. 在线状态订阅, 主要用于监听好友的在线状态。初始化阶段,只有订阅监听的账户在线时,才会收到在线订阅事件
      • type = 1, value = 1: 用户在线
      • type = 1, value = 2: 用户登出
      • type = 1, value = 3: 用户断开连接
      2. 用户自定义事件。通过 publishEvent 发布 用户自定义的订阅事件必须为 type = 1, value >= 10000

      关联函数

      示例场景

      Parameters

      Returns void

    • onroamingmsgs(datas: { msgs: NIMMessage[]; scene: "p2p" | "team" | "superTeam"; sessionId: string; to: string }): void
    • 初始化阶段接收漫游消息的回调。具体的消息来源可以查看 onmsg 回调

      notice

      初始化同步会触发多次这个事件,每个会话触发一次。

      • 离线消息是指暂无客户端接收过的消息
      • 漫游消息是指至少一个客户端接收过的消息

      关联函数

      示例场景

      Parameters

      • datas: { msgs: NIMMessage[]; scene: "p2p" | "team" | "superTeam"; sessionId: string; to: string }
        • msgs: NIMMessage[]
        • scene: "p2p" | "team" | "superTeam"
        • sessionId: string
        • to: string

      Returns void

    • onsynccreateteam(data: NIMTeam): void
    • 多端登录时接收“创建群通知”的回调。

      deprecated

      请使用 onCreateTeam 替代该回调

      Parameters

      Returns void

    • onsyncdone(): void
    • 初始化同步完成的回调。如果开启了 db,应该在同步结束后再开始调用会使用 db 的操作。

      note

      getHistoryMsgs 如果在 onsyncdone 之前调用,则其消息的状态可能不准确。因为消息的状态依赖于同步阶段获取的会话已读时间。

      Returns void

    • onsyncfriendaction(data: { account?: string; friend?: NIMFriendProfile; type: "addFriend" | "applyFriend" | "passFriendApply" | "rejectFriendApply" | "deleteFriend" | "updateFriend" }): void
    • 多端登录时接收好友动作的回调。好友动作包括添加好友、好友申请、通过好友申请、拒绝好友申请、删除好友和更新好友备注。

      Parameters

      • data: { account?: string; friend?: NIMFriendProfile; type: "addFriend" | "applyFriend" | "passFriendApply" | "rejectFriendApply" | "deleteFriend" | "updateFriend" }
        • Optional account?: string

          账号信息,当 type 为下列类型时存在:

          • addFriend
          • applyFriend
          • passFriendApply
          • rejectFriendApply
          • deleteFriend
        • Optional friend?: NIMFriendProfile

          好友信息。当type为下列类型时存在:

          • addFriend
          • passFriendApply
          • updateFriend
        • type: "addFriend" | "applyFriend" | "passFriendApply" | "rejectFriendApply" | "deleteFriend" | "updateFriend"

          好友动作类型

          • addFriend 添加好友
          • applyFriend 好友申请
          • passFriendApply 通过好友申请
          • rejectFriendApply 拒绝好友申请
          • deleteFriend 删除好友
          • updateFriend 更新好友备注

      Returns void

    • onsyncmarkinblacklist(data: { account: string; isAdd: boolean; record: { account: string; updateTime: number } }): void
    • 多端登录时接收“拉黑/移出黑名单事件”的回调

      关联函数

      示例场景

      Parameters

      • data: { account: string; isAdd: boolean; record: { account: string; updateTime: number } }
        • account: string

          被操作者账号 ID

        • isAdd: boolean

          是否加入名单(黑名单或者静音列表)

          true 代表某人被加入名单,false 代表某人被移出名单

        • record: { account: string; updateTime: number }

          该操作记录的详情

          • account: string

            被操作者账号 ID

          • updateTime: number

            更新时间戳

      Returns void

    • onsyncmarkinmutelist(data: { account: string; isAdd: boolean; record: { account: string; updateTime: number } }): void
    • 多端登录时接收“拉黑/移出静音列表”的回调

      关联函数

      示例场景

      Parameters

      • data: { account: string; isAdd: boolean; record: { account: string; updateTime: number } }
        • account: string

          被操作者账号 ID

        • isAdd: boolean

          是否加入名单(黑名单或者静音列表)

          true 代表某人被加入名单,false 代表某人被移出名单

        • record: { account: string; updateTime: number }

          该操作记录的详情

          • account: string

            被操作者账号 ID

          • updateTime: number

            更新时间戳

      Returns void

    • 在线时接收系统通知未读数的更新。注意,该回调仅在db = true时有意义。

      在线阶段,SDK接收到系统通知后更新未读数。或者,SDK调用本地系统通知已读后,收到系统通知未读数更新回调

      注意未读数结果中,以下字段为:

      • total = friend + msg + team + superTeam
      • msg = deleteMsg
      • friend = applyFriend + passFriendApply + rejectFriendApply + deleteFriend
      • team = applyTeam + rejectTeamApply + teamInvite + rejectTeamInvite
      • superTeam = applySuperTeam + rejectSuperTeamApply + superTeamInvite + rejectSuperTeamInvite

      会触发系统通知的函数列表请查看 onsysmsg

      关联函数

      Parameters

      Returns void

    • onupdateteammember(data: Pick<NIMTeamMember, "id" | "account" | "custom" | "muteTeam" | "nickInTeam" | "teamId" | "updateTime" | "muteNotiType">): void
    • onwillreconnect(data: { duration: number; retryCount: number }): void
    • SDK 与云信服务端即将重连的回调。用户可以通过onwillreconnect, onconnect, ondisconnect等回调函数,在界面中提示应用的网络状态

      notice

      该回调如果触发,说明 SDK 已与云信服务端断开长连接。此时需在界面上提示用户:连接已断开, 而且正在重新建立连接。

      notice

      若 authType 等于 1,则需要再 onwillreconnect 时动态更新 token。如果是异步场景,比如需要等服务器响应,可以返回一个 Promise, SDK 会等待 Promise 完成后再执行重连

      示例场景

      Parameters

      • data: { duration: number; retryCount: number }
        • duration: number

          重试间隔

        • retryCount: number

          重试次数

      Returns void

    • reconnectDelayProvider(delay: number): number
    • 设置函数-去设置重连退避间隔. 稳定版自 8.9.124+ 支持,主干版本自 9.16.0+ 支持

      Parameters

      • delay: number

        原本的重连退避间隔时间. 单位毫秒

      Returns number

      返回一个新的重连退避间隔时间. 单位毫秒

    • shouldCountNotifyUnread(notification: NIMMessage): void
    • 判定通知类消息是否计入会话的未读数。通知类消息主要包括群通知类消息和超级群通知类消息,具体请查看 NIMGetInstanceOptions.onmsg

      notice

      该方法接收一个通知消息,如果函数结果返回 true,则将该通知消息计入未读数,否则不计入未读数。默认返回false。

      示例

      NIM.getInstance({
      shouldCountNotifyUnread: function(msg) {
      // 假设在你的业务场景下,移除群成员时,不需要设置未读数
      return msg && msg.attach && msg.attach.type !== "removeTeamMembers"
      }
      })

      Parameters

      Returns void

    • shouldIgnoreNotification(notification: NIMMessage): void
    • 判定是否需要忽略通知类型的消息。通知类消息主要包括群通知类消息和超级群通知类消息,具体请查看 NIMGetInstanceOptions.onmsg

      notice

      该方法接收一个通知消息,并返回一个布尔值。该值默认为 false。

      示例

      NIM.getInstance({
      shouldIgnoreNotification: function(msg) {
      // 假设在你的业务场景下,移除群成员时,不需要设置群最后一条消息
      return msg && msg.attach && msg.attach.type !== "removeTeamMembers"
      }
      })

      Parameters

      Returns void