Class: NIM

NIM


new NIM()

请使用 NIM.getInstance 来初始化 SDK.
此接口为单例模式, 对于同一个账号, 永远返回同一份实例, 即只有第一次调用会初始化一个实例, 后续调用此接口会直接返回初始化过的实例.

Methods


<static> getInstance(options)

  • 此接口为单例模式, 对于同一个账号, 永远返回同一份实例, 即只有第一次调用会初始化一个实例
  • 后续调用此接口会直接返回初始化过的实例, 同时也会调用接口setOptions更新传入的配置
  • 后续调用此接口时, 如果连接已断开, 会自动建立连接
  • 当发生掉线时,SDK会自动进行重连
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
debug Boolean | Object <optional>
false

是否开启调试, 如果开启调试, 将会在控制台输出一些log。默认false不输出日志, 可以传true来开启日志。

logFunc function | Object <optional>
null

是否对日志做额外的处理,诸如日志存储、日志上报等等,该函数会截获console日志的参数,供开发者使用

secure Boolean | Object <optional>
true

secure 模式下会通过 https 协议跟服务器建立连接, 非 secure 模式下会通过 http 协议跟服务器建立连接, 默认 true

appKey String

在云信管理后台查看应用的 appKey

account String

帐号, 应用内唯一

token String

帐号的 token, 也可理解为密码。初始化登录建立连接时会校验一次

authType number <optional>
0

账号token的认证类型,有三种

  • 0:token是固定的,只有主动调用接口修改才会更改
  • 1:token是动态的,有过期时间。token过期后已登录状态的连接不受影响,但之后的登录(包括自动重连、正常的登录连接)需使用新token。对于自动重连场景,开发者可在onwillreconnect中,判断token是否过期,若过期可调用setOptions更新token
  • 2:账号和token由开发者的服务校验,云信服务器收到登录请求后会转发至开发者服务器,并将其校验结果返回
loginExt string <optional>

登录时的扩展字段,可抄送给开发者服务器,不会同步至其他端

nosScenes String <optional>
'im'

nos文件存储全局配置,存储场景,实例有效,默认im

nosSurvivalTime Number <optional>
Infinity

nos文件存储全局配置,存储有效时间,实例有效,默认Infinity 不得小于一天,单位秒

customTag String <optional>

客户端自定义tag,登录时多端同步改字段,最大32个字符

customClientType Integer <optional>

自定义客户端类型,大于0的整数;可实现自定义多端登录策略,具体策略可在云信管理后台配置

onconnect function <optional>

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

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

即将重连的回调

  • 此时说明 SDK 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
  • 此回调会收到一个对象, 包含额外的信息, 有以下字段
    • duration: 距离下次重连的时间
    • retryCount: 重连尝试的次数
  • authType等于1时,开发者需在该回调中检查token的有效期,如果已过期,需调用setOptions更新token,如果是异步场景,比如需要等服务器响应,可以返回一个Promise,SDK会等待(最多10s)Promise完成后再执行重连
ondisconnect function <optional>

断开连接后的回调

  • 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
  • 此回调会收到一个对象, 包含错误的信息, 有以下字段
    • code: 出错时的错误码, 可能为空
      • 302: 账号或者密码错误, 请跳转到登录页面并提示错误
      • 417: 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误
      • 'kicked': 被踢
  • code'kicked'的时候, 此对象会有以下字段
    • reason: 被踢的原因
      • samePlatformKick: 不允许同一个帐号在多个地方同时登录
      • serverKick: 被服务器踢了
      • otherPlatformKick: 被其它端踢了
    • message: 文字描述的被踢的原因
    • custom:被服务器踢的扩展字段,调用服务器API踢用户时可以自定义
    • from: 踢人操作方的客户端类型,有以下几种:Android, iOS, PC, Web, Server, Mac, WindowsPhone,
    • customClientType: 踢人操作方的自定义客户端类型,仅当操作方登录时指定了自定义客户端类型时才有
onerror function <optional>

发生错误的回调, 会传入错误对象

onloginportschange function <optional>

多端登录状态变化的回调, 会收到登录端列表, 以下情况会收到此回调

  • 登录时其它端在线
  • 登录后其它端上线或者下线
syncRelations Boolean <optional>
true

是否同步黑名单和静音列表, 默认true. 如果传false就收不到黑名单和静音列表, 即不会收到onblacklist回调和onmutelist回调, 开发者后续可以调用获取黑名单和静音列表来获取黑名单和静音列表。

onblacklist function <optional>

同步黑名单的回调, 会传入黑名单列表blacklist

onsyncmarkinblacklist function <optional>

当前登录用户在其它端加入黑名单/从黑名单移除后的回调, 会传入一个参数, 包含两个字段

  • account: 要加入黑名单/从黑名单移除的账号
  • isAdd: true表示加入黑名单, false表示从黑名单移除
onmutelist function <optional>

同步静音列表的回调, 会传入静音列表mutelist

onsyncmarkinmutelist function <optional>

当前登录用户在其它端加入静音列表/从静音列表移除后的回调, 会传入一个参数, 包含两个字段

  • account: 要加入黑名单/从黑名单移除的账号
  • isAdd: true表示加入静音列表, false表示从静音列表移除
syncFriends Boolean <optional>

是否同步好友列表, 默认true. 如果传false就收不到onfriends回调, 开发者后续可以调用获取好友列表来获取好友列表。

onfriends function <optional>

同步好友列表的回调, 会传入好友列表。没有好友时,使用数据库会调用回调传空数组,否则不回调。

onsyncfriendaction function <optional>

当前登录用户在其它端进行好友相关的操作后的回调

  • 操作包括
  • 此回调会收到一个参数obj, 它有一个字段type的值为操作的类型, 具体类型如下:
    • 'addFriend' (直接加为好友), 此时obj的字段如下:
      • account的值为被直接加为好友的账号
      • friend为被直接加为好友的好友对象
      • ps为附言
    • 'applyFriend' (申请加为好友), 此时obj的字段如下:
      • account的值为被申请加为好友的账号
      • ps为附言
    • 'passFriendApply' (通过好友申请), 此时obj的字段如下:
      • account的值为被通过好友申请的账号
      • friend为被通过好友申请的好友对象
      • ps为附言
    • 'rejectFriendApply' (拒绝好友申请), 此时obj的字段如下:
      • account的值为被拒绝好友申请的账号
      • ps为附言
    • 'deleteFriend' (删除好友), 此时obj的字段如下:
      • account的值为被删除好友的账号
    • 'updateFriend' (更新好友), 此时obj的字段如下:
onmyinfo function <optional>

同步登录用户名片的回调, 会传入用户名片

onupdatemyinfo function <optional>

当前登录用户在其它端修改自己的个人名片之后的回调, 会传入用户名片

syncFriendUsers Boolean <optional>

是否同步好友对应的用户名片列表, 默认true, 如果传false就收不到onusers回调.

onusers function <optional>

同步好友用户名片的回调, 会传入用户名片数组

onupdateuser function <optional>

用户名片更新后的回调, 会传入用户名片

syncSuperTeams Boolean <optional>
true

是否同步超大群列表, 默认true. 如果传false就收不到群列表, 即不会收到onSuperTeams回调, 开发者后续可以调用获取超大群列表来获取群列表.

onSuperTeams function <optional>

同步超大群列表的回调, 会传入超大群数组

onSyncCreateSuperTeam function <optional>

当前登录者创建超大群后的回调, 会传入超大群

onUpdateSuperTeam function <optional>

更新超大群的回调, 此方法接收一个参数, 更新后的群信息

onUpdateSuperTeamMember function <optional>

群成员信息更新后的回调, 会传入超大群群成员对象, 不过此时的信息是不完整的, 只会包括被更新的字段。当前登录帐号在其它端修改自己在群里面的昵称时也会收到此回调

onAddSuperTeamMembers function <optional>

新成员入超大群的回调, 此方法接收一个参数, 包含群信息和群成员信息

onRemoveSuperTeamMembers function <optional>

有人出超大群的回调, 此方法接收一个参数, 包含群信息和被移除的群成员账号

onDismissSuperTeam function <optional>

超大群解散的回调, 所有群成员均会收到该回调。此方法接收一个参数, 包含被解散的群id

onTransferSuperTeam function <optional>

移交超大群的回调, 此方法接收一个参数, 包含群信息和新老群主信息

onUpdateSuperTeamMembersMute function <optional>

更新超大群群成员禁言状态的回调, 此方法接收一个参数, 包含群信息和禁言状态信息

syncTeams Boolean <optional>
true

是否同步群列表, 默认true. 如果传false就收不到群列表, 即不会收到onteams回调, 开发者后续可以调用获取群列表来获取群列表.

syncExtraTeamInfo Boolean <optional>

是否同步额外的群信息, 默认true会同步额外的群信息, 目前包括

  • 当前登录用户是否开启某个群的消息提醒 (SDK 只是存储了此信息, 具体用此信息来做什么事情完全由开发者控制)
  • 调用接口NIM#updateInfoInTeam来关闭/开启某个群的消息提醒
  • 调用接口NIM#notifyForNewTeamMsg来查询是否需要群消息通知
onteams function <optional>

同步群列表的回调, 会传入数组teams

  • teams的属性invalid包含退出的群
onsynccreateteam function <optional>

当前登录用户在其它端创建群后的回调, 会传入群对象

onupdateteammember function <optional>

群成员信息更新后的回调, 会传入群成员对象, 不过此时的信息是不完整的, 只会包括被更新的字段。当前登录帐号在其它端修改自己在群里面的昵称时也会收到此回调。

onCreateTeam function <optional>

创建群的回调, 此方法接收一个参数, 包含群信息和群主信息

onUpdateTeam function <optional>

更新群的回调, 此方法接收一个参数, 更新后的群信息

onAddTeamMembers function <optional>

新成员入群的回调, 此方法接收一个参数, 包含群信息和群成员信息

onRemoveTeamMembers function <optional>

有人出群的回调, 此方法接收一个参数, 包含群信息和群成员账号

onUpdateTeamManagers function <optional>

更新群管理员的回调, 此方法接收一个参数, 包含群信息和管理员信息

onDismissTeam function <optional>

解散群的回调, 此方法接收一个参数, 包含被解散的群id

onTransferTeam function <optional>

移交群的回调, 此方法接收一个参数, 包含群信息和新老群主信息

onUpdateTeamMembersMute function <optional>

更新群成员禁言状态的回调, 此方法接收一个参数, 包含群信息和禁言状态信息

syncSessionUnread Boolean <optional>
false

是否同步会话的未读数, 默认不同步

  • 如果选择同步
    • 那么在一个端读过的会话在其它端也会被标记为已读
    • 在调用NIM#setCurrSession的时候 SDK 会自动同步一次未读数, 此后如果收到当前会话的消息, 需要手动调用NIM#resetSessionUnread来同步未读数
onupdatesession function <optional>

更新会话的回调, 会传入会话(仅包含更新的字段);以下情况会收到此回调

  • 收到消息
  • 发送消息
  • 设置当前会话
  • 重置会话未读数
onupdatesessions function <optional>

批量更新会话的回调, 传出会话列表数组。此函数优先级高于上面的 onupdatesession,若定义了此函数,会话更新回调只会走这个函数。

syncStickTopSessions Boolean <optional>

是否同步置顶会话,默认false,如果传true,则在有置顶会话时,可以收到onStickTopSessions回调,传false则不会

onStickTopSessions function <optional>

同步置顶会话列表, 会传入会话列表

onSyncUpdateServerSession function <optional>

更新服务端会话在线多端同步回调。多端登录时,一端调用NIM#updateServerSession更新了服务端会话,其他端会收到该同步回调

onSessionsWithMoreRoaming function <optional>

同步还有更多漫游消息的会话列表。会传入会话列表,其中的time字段代表该会话在此时间之前的本地漫游消息是不完整的。开发者可以通过获取历史消息的方式获取该时间之前的完整消息列表

shouldIgnoreMsg function <optional>

是否要忽略某消息。该方法会接收一个消息对象,如果该方法返回 true, 那么 SDK 将忽略此条消息(不计未读数,不当lastMsg,不存数据库,不触发onmsg通知)

shouldIgnoreNotification function <optional>

是否要忽略某条通知类消息, 该方法会接收一个消息对象, 如果该方法返回 true, 那么 SDK 将忽略此条通知类消息

shouldCountNotifyUnread function <optional>

通知类消息是否要计入未读数,该方法接收一个消息消息,如果返回true,则将该通知消息计入未读数,否则不计入未读数

syncRoamingMsgs Boolean <optional>
true

是否同步漫游消息, 默认true. 如果传false就收不到漫游消息, 即不会收到onroamingmsgs回调.

syncSuperTeamRoamingMsgs Boolean <optional>
true

是否额外同步大群漫游消息, 默认true. 如果传false就不会收到超大群的 onroamingmsgs 回调.

onroamingmsgs function <optional>

同步漫游消息(包括超大群漫游消息和其他漫游消息)的回调, 每个会话对应一个回调, 会传入消息数组

onofflinemsgs function <optional>

同步离线消息的回调, 每个会话对应一个回调, 会传入消息数组

onmsg function <optional>

收到消息的回调, 会传入消息对象

  • 当前登录帐号在其它端发送消息之后也会收到此回调, 注意此时消息对象的from字段就是当前登录的帐号
onQuickComment function <optional>

收到快捷评论,会传入两个参数,分别是对应的消息评论

onDeleteQuickComment function <optional>

收到删除了快捷评论,会传入两个参数,分别是对应的消息评论

onPinMsgChange function <optional>

收到PIN变更,会传入两个参数,第一个参数是变更的类型,第二个参数是一个对象,有msgpinTag两个属性,分别是被PIN的消息和PIN操作的相关信息

  • 新增/删除/更新 PIN都会收到该回调,三种变更对应的第一个参数分别是adddeleteupdate
  • 第二个参数的pinTag属性是一个对象,有pinFrompinCustomcreateTimeupdateTime四个字段,分别代表pin的操作者、扩展字段、创建时间和更新时间
syncMsgReceipts Boolean <optional>

是否同步已读回执时间戳, 默认true. 如果传false就收不到已读回执时间戳.

onofflinesysmsgs function <optional>

同步离线系统通知的回调, 会传入系统通知数组

onroamingsysmsgs function <optional>

同步漫游系统通知的回调, 会传入系统通知数组

onsysmsg function <optional>

收到系统通知的回调, 会传入系统通知

onupdatesysmsg function <optional>

更新系统通知后的回调, 会传入系统通知

onsysmsgunread function <optional>

收到系统通知未读数的回调

  • SDK 会管理内建系统通知的未读数, 此回调接收的对象包括以下字段
    • total: 总共的未读数
    • friend: 所有跟好友相关的系统通知的未读数
    • addFriend: 直接加为好友的未读数
    • applyFriend: 申请加为好友的未读数
    • passFriendApply: 通过好友申请的未读数
    • rejectFriendApply: 拒绝好友申请的未读数
    • deleteFriend: 删除好友的未读数
    • team: 所有跟群相关的系统通知的未读数
    • teamInvite: 入群邀请的未读数
    • rejectTeamInvite: 接受入群邀请的未读数
    • applyTeam: 入群申请的未读数
    • rejectTeamApply: 拒绝入群申请的未读数
onTeamMsgReceipt function <optional>

收到群消息已读通知(msgReceipt)

onupdatesysmsgunread function <optional>

更新系统通知未读数的回调

onofflinecustomsysmsgs function <optional>

同步离线自定义系统通知的回调, 会传入系统通知数组

oncustomsysmsg function <optional>

收到自定义系统通知的回调, 会传入系统通知

onDeleteMsgSelf function <optional>

收到单向删除消息的回调, 会传入被删除的消息数组

onClearServerHistoryMsgs function <optional>

收到清除会话历史消息的回调, 会传入被删除的 sessionId 以及删除时间

onsyncdone function <optional>

当上面各个同步(不包括下面的同步群成员)完成后, 会调用此回调;注意, SDK保证在onsyncdone调用的时候上面的同步肯定完成了, 但是不保证各个同步回调的顺序。

autoMarkRead Boolean <optional>
true

是否自动标记消息为已收到

  • 默认情况下SDK在收到服务器推送过来的消息后, 会在将消息推给开发者时将消息标记为已读状态, 下次登录后就不会收到标记为已读的消息。
    • SDK通过onofflinemsgsonofflinesysmsgsonofflinecustomsysmsgs等回调将离线消息推送给开发者
    • SDK通过onmsgonsysmsgoncustomsysmsg等回调将在线消息推送给开发者
  • 如果开发者想控制标记消息为已收到的时机, 那么可以传false, 这样SDK就不会自动标记消息已读, 此时需要开发者在适当的时机调用相关的方法来标记消息为已读, 否则下次登录后还会收到未标记为已读的消息。
db Boolean <optional>
true

是否使用数据库

  • 在支持数据库的浏览器上 SDK 会将数据缓存到数据库中, 后续同步都是增量更新, 加快初始化速度
  • 如果开发者不想使用数据库, 那么可以设置dbfalse来禁用数据库
needReconnect Boolean <optional>
true

是否开启自动重连

reconnectionAttempts Number <optional>

SDK尝试重连的最大次数,超过后则不再尝试重连,并触发ondisconnect回调

quickReconnect Boolean <optional>
false

是否开启快速自动重连,只有当needReconnect=true时该配置才有效

syncBroadcastMsgs Boolean <optional>
false

是否同步离线广播

onbroadcastmsgs function <optional>

同步到离线广播消息的回调,仅当options.syncBroadcastMsgs=true时,才会同步离线广播消息

onbroadcastmsg function <optional>

在线时收到广播消息的回调

thumbnailToStatic Boolean <optional>
true

是否将动态图片缩略为静态图片,默认将动态图片缩略为静态图片

  • 仅在covercontain缩略模式下,才支持将动态图片缩略为动态图片,其他模式下只能缩略为静态图片
  • 可以调用SDK的thumbnailImageprocessImage等API生成图片的缩略图
rollbackDelMsgUnread Boolean <optional>
false

撤回消息后是否更新该消息影响的会话未读数。如某会话有两条消息未读,然后其中一条消息被撤回了,若该参数为true,则未读数变为1,否则未读数仍是2

rollbackClearMsgsUnread Boolean <optional>
true

默认 true,清除会话的消息时会去同时更新会话的未读数,lastmsg

logReport Boolean <optional>
false

是否上报异常错误日志,可以将该项设为 false 来禁止上报错误日志

  • SDK会将部分错误及相关信息上传至云信统计平台,方便开发者统计及排查线上错误
defaultLink String <optional>

lbs请求出错时,SDK会尝试连接该地址。默认连接云信的备用地址

lbsBackup Boolean <optional>
true

是否开启备用lbs。若开启,SDK会将备用的lbs地址存储到本地LocalStorage,当主lbs意外不可用时,会尝试请求备用lbs地址连接

lbsBackupUrlsCustomer Boolean <optional>

用户自定义的备用 lbs 地址,接收数组形式,如 ['https://address1', 'https://address2'],用于自行定义接口去代理 lbs 返回,防止运营商劫持。当主lbs意外不可用时,会尝试请求备用lbs地址连接,优先级比上文 localstorage 里缓存的低。

resetUnreadMode Boolean <optional>
true

重置会话未读数时,若同步至服务器失败,是否仅重置本地会话未读数。当同步至服务器失败时,若为true,则本地未读数会被重置,服务器和其他端的未读数不会;若为false,则本地、服务器和其他端都不会被重置(重置失败),各端未读数会保持一致

dbLog Boolean <optional>
true

是否将日志存储到本地数据库,可设置有效期;若为true,日志会被存储到数据库中,可通过服务器API拉取本地数据库中日志。若为false,则不会存储日志。注:日志数据库与IM业务数据库为两个数据库,互不影响。

expire Number <optional>
72

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

httpsEnabled Boolean <optional>
false

消息内容里的文件 cdn 链接,是否强制使用 https 协议

Example
var data = {};
var nim = new NIM({
    // 初始化SDK
    // debug: true
    appKey: 'appKey',
    account: 'account',
    token: 'token',
    onconnect: onConnect,
    onerror: onError,
    onwillreconnect: onWillReconnect,
    ondisconnect: onDisconnect,
    // 多端
    onloginportschange: onLoginPortsChange,
    // 用户关系
    onblacklist: onBlacklist,
    onsyncmarkinblacklist: onMarkInBlacklist,
    onmutelist: onMutelist,
    onsyncmarkinmutelist: onMarkInMutelist,
    // 好友关系
    onfriends: onFriends,
    onsyncfriendaction: onSyncFriendAction,
    // 用户名片
    onmyinfo: onMyInfo,
    onupdatemyinfo: onUpdateMyInfo,
    onusers: onUsers,
    onupdateuser: onUpdateUser,
    // 超大群
    onSuperTeams: onSuperTeams,
    onSyncCreateSuperTeam: onSyncCreateSuperTeam,
    onDismissSuperTeam: onDismissSuperTeam, 
    onUpdateSuperTeamMember: onUpdateSuperTeamMember,
    onUpdateSuperTeam: onUpdateSuperTeam, // 更新超大群的回调
    onAddSuperTeamMembers: onAddSuperTeamMembers, // 新成员入超大群的回调
    onRemoveSuperTeamMembers: onRemoveSuperTeamMembers
    // 群组
    onteams: onTeams,
    onsynccreateteam: onCreateTeam,
    onteammembers: onTeamMembers,
    onsyncteammembersdone: onSyncTeamMembersDone,
    onupdateteammember: onUpdateTeamMember,
    // 会话
    onsessions: onSessions,
    onupdatesession: onUpdateSession,
    // 消息
    onroamingmsgs: onRoamingMsgs,
    onofflinemsgs: onOfflineMsgs,
    onmsg: onMsg,
    // 系统通知
    onofflinesysmsgs: onOfflineSysMsgs,
    onsysmsg: onSysMsg,
    onupdatesysmsg: onUpdateSysMsg,
    onsysmsgunread: onSysMsgUnread,
    onupdatesysmsgunread: onUpdateSysMsgUnread,
    onofflinecustomsysmsgs: onOfflineCustomSysMsgs,
    oncustomsysmsg: onCustomSysMsg,
    // 同步完成
    onsyncdone: onSyncDone
});

function onConnect() {
    console.log('连接成功');
}
function onWillReconnect(obj) {
    // 此时说明 `SDK` 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
    console.log('即将重连', obj);
}
function onDisconnect(error) {
    // 此时说明 `SDK` 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
    console.log('连接断开', error);
    if (error) {
        switch (error.code) {
        // 账号或者密码错误, 请跳转到登录页面并提示错误
        case 302:
            break;
        // 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误
        case 417:
            break;
        // 被踢, 请提示错误后跳转到登录页面
        case 'kicked':
            break;
        default:
            break;
        }
    }
}
function onError(error, obj) {
    console.log('发生错误', error, obj);
}

function onLoginPortsChange(loginPorts) {
    console.log('当前登录帐号在其它端的状态发生改变了', loginPorts);
}

function onBlacklist(blacklist) {
    console.log('收到黑名单', blacklist);
    data.blacklist = nim.mergeRelations(data.blacklist, blacklist);
    data.blacklist = nim.cutRelations(data.blacklist, blacklist.invalid);
    refreshBlacklistUI();
}
function onMarkInBlacklist(obj) {
    console.log(obj.account + '被你' + (obj.isAdd ? '加入' : '移除') + '黑名单', obj);
    if (obj.isAdd) {
        addToBlacklist(obj);
    } else {
        removeFromBlacklist(obj);
    }
}
function addToBlacklist(obj) {
    data.blacklist = nim.mergeRelations(data.blacklist, obj.record);
    refreshBlacklistUI();
}
function removeFromBlacklist(obj) {
    data.blacklist = nim.cutRelations(data.blacklist, obj.record);
    refreshBlacklistUI();
}
function refreshBlacklistUI() {
    // 刷新界面
}
function onMutelist(mutelist) {
    console.log('收到静音列表', mutelist);
    data.mutelist = nim.mergeRelations(data.mutelist, mutelist);
    data.mutelist = nim.cutRelations(data.mutelist, mutelist.invalid);
    refreshMutelistUI();
}
function onMarkInMutelist(obj) {
    console.log(obj.account + '被你' + (obj.isAdd ? '加入' : '移除') + '静音列表', obj);
    if (obj.isAdd) {
        addToMutelist(obj);
    } else {
        removeFromMutelist(obj);
    }
}
function addToMutelist(obj) {
    data.mutelist = nim.mergeRelations(data.mutelist, obj.record);
    refreshMutelistUI();
}
function removeFromMutelist(obj) {
    data.mutelist = nim.cutRelations(data.mutelist, obj.record);
    refreshMutelistUI();
}
function refreshMutelistUI() {
    // 刷新界面
}

function onFriends(friends) {
    console.log('收到好友列表', friends);
    data.friends = nim.mergeFriends(data.friends, friends);
    data.friends = nim.cutFriends(data.friends, friends.invalid);
    refreshFriendsUI();
}
function onSyncFriendAction(obj) {
    console.log('收到好友操作', obj);
    switch (obj.type) {
    case 'addFriend':
        console.log('你在其它端直接加了一个好友' + obj);
        onAddFriend(obj.friend);
        break;
    case 'applyFriend':
        console.log('你在其它端申请加了一个好友' + obj);
        break;
    case 'passFriendApply':
        console.log('你在其它端通过了一个好友申请' + obj);
        onAddFriend(obj.friend);
        break;
    case 'rejectFriendApply':
        console.log('你在其它端拒绝了一个好友申请' + obj);
        break;
    case 'deleteFriend':
        console.log('你在其它端删了一个好友' + obj);
        onDeleteFriend(obj.account);
        break;
    case 'updateFriend':
        console.log('你在其它端更新了一个好友', obj);
        onUpdateFriend(obj.friend);
        break;
    }
}
function onAddFriend(friend) {
    data.friends = nim.mergeFriends(data.friends, friend);
    refreshFriendsUI();
}
function onDeleteFriend(account) {
    data.friends = nim.cutFriendsByAccounts(data.friends, account);
    refreshFriendsUI();
}
function onUpdateFriend(friend) {
    data.friends = nim.mergeFriends(data.friends, friend);
    refreshFriendsUI();
}
function refreshFriendsUI() {
    // 刷新界面
}

function onMyInfo(user) {
    console.log('收到我的名片', user);
    data.myInfo = user;
    updateMyInfoUI();
}
function onUpdateMyInfo(user) {
    console.log('我的名片更新了', user);
    data.myInfo = NIM.util.merge(data.myInfo, user);
    updateMyInfoUI();
}
function updateMyInfoUI() {
    // 刷新界面
}
function onUsers(users) {
    console.log('收到用户名片列表', users);
    data.users = nim.mergeUsers(data.users, users);
}
function onUpdateUser(user) {
    console.log('用户名片更新了', user);
    data.users = nim.mergeUsers(data.users, user);
}

function onSuperTeams (superTeams) {
  console.log('收到超大群列表', superTeams)
  data.superTeams = nim.mergeTeams(data.superTeams, superTeams)
  onInvalidSuperTeams(superTeams.invalid)
}
function onInvalidSuperTeams (teams) {
  data.superTeams = nim.cutTeams(data.superTeams, teams)
  data.invalidSuperTeams = nim.mergeTeams(data.invalidSuperTeams, teams)
  refreshSuperTeamsUI()
}

function onSyncCreateSuperTeam (team, owner) {
  console.log('创建了一个超大群 onSyncCreateSuperTeam ', team, owner)
  data.superTeams = nim.mergeTeams(data.superTeams, team)
  refreshSuperTeamsUI()
  onSuperTeamMembers({
    teamId: team.teamId,
    members: owner
  })
}
function onAddSuperTeamMembers (team, accounts, members) {
  console.log('添加群成员 onAddSuperTeamMembers ', team, accounts, members)
  if (!accounts && !members) {
    accounts = team.accounts || []
    members = team.members || []
    team = team.team || {}
  }
  var teamId = team.teamId
  
   // 如果是别人被拉进来了,那么拼接群成员列表
   // 如果是自己被拉进来了,那么同步一次群成员列表
  
  if (accounts.indexOf(data.account) === -1) {
    onSuperTeamMembers({
      teamId: teamId,
      members: members
    })
  } else {
    // ...
  }
  onSuperTeams(team)
}
function onDismissSuperTeam(obj) {
 console.log('解散超大群 onDismissSuperTeam', obj);
  var teamId = obj.teamId
  removeAllSuperTeamMembers(teamId)
  data.superTeams = nim.cutTeams(data.superTeams, obj)
  refreshSuperTeamsUI()
  refreshSuperTeamMembersUI()
}
function onRemoveSuperTeamMembers (obj) {
  console.log('移除了群成员 onRemoveSuperTeamMembers ', obj.accounts, obj)
  var teamId = obj.team.teamId
  var accounts = obj.accounts
  var team
  if (!teamId && !accounts) {
    accounts = obj.accounts || []
  }
  // 如果是别人被踢了,那么移除群成员
  // 如果是自己被踢了,那么离开该群
  if (accounts.indexOf(data.account) === -1) {
     if (team) {
      onSuperTeams(team)
    }
    if (!data.superTeamMembers) {
      data.superTeamMembers = {}
    }
    data.superTeamMembers[teamId] = nim.cutTeamMembersByAccounts(
      data.superTeamMembers[teamId],
      teamId,
      accounts
    )
     refreshSuperTeamMembersUI()
  } else {
    leaveSuperTeam(teamId)
  }
}
function onUpdateSuperTeam(err, msg) {
  console.log('更新了超大群 teamId', err, msg)
}
function onUpdateSuperTeamMember (member) {
  console.log('群成员信息更新了', member) 
}
function leaveSuperTeam (teamId) {
  onInvalidSuperTeams({
    teamId: teamId
  })
  removeAllSuperTeamMembers(teamId)
}
function refreshSuperTeamsUI () {
}
function refreshSuperTeamMembersUI () {
}
function removeAllSuperTeamMembers () {
}
function onTeams(teams) {
    console.log('群列表', teams);
    data.teams = nim.mergeTeams(data.teams, teams);
    onInvalidTeams(teams.invalid);
}
function onInvalidTeams(teams) {
    data.teams = nim.cutTeams(data.teams, teams);
    data.invalidTeams = nim.mergeTeams(data.invalidTeams, teams);
    refreshTeamsUI();
}
function onCreateTeam(team) {
    console.log('你创建了一个群', team);
    data.teams = nim.mergeTeams(data.teams, team);
    refreshTeamsUI();
    onTeamMembers({
        teamId: team.teamId,
        members: owner
    });
}
function refreshTeamsUI() {
    // 刷新界面
}
function onTeamMembers(obj) {
    console.log('收到群成员', obj);
    var teamId = obj.teamId;
    var members = obj.members;
    data.teamMembers = data.teamMembers || {};
    data.teamMembers[teamId] = nim.mergeTeamMembers(data.teamMembers[teamId], members);
    data.teamMembers[teamId] = nim.cutTeamMembers(data.teamMembers[teamId], members.invalid);
    refreshTeamMembersUI();
}
function onSyncTeamMembersDone() {
    console.log('同步群列表完成');
}
function onUpdateTeamMember(teamMember) {
    console.log('群成员信息更新了', teamMember);
    onTeamMembers({
        teamId: teamMember.teamId,
        members: teamMember
    });
}
function refreshTeamMembersUI() {
    // 刷新界面
}

function onSessions(sessions) {
    console.log('收到会话列表', sessions);
    data.sessions = nim.mergeSessions(data.sessions, sessions);
    updateSessionsUI();
}
function onUpdateSession(session) {
    console.log('会话更新了', session);
    data.sessions = nim.mergeSessions(data.sessions, session);
    updateSessionsUI();
}
function updateSessionsUI() {
    // 刷新界面
}

function onRoamingMsgs(obj) {
    console.log('漫游消息', obj);
    pushMsg(obj.msgs);
}
function onOfflineMsgs(obj) {
    console.log('离线消息', obj);
    pushMsg(obj.msgs);
}
function onMsg(msg) {
    console.log('收到消息', msg.scene, msg.type, msg);
    pushMsg(msg);
}
function pushMsg(msgs) {
    if (!Array.isArray(msgs)) { msgs = [msgs]; }
    var sessionId = msgs[0].sessionId;
    data.msgs = data.msgs || {};
    data.msgs[sessionId] = nim.mergeMsgs(data.msgs[sessionId], msgs);
}

function onOfflineSysMsgs(sysMsgs) {
    console.log('收到离线系统通知', sysMsgs);
    pushSysMsgs(sysMsgs);
}
function onSysMsg(sysMsg) {
    console.log('收到系统通知', sysMsg)
    pushSysMsgs(sysMsg);
}
function onUpdateSysMsg(sysMsg) {
    pushSysMsgs(sysMsg);
}
function pushSysMsgs(sysMsgs) {
    data.sysMsgs = nim.mergeSysMsgs(data.sysMsgs, sysMsgs);
    refreshSysMsgsUI();
}
function onSysMsgUnread(obj) {
    console.log('收到系统通知未读数', obj);
    data.sysMsgUnread = obj;
    refreshSysMsgsUI();
}
function onUpdateSysMsgUnread(obj) {
    console.log('系统通知未读数更新了', obj);
    data.sysMsgUnread = obj;
    refreshSysMsgsUI();
}
function refreshSysMsgsUI() {
    // 刷新界面
}
function onOfflineCustomSysMsgs(sysMsgs) {
    console.log('收到离线自定义系统通知', sysMsgs);
}
function onCustomSysMsg(sysMsg) {
    console.log('收到自定义系统通知', sysMsg);
}

function onSyncDone() {
    console.log('同步完成');
}

acceptSuperTeamInvite(options)

接受入群邀请

  • 群主和管理员在邀请成员加入群(通过操作拉人入群)之后, 被邀请的人会收到一条类型为'teamInvite'系统通知, 此类系统通知的from字段的值为邀请方的帐号, to字段的值为对应的群ID, 此类系统通知的attach有一个字段team的值为被邀请进入的, 被邀请的人可以选择接受邀请或者拒绝邀请。
    • 如果接受入群邀请, 那么该群的所有群成员会收到一条类型为'acceptSuperTeamInvite'群通知消息, 此类群通知消息的from字段的值为接受入群邀请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段members的值为接收入群邀请的群成员列表。
    • 如果拒绝入群邀请, 那么邀请你的人会收到一条类型为'rejectSuperTeamInvite'系统通知, 此类系统通知的from字段的值为拒绝入群邀请的人的帐号, to字段的值为对应的群ID。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idServer String

对应的系统通知的 idServer

teamId String

群id

from String

邀请方的帐号

done done

结果回调函数, 成功时会收到群资料

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.acceptSuperTeamInvite({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'zyy1',
    done: acceptSuperTeamInviteDone
});
function acceptSuperTeamInviteDone(error, obj) {
    console.log('接受入群邀请' + (!error?'成功':'失败'), error, obj);
}

acceptTeamInvite(options)

接受入群邀请

  • 高级群的群主和管理员在邀请成员加入群(通过操作创建群拉人入群)之后, 被邀请的人会收到一条类型为'teamInvite'系统通知, 此类系统通知的from字段的值为邀请方的帐号, to字段的值为对应的群ID, 此类系统通知的attach有一个字段team的值为被邀请进入的, 被邀请的人可以选择接受邀请或者拒绝邀请。
    • 如果接受入群邀请, 那么该群的所有群成员会收到一条类型为'acceptTeamInvite'群通知消息, 此类群通知消息的from字段的值为接受入群邀请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段members的值为接收入群邀请的群成员列表。
    • 如果拒绝入群邀请, 那么邀请你的人会收到一条类型为'rejectTeamInvite'系统通知, 此类系统通知的from字段的值为拒绝入群邀请的人的帐号, to字段的值为对应的群ID。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idServer String

对应的系统通知的 idServer

teamId String

群id

from String

邀请方的帐号

done done

结果回调函数, 成功时会收到群资料

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.acceptTeamInvite({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'zyy1',
    done: acceptTeamInviteDone
});
function acceptTeamInviteDone(error, obj) {
    console.log('接受入群邀请' + (!error?'成功':'失败'), error, obj);
}

addCollect(options, done)

增加一个收藏

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
type Number

收藏的类型,只能是整数,开发者可自定义映射规则

data String

收藏的具体内容,最大20480

uniqueId String <optional>

唯一ID,可用于去重。当传入uniqueId时,会校验该ID之前是否存在,如不存在则会新增一个收藏,如存在则会更新之

custom String <optional>

扩展字段,最大1024

done function

结果回调函数,第一个参数是error,第二个参数有一个collect属性,是新增收藏对象


addFriend(options)

直接加为好友

  • 直接加某个用户为好友后, 对方不需要确认, 直接成为当前登录用户的好友。
  • 对方会收到一条类型为'addFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
account String

要直接加为好友的账号

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.addFriend({
    account: 'account',
    ps: 'ps',
    done: addFriendDone
});
function addFriendDone(error, obj) {
    console.log('直接加为好友' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onAddFriend(obj.friend);
    }
}

addMsgPin(options, done)

新增PIN一条消息

  • 若成功,会触发相关人员的onPinMsgChange初始化回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
msg Object

要PIN的消息对象

pinCustom String <optional>

PIN的扩展字段

done function

结果回调函数,第一个参数是error,代表是否有错


addQuickComment(options, done)

增加一个快捷评论

  • 不同于消息,评论只有几个简单的字段,可删除,不计入未读数
  • 若成功,消息发送方和评论发送方的多端登录会收到onQuickComment回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
msg IMMessage

被回复的消息,至少要包含scene, from, to, idServer, idClient, time六个字段

body Number

评论的内容,只能是整数,开发者可自定义映射规则,如1点赞的表情、2对应鼓掌的表情等等

custom String <optional>

扩展字段,最大8字节

needPush Boolean <optional>
false

是否需要推送

needBadge Boolean <optional>
false

是否需要角标

pushTitle String <optional>

推送的标题

apnsText String <optional>

自定义推送文案

pushPayload String <optional>

第三方自定义的推送属性,限制json字符串,长度最大2048字节

done function

结果回调函数,第一个参数是error,第二个参数返回完整的评论内容和时间戳


addStickTopSession(options, done)

新增会话置顶

  • 若成功,会触发onupdatesession回调
  • 多端登录时,会触发多端的onupdatesession回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
id String

要置顶的会话ID

topCustom String <optional>

会话置顶的扩展字段

done function

结果回调函数,第一个参数是error,代表是否有错


addSuperTeamManagers(options)

添加群管理员

  • 添加群管理员后, 所有群成员会收到一条类型为'addSuperTeamManagers'群通知消息。此类群通知消息的from字段的值为添加群管理员的人的帐号, to字段的值为对应的群ID, attach有一个字段accounts的值为被加为管理员的帐号列表, attach有一个字段members的值为被加为管理员的群成员列表。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

要添加的管理员帐号列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.addSuperTeamManagers({
    teamId: '123',
    accounts: ['a2', 'a3'],
    done: addSuperTeamManagersDone
});
function addSuperTeamManagersDone(error, obj) {
    console.log('添加群管理员' + (!error?'成功':'失败'), error, obj);
}

addSuperTeamMembers(options)

添加群成员

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

超大群ID

accounts Array.<String>

邀请入群的账号列表

ps String <optional>

附言, 选填, 长度不能大于5000, 开发者也可以使用JSON格式的字符串来扩展此内容

done function

结果回调函数

Returns:
Type
Void
Example
nim.addSuperTeamMembers({
   teamId: '123',
   accounts: ['a1', 'a1'],
   done: addSuperTeamMembersDone
})
function addSuperTeamMembersDone(error, obj) {
    console.log('入群邀请发送' + (!error?'成功':'失败'), error, obj);
}

addTeamManagers(options)

添加群管理员

  • 添加群管理员后, 所有群成员会收到一条类型为'addTeamManagers'群通知消息。此类群通知消息的from字段的值为添加群管理员的人的帐号, to字段的值为对应的群ID, attach有一个字段accounts的值为被加为管理员的帐号列表, attach有一个字段members的值为被加为管理员的群成员列表。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

要添加的管理员帐号列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.addTeamManagers({
    teamId: '123',
    accounts: ['a2', 'a3'],
    done: addTeamManagersDone
});
function addTeamManagersDone(error, obj) {
    console.log('添加群管理员' + (!error?'成功':'失败'), error, obj);
}

addTeamMembers(options)

拉人入群

  • 普通群, 拉人入群后, 所有群成员会收到一条类型为``'addTeamMembers'群通知消息。此类群通知消息的from字段的值为拉人的人的帐号,to字段的值为对应的群ID,attach有一个字段team的值为对应的[群对象](#群对象),attach有一个字段accounts的值为被拉的人的帐号列表,attach有一个字段members`的值为被拉的群成员列表。
  • 高级群的群主和管理员在邀请成员加入群(通过操作创建群拉人入群)之后, 被邀请的人会收到一条类型为'teamInvite'系统通知, 此类系统通知的from字段的值为邀请方的帐号, to字段的值为对应的群ID, 此类系统通知的attach有一个字段team的值为被邀请进入的, 被邀请的人可以选择接受邀请或者拒绝邀请。
    • 如果接受入群邀请, 那么该群的所有群成员会收到一条类型为'acceptTeamInvite'群通知消息, 此类群通知消息的from字段的值为接受入群邀请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段members的值为接收入群邀请的群成员列表。
    • 如果拒绝入群邀请, 那么邀请你的人会收到一条类型为'rejectTeamInvite'系统通知, 此类系统通知的from字段的值为拒绝入群邀请的人的帐号, to字段的值为对应的群ID。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

accounts Array.<String>

要拉进群的成员的帐号列表

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

custom String <optional>

自定义扩展字段,选填,最长512字符,开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.addTeamMembers({
    teamId: '123',
    accounts: ['a3', 'a4'],
    ps: '加入我们的群吧',
    custom: '',
    done: addTeamMembersDone
});
function addTeamMembersDone(error, obj) {
    console.log('入群邀请发送' + (!error?'成功':'失败'), error, obj);
}

addToBlacklist(options)

加入黑名单

  • 如果一个用户被加入了黑名单, 那么就不再会收到此用户发送的消息
  • SDK内部调用nim.markInBlacklist来完成实际工作
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要加入黑名单的账号

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.addToBlacklist({
    account: 'account',
    done: addToBlacklistDone
});
function addToBlacklistDone(error, obj) {
    console.log('加入黑名单' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        addToBlacklist(obj);
    }
}

addToMutelist(options)

加入静音列表

  • SDK只负责维护静音列表, 具体要根据静音列表进行的操作由开发者决定
  • SDK内部调用nim.markInMutelist来完成实际工作
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要加入静音列表的账号

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.addToMutelist({
    account: 'account',
    done: addToMutelistDone
});
function addToMutelistDone(error, obj) {
    console.log('加入静音列表' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        addToMutelist(obj);
    }
}

applyFriend(options)

申请加为好友

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
    • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'系统通知, 此类群通知消息的from字段的值为通过方的帐号, to字段的值为申请方的账号。
    • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
account String

要申请加为好友的账号

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.applyFriend({
    account: 'account',
    ps: 'ps',
    done: applyFriendDone
});
function applyFriendDone(error, obj) {
    console.log('申请加为好友' + (!error?'成功':'失败'), error, obj);
}

applySuperTeam(options)

申请入群

  • 用户可以主动申请加入超大群, 目标群的群主和管理员会收到一条类型为'applySuperTeam'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为对应的群ID, 高级群的群主和管理员在收到入群申请后, 可以选择通过或者拒绝入群申请。
    • 如果通过入群申请, 那么该群的所有群成员会收到一条类型为'passSuperTeamApply'群通知消息, 此类群通知消息的from字段的值为通过入群申请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段account包含了申请方的帐号, attach有一个字段members的值为被通过申请的群成员列表。
    • 如果拒绝入群申请, 那么申请人会收到一条类型为'rejectSuperTeamApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

ps String <optional>

附言, 选填, 长度不能大于5000, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数, 成功时会收到群资料

See:
Returns:
Type
Void
Example
nim.applySuperTeam({
    teamId: '123',
    ps: '请加',
    done: applySuperTeamDone
});
function applySuperTeamDone(error, obj) {
    console.log('申请入群' + (!error?'成功':'失败'), error, obj);
}

applyTeam(options)

申请入群

  • 用户可以主动申请加入高级群, 目标群的群主和管理员会收到一条类型为'applyTeam'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为对应的群ID, 高级群的群主和管理员在收到入群申请后, 可以选择通过或者拒绝入群申请。
    • 如果通过入群申请, 那么该群的所有群成员会收到一条类型为'passTeamApply'群通知消息, 此类群通知消息的from字段的值为通过入群申请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段account包含了申请方的帐号, attach有一个字段members的值为被通过申请的群成员列表。
    • 如果拒绝入群申请, 那么申请人会收到一条类型为'rejectTeamApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数, 成功时会收到群资料

See:
Returns:
Type
Void
Example
nim.applyTeam({
    teamId: '123',
    ps: '请加',
    done: applyTeamDone
});
function applyTeamDone(error, obj) {
    console.log('申请入群' + (!error?'成功':'失败'), error, obj);
}

audioToMp3(options)

将音频 url 转为 mp3

  • 此方法会返回一个新的 url
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

url

Returns:

转为 mp3 后的 url

Type
String
Example
var url = 'http://b12026.nos.netease.com/MTAxMTAxMA==/bmltYV8xMTQwMzFfMTQ1MTg4ODk5MjMxMV9mNmI1Y2QyZC03N2UzLTQxNmUtYWY5NC1iODlhZGY4ZTYzYWQ=';
var mp3Url = nim.audioToMp3({
    url: url
});
console.log(mp3Url);

audioToText(options)

音频转文字

  • 仅支持通过previewFile或者sendFile拿到的音频 url, 或者收到的音频消息的 url
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

音频 url

done function

结果回调函数, 成功时会额外附上文本 text

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ1MTg5MDI2MjY0MF9lYzk1MWMyZC1hMzRmLTQ1YzctYWI2ZS1kZWE2NTA2M2Q4NjY=';
nim.audioToText({
    url: url,
    done: audioToTextDone
});
function audioToTextDone(error, obj) {
    console.log('语音转文字' + (!error?'成功':'失败'), error, obj);
}

blurImage(options, radius, sigma)

高斯模糊图片

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

radius Number

高斯模糊半径, 不包含中心点的像素, 取值范围 [1,50]

sigma Number

高斯模糊标准差, 不能小于 0

options.done done

结果回调函数, 成功时附上高斯模糊后的图片 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var blurUrl = nim.blurImage({
    url: url,
    radius: 5,
    sigma: 3,
    done: blurImageDone
});
function blurImageDone(error, obj) {
    console.log('高斯模糊图片' + (!error?'成功':'失败'), error, obj);
}

clearServerHistoryMsgs(options)

删除单人会话服务器聊天记录(此接口废弃,请使用 clearServerHistoryMsgsWithSync )

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

对方账号

delRoam Boolean

是否同时删除漫游,默认true

done function

结果回调函数

Returns:
Type
Void
Example
nim.clearServerHistoryMsgs({
    account: 'xxx',
    delRoam: false,
    done: clearServerHistoryMsgsDone
});
function clearServerHistoryMsgsDone(error, obj) {
    console.log('删除服务器消息' + (!error?'成功':'失败'), error, obj);
}

clearServerHistoryMsgsWithSync(options)

删除会话服务器聊天记录

  • 该API和clearServerHistoryMsgs有以下几点不同
  • 该API支持群聊场景;clearServerHistoryMsgs不支持
  • 该API支持多端同步;clearServerHistoryMsgs不支持
  • 该API清空服务器聊天记录后,会同步删除本地db中的会话消息;clearServerHistoryMsgs不会同步删除本地消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景,仅支持p2pteam

to String

对方账号或群ID

isSyncSelf Boolean <optional>
false

是否多端同步。默认false

ext String <optional>

扩展字段

done function

结果回调函数

Returns:
Type
Void
Example
nim.clearServerHistoryMsgsWithSync({
    type: 1,
    account: 'xxx',
    isSyncSelf: false,
    done: function (error, obj) {}
});

connect()

登录 SDK

See:
Returns:
Type
Void
Example
nim.connect();

createTeam(options)

创建群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
type String

群类型

name String

群名字

avatar String

群头像

accounts Array.<String>

要拉进群的成员的帐号列表

intro String <optional>

群简介

announcement String <optional>

群公告

joinMode String <optional>

群加入方式

beInviteMode String <optional>

群被邀请模式

inviteMode String <optional>

群邀请模式

updateTeamMode String <optional>

群信息修改权限

updateCustomMode String <optional>

群信息自定义字段修改权限

custom String <optional>

扩展字段

antiSpamBusinessId String <optional>

用户配置的对某些资料内容另外的反垃圾的业务ID

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数, 成功时会收到群资料

See:
Returns:
Type
Void
Example
// 创建普通群
nim.createTeam({
    type: 'normal',
    name: '普通群',
    avatar: 'avatar',
    accounts: ['a1', 'a2'],
    ps: '我建了一个普通群',
    done: createTeamDone
});
// 创建高级群
nim.createTeam({
    type: 'advanced',
    name: '高级群',
    avatar: 'avatar',
    accounts: ['a1', 'a2'],
    intro: '群简介',
    announcement: '群公告',
    // joinMode: 'needVerify',
    // beInviteMode: 'needVerify',
    // inviteMode: 'manager',
    // updateTeamMode: 'manager',
    // updateCustomMode: 'manager',
    ps: '我建了一个高级群',
    done: createTeamDone
});
function createTeamDone(error, obj) {
    console.log('创建' + obj.team.type + '群' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onCreateTeam(obj.team, obj.owner);
    }
}

cropImage(options)

裁剪图片

  • 只支持通过预览文件发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • 从坐标 (x, y) 处截取尺寸为 width*height 的图片, (0, 0) 代表左上角
  • width/height 不能小于0, 如果 width/height 大于图片的原始宽度/高度, 那么将被替换为图片的原始宽度/高度
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

x Int

起点坐标 x, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height

y Int

起点坐标 y, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height

width Int

宽度, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height

height Int

高度, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height

done done

结果回调函数, 成功时附上裁剪后的图片的 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var cropUrl = nim.cropImage({
    url: url,
    x: 100,
    y: 0,
    width: 250,
    height: 250,
    done: function cropImageDone
});
function cropImageDone(error, obj) {
    console.log('裁剪图片' + (!error?'成功':'失败'), error, obj);
}

cutFriends(olds, invalids)

去除好友

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的好友列表
  • 去除时按照 account 的值去除
  • 此方法内部调用 NIM.util.cutObjArray 来完成实际工作
if (!olds) {return olds;}
if (!invalids) {return olds;}
if (!NIM.util.isArray(invalids)) { invalids = [invalids]; }
if (!invalids.length) {return olds;}
var options = {
    keyPath: 'account'
};
NIM.util.cutObjArray(olds, invalids, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除好友
Parameters:
Name Type Description
olds Array.<Friend>

原始好友数组

invalids Friend | Array.<Friend>

待去除的好友或好友数组

Returns:

去除后的好友数组

Type
Array.<Friend>

cutFriendsByAccounts(olds, invalids)

去除accounts对应的好友

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的好友列表
  • 去除时按照 account 的值去除
  • 此方法内部调用 nim.cutFriends 来完成实际工作
if (!NIM.util.isArray(accounts)) { accounts = [accounts]; }
var invalids = accounts.map(function(account) {
    return {
        account: account
    };
});
return nim.cutFriends(olds, invalids);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除好友
Parameters:
Name Type Description
olds Array.<Friend>

原始好友数组

invalids Friend | Array.<Friend>

待去除的好友或好友数组

Returns:

去除后的好友数组

Type
Array.<Friend>

cutLoginPorts(olds, invalids)

去除登录端

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的登录端列表
  • 去除时按照 account 的值去除
  • 此方法内部调用 NIM.util.cutObjArray 来完成实际工作
if (!olds) {return olds;}
if (!invalids) {return olds;}
if (!NIM.util.isArray(invalids)) { invalids = [invalids]; }
if (!invalids.length) {return olds;}
var options = {
    keyPath: 'account'
};
NIM.util.cutObjArray(olds, invalids, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除登录端
Parameters:
Name Type Description
olds Array.<LoginPort>

原始登录端数组

invalids LoginPort | Array.<LoginPort>

待去除的登录端或登录端数组

Returns:

去除后的登录端数组

Type
Array.<LoginPort>

cutRelations(olds, invalids)

去除关系

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的关系列表
  • 去除时按照 account 的值去除
  • 此方法内部调用 NIM.util.cutObjArray 来完成实际工作
if (!olds) {return olds;}
if (!invalids) {return olds;}
if (!NIM.util.isArray(invalids)) { invalids = [invalids]; }
if (!invalids.length) {return olds;}
var options = {
    keyPath: 'account'
};
NIM.util.cutObjArray(olds, invalids, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除关系
Parameters:
Name Type Description
olds Array.<Relation>

原始关系数组

invalids Relation | Array.<Relation>

待去除的关系或关系数组

Returns:

去除后的关系数组

Type
Array.<Relation>

cutTeamMembers(olds, invalids)

去除群成员

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的群成员列表
  • 去除时按照 id 的值去除
  • 此方法内部调用 NIM.util.cutObjArray 来完成实际工作
if (!olds) {return olds;}
if (!invalids) {return olds;}
if (!NIM.util.isArray(invalids)) { invalids = [invalids]; }
if (!invalids.length) {return olds;}
var options = {
};
NIM.util.cutObjArray(olds, invalids, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除群成员
Parameters:
Name Type Description
olds Array.<TeamMember>

原始群成员数组

invalids TeamMember | Array.<TeamMember>

待去除的群成员或群成员数组

Returns:

去除后的群成员数组

Type
Array.<TeamMember>

cutTeamMembersByAccounts(olds, invalids)

去除accounts对应的群成员

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的群成员列表
  • 去除时按照 account 的值去除
  • 此方法内部调用 nim.cutTeamMembers 来完成实际工作
if (!NIM.util.isArray(accounts)) { accounts = [accounts]; }
var invalids = TeamMember.assembleMembers({
    teamId: teamId
}, accounts);
return nim.cutTeamMembers(olds, invalids);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除群成员
Parameters:
Name Type Description
olds Array.<TeamMember>

原始群成员数组

invalids TeamMember | Array.<TeamMember>

待去除的群成员或群成员数组

Returns:

去除后的群成员数组

Type
Array.<TeamMember>

cutTeams(olds, invalids)

去除群

  • 此方法不会改变参数的值,而是会返回新的数组,包含去除后的群列表
  • 去除时按照 teamId 的值去除
  • 此方法内部调用 NIM.util.cutObjArray 来完成实际工作
if (!olds) {return olds;}
if (!invalids) {return olds;}
if (!NIM.util.isArray(invalids)) { invalids = [invalids]; }
if (!invalids.length) {return olds;}
var options = {
    keyPath: 'teamId'
};
NIM.util.cutObjArray(olds, invalids, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.cutObjArray 来去除群
Parameters:
Name Type Description
olds Array.<Team>

原始群数组

invalids Team | Array.<Team>

待去除的群或群数组

Returns:

去除后的群数组

Type
Array.<Team>

deleteAllLocalMsgs(options)

删除所有本地消息

  • 如果不支持数据库, 算成功
  • 此方法同时会清空所有的会话
Parameters:
Name Type Description
options Object

配置参数

Returns:
Type
Void
Example
nim.deleteAllLocalMsgs({
    done: deleteAllLocalMsgsDone
});
function deleteAllLocalMsgsDone(error, obj) {
    console.log('删除所有本地消息' + (!error?'成功':'失败'), error, obj);
}

deleteAllLocalSysMsgs(options)

删除所有本地系统通知

  • 如果不支持数据库, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteAllLocalSysMsgs({
    done: deleteAllLocalSysMsgsDone
});
function deleteAllLocalSysMsgsDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('删除所有本地系统通知' + (!error?'成功':'失败'));
}

deleteCollects(options, done)

批量删除收藏

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
collectList Object

要删除的收藏列表,每个收藏对象至少要包含idcreateTime两个字段;列表长度不能大于100

done function

结果回调函数,第一个参数是error,第二个参数有一个属性deleteNum,代表成功删除的个数


deleteFriend(options)

删除好友

  • 删除好友后, 被删除的人会收到一条类型为'deleteFriend'系统通知, 此类系统通知的from字段的值为删除方的帐号, to字段的值为被删除方的账号。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要删除好友的账号

delAlias Boolean

是否要删除好友的备注,默认false不删除

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.deleteFriend({
    account: 'account',
    delAlias: true,
    done: deleteFriendDone
});
function deleteFriendDone(error, obj) {
    console.log('删除好友' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onDeleteFriend(obj.account);
    }
}

deleteLocalMsg(options)

删除本地消息

  • 支持数据库
    • 如果删除的是对应会话的最后一条消息, 那么对应会话的 lastMsg 属性会自动变为变为上一条消息, 同时触发 onupdatesession 回调
    • 如果对应的消息不存在, 算成功
  • 如果不支持数据库, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
msg IMMessage

待删除的消息

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteLocalMsg({
    msg: msg,
    done: deleteLocalMsgDone
});
function deleteLocalMsgDone(error, obj) {
    console.log('删除本地消息' + (!error?'成功':'失败'), error, obj);
}

deleteLocalMsgs(options)

根据会话ID、起始时间等条件删除本地消息

  • 如果不支持数据库, 算成功
  • 结束时间大于开始时间
  • 如不传开始时间和结束时间,则删除某个会话的所有本地消息 相当于删除某个会话的本地消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
sessionId String

会话ID

start Number <optional>

开始时间,毫秒时间戳,默认为负无穷大

end Number <optional>

结束时间,毫秒时间戳,默认为无穷大

updateSession Boolean <optional>
true

是否同步更新会话。为true,在删除完消息后SDK会检查是否更新对应会话中的lastMsg;为false,则SDK仅删除本地消息,不更新会话。若开发者确定没有删除最后一定消息,建议传false,减少不必要的检测和更新

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteLocalMsgs({
    sessionId: 'p2p-xx',
    start: 1561355358000,
    end: 1561355458000,
    done: deleteLocalMsgsDone
});
function deleteLocalMsgsDone(error, obj) {
    console.log('删除会话本地消息' + (!error?'成功':'失败'), error, obj);
}

deleteLocalMsgsBySession(options)

删除某个会话的本地消息

  • 如果不支持数据库, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String

聊天对象, 账号或者群id

delLastMsg Boolean <optional>
false

是否同时删除本地会话对象中的的lastMsg

isTag Boolean <optional>
false

是否为标记删除,若为true,则SDK会记录本地清空会话的时间戳,再调用获取历史消息获取包含关键词的历史消息接口时,便不能再获取到该时间戳之前的消息了

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteLocalMsgsBySession({
    scene: 'p2p',
    to: 'account',
    delLastMsg: true,
    done: deleteLocalMsgsBySessionDone
});
function deleteLocalMsgsBySessionDone(error, obj) {
    console.log('删除会话本地消息' + (!error?'成功':'失败'), error, obj);
}

deleteLocalSession(options)

删除本地会话

  • 支持数据库时, 删了本地会话之后, 下次同步就同步不到对应的会话
  • 如果不支持数据库, 算成功
  • 如果对应的会话不存在, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
id String | Array.<String>

会话 id 或 id 数组

isLogic Boolean <optional>
false

是否为逻辑删除。7.9.1版本新增,逻辑删除不会真的删除本地会话,而是标记会话为“已删除”状态,这样可以保留会话的unreadmsgReceiptTime,下次新建该会话时,可以保持正确的未读数和已读时间戳

isDeleteRoaming Boolean <optional>
false

是否需要删除此会话的服务器漫游消息。8.2.0版本新增,写 true 的话,下次登录服务器不再下发此会话的漫游消息,此规则会影响多端登录的其他端,慎用。

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteLocalSession({
    id: 'p2p-account',
    done: deleteLocalSessionDone
});
function deleteLocalSessionDone(error, obj) {
    console.log('删除本地会话' + (!error?'成功':'失败'), error, obj);
}

deleteLocalSysMsg(options)

删除本地系统通知

  • 删除 idServer 对应的本地系统通知
  • 如果不支持数据库, 算成功
  • 如果对应的系统通知不存在, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idServer String | Array.<String>

idServer 或 idServer 数组

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteLocalSysMsg({
    idServer: '1234',
    done: deleteLocalSysMsgDone
});
function deleteLocalSysMsgDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('删除本地系统通知' + (!error?'成功':'失败'));
}

deleteLocalTeam(options)

删除 teamId 对应的本地群

  • 如果不支持数据库, 算成功
  • 如果当前用户还在群里面, 那么会失败
  • 如果对应的群不存在, 算成功
  • 如果传了多个 teamId, 但是当前用户还在某个群里面, 那么会失败, 但是所有用户不在的群都会被删掉
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String | Array.<String>

teamId 或者 teamId 数组

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteLocalTeam({
    teamId: '1234',
    done: deleteLocalTeamDone
});
function deleteLocalTeamDone(error, obj) {
    console.log('删除本地群' + (!error?'成功':'失败'));
    console.log(error);
    console.log(obj);
}

deleteMsg(options)

此api已更名为 recallMsg,请使用 recallMsg 兼容后续版本升级!

撤回消息

  • 撤回消息后, 消息接收方会收到一条类型为'deleteMsg'系统通知, 此类系统通知的 msg 为被删除的消息的部分字段。如果是群消息, 那么群里的所有人都会收到这条系统通知. 如果同时在多个端登录了同一个账号, 那么其它端也会收到这条系统通知.
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
msg IMMessage

待撤回的消息

apnsText String <optional>

自定义推送文案

pushPayload String <optional>

第三方自定义的推送属性,限制json字符串,长度最大2048

ps String <optional>

附言

attach String <optional>

附加信息,推荐使用JSON格式构建

env String <optional>

抄送环境

done function

结果回调函数

Returns:
Type
Void
Example
nim.deleteMsg({
  msg: someMsg,
  done: deleteMsgDone
})
console.log('正在撤回消息', someMsg)
function deleteMsgDone (error) {
  console.log('撤回消息' + (!error?'成功':'失败'), error);
}

deleteMsgPin(options, done)

取消PIN一条消息,即unPin

  • 若成功,会触发相关人员的onPinMsgChange初始化回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
msg Object

要PIN的消息对象

done function

结果回调函数,第一个参数是error,代表是否有错


deleteMsgSelf(options)

单向删除消息

  • 不同与直接删除消息,单向删除消息后,自己看不到删除的消息,但对方仍能看到,也就是仅删除自己这侧的消息
  • 如果存在多端登录,其他端会收到一个单向删除的系统通知
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
msg IMMessage

待删除的消息

custom Object <optional>

扩展字段

done Object

结果回调函数,第一个参数是error,若为null,则说明删除成功


deleteMsgSelfBatch(options)

批量单向删除消息

  • 不同与直接删除消息,单向删除消息后,自己看不到删除的消息,但对方仍能看到,也就是仅删除自己这侧的消息
  • 如果存在多端登录,其他端会收到一条批量单向删除的系统通知
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
msgs IMMessage

待删除的消息列表

custom Object <optional>

扩展字段

done Object

结果回调函数,第一个参数是error,若为null,则说明删除成功


deleteNosAccessToken(options)

删除NOS安全下载token

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
token Object

需要删除的token

done Object

结果回调函数


deleteQuickComment(options, done)

删除一个快捷评论

  • 不同于消息,评论只有几个简单的字段,可删除,不计入未读数
  • 若成功,消息发送方和评论发送方的多端登录会收到onDeleteQuickComment回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
msg IMMessage

被回复的消息,至少要包含scene, from, to, idServer, idClient, time六个字段

body Number

评论的内容,只能是整数,开发者可自定义映射规则,如1点赞的表情、2对应鼓掌的表情等等

custom String <optional>

扩展字段

needPush Boolean <optional>
false

是否需要推送

needBadge Boolean <optional>
false

是否需要角标

pushTitle String <optional>

推送的标题

apnsText String <optional>

自定义推送文案

pushPayload String <optional>

第三方自定义的推送属性,限制json字符串,长度最大2048

done function

结果回调函数,第一个参数是error,第二个参数返回完整的评论内容和时间戳


deleteServerSessions(options)

删除服务器上会话列表中的一些会话

  • 删除后不可恢复,其他端也不能再拉取到,直至会话重新被产生
  • 删除漫游消息产生的会话请使用删除会话批量删除会话
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
sessions Array

会话数组,数组项是一个对象,对象必须要包含scene、to两个属性

session.scene String

会话场景

session.to String

对方账号或群ID

Example
nim.deleteServerSessions({
    sessions: [{
        scene: 'p2p',
        to: 'account'
    }, {
        scene: 'p2p',
        to: 'account1'
    }],
    done: function (error, obj) {
       console.log('删除会话' + (!error?'成功':'失败'), error, obj);
    }
});

deleteSession(options)

删除服务器上的漫游会话
此api已更名为deleteRoamingMsgBySession,后续版本即将删除,请使用deleteRoamingMsgBySession兼容后续版本升级!

  • 删了后, 在不支持数据库时, 下次同步就同步不到对应的会话以及会话对应的漫游消息; 此外, 在新设备上也同步不到对应的会话以及会话对应的漫游消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
scene String

场景

to String

对方账号或群ID

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.deleteSession({
    scene: 'p2p',
    to: 'account',
    done: deleteSessionDone
});
function deleteSessionDone(error, obj) {
    console.log('删除会话' + (!error?'成功':'失败'), error, obj);
}

deleteSessions(options)

批量删除服务器上的漫游会话

  • 删了服务器上的漫游会话之后, 在不支持数据库时, 下次同步就同步不到对应的会话以及会话对应的漫游消息; 此外, 在新设备上也同步不到对应的会话以及会话对应的漫游消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
sessions Array.<Session>

会话列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.deleteSessions({
    sessions: [{
        scene: 'p2p',
        to: 'account'
    }, {
        scene: 'p2p',
        to: 'account1'
    }],
    done: deleteSessionsDone
});
function deleteSessionsDone(error, obj) {
    console.log('批量删除会话' + (!error?'成功':'失败'), error, obj);
}

deleteSessionsWithMoreRoaming(options)

根据id删除漫游消息不全的会话

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
id String

要删除的会话id

done function

deleteStickTopSession(options, done)

取消会话置顶

  • 若成功,会触发onupdatesession回调
  • 多端登录时,会触发多端的onupdatesession回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
id String

取消置顶的会话ID

done function

结果回调函数,第一个参数是error,代表是否有错


disconnect()

断开连接(包含登出logout

See:
Returns:
Type
Void
Example
nim.disconnect();

dismissTeam(options)

解散群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数

Returns:
Type
Void
Example
nim.dismissTeam({
    teamId: '123',
    done: dismissTeamDone
});
function dismissTeamDone(error, obj) {
    console.log('解散群' + (!error?'成功':'失败'), error, obj);
}

filterClientAntispam(content, antispamLexicon, code, type, content)

检查客户端反垃圾

  • 开发者在getClientAntispamLexicon获取反垃圾词库以后,可以通过此接口识别判断是否是垃圾文本
Parameters:
Name Type Description
content String

待检查文本

antispamLexicon Object

反垃圾词库,可选

code String

错误码

type Integer

反垃圾类型

content String

过滤后文本

Returns:
Type
Object
Example
nim.filterClientAntispam({
  content: '啦啦啦'
});

findFriend(friends, account)

在好友数组里面根据 account 找到对应的好友

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(friends, {
    keyPath: 'account',
    value: account
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个好友
Parameters:
Name Type Description
friends Array.<Friend>

好友数组

account String

待查找的好友的 account

Returns:

对应的好友或者 null

Type
Friend | null

findMsg(msgs, idClient)

在消息数组里面根据 idClient 找到对应的消息

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(msgs, {
    keyPath: 'idClient',
    value: idClient
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个消息
Parameters:
Name Type Description
msgs Array.<Message>

消息数组

idClient String

待查找的消息的 idClient

Returns:

对应的消息或者 null

Type
Message | null

findRelation(relations, account)

在关系数组里面根据 account 找到对应的关系

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(relations, {
    keyPath: 'account',
    value: account
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个关系
Parameters:
Name Type Description
relations Array.<Relation>

关系数组

account String

待查找的关系的 account

Returns:

对应的关系或者 null

Type
Relation | null

findSession(sessions, sessionId)

在会话数组里面根据 id 找到对应的会话

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(sessions, {
    keyPath: 'id',
    value: sessionId
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个会话
Parameters:
Name Type Description
sessions Array.<Session>

会话数组

sessionId String

待查找的会话的 id

Returns:

对应的会话或者 null

Type
Session | null

findSysMsg(sysMsgs, idServer)

在系统通知数组里面根据 idServer 找到对应的系统通知

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(sysMsgs, {
    keyPath: 'idServer',
    value: idServer
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个系统通知
Parameters:
Name Type Description
sysMsgs Array.<SystemMessage>

系统通知数组

idServer String

待查找的系统通知的 idServer

Returns:

对应的系统通知或者 null

Type
SystemMessage | null

findTeam(teams, teamId)

在群数组里面根据 teamId 找到对应的群

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(teams, {
    keyPath: 'teamId',
    value: teamId
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个群
Parameters:
Name Type Description
teams Array.<Team>

群数组

teamId String

待查找的群的 teamId

Returns:

对应的群或者 null

Type
Team | null

findTeamMember(members, id)

在群成员数组里面根据 id 找到对应的群成员

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(members, {
    keyPath: 'id',
    value: id
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个群成员
Parameters:
Name Type Description
members Array.<TeamMember>

群成员数组

id String

待查找的群成员的 id

Returns:

对应的群成员或者 null

Type
TeamMember | null

findUser(users, account)

在名片数组里面根据 account 找到对应的名片

  • 此方法内部调用 NIM.util.findObjInArray 来完成实际工作
NIM.util.findObjInArray(users, {
    keyPath: 'account',
    value: account
});
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.findObjInArray 来查找某个名片
Parameters:
Name Type Description
users Array.<User>

名片数组

account String

待查找的名片的 account

Returns:

对应的名片或者 null

Type
User | null

forwardMsg(options)

转发消息

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
msg IMMessage

待转发的消息

scene String

新的场景

to String

新的接收方, 对方帐号或者群id

done function

结果回调函数

Returns:
Type
Void
Example
nim.forwardMsg({
  msg: someMsg,
  scene: 'p2p',
  to: 'account',
  done: sendMsgDone
})
console.log('正在转发消息', someMsg)

getAllSuperTeamMembers(options)

获取超大群成员。群成员信息体积太大时,会分多次返回,即options.done会被调用多次,回调函数的第二个参数有一个isAll属性,用来标示是否返回完毕

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数, 成功时会额外附上群成员列表

See:
Returns:
Type
Void
Example
nim.getAllSuperTeamMembers({
    teamId: '123',
    done: getAllSuperTeamMembersDone
});
function getAllSuperTeamMembersDone(error, obj) {
    console.log('获取群成员' + (!error?'成功':'失败'));
    console.log('群成员', obj.members)
}

getChatroomAddress(options)

获取聊天室服务器地址

  • 可以在 IM 连接上获取聊天室服务器地址
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
chatroomId String <optional>

聊天室 id

Returns:
Type
Void
Example
nim.getChatroomAddress({
    chatroomId: 'chatroomId',
    done: getChatroomAddressDone
});
function getChatroomAddressDone(error, obj) {
    console.log('获取聊天室地址' + (!error?'成功':'失败'), error, obj);
}

getClientAntispamLexicon()

获取反垃圾词库

  • 开发者可以通过此接口获取反垃圾的词库
    • 通过回调参数,开发者可以检查词库是否合规
    • 回调函数第一个参数为该接口是否有错,第二个参数为词库对象,词库加载后会自动保存在内存中,开发者可以手动传入或者直接使用
Returns:

反垃圾词库文件file包含

  • version 词库版本
  • md5 词库文件的md5
  • nosurl 词库文件的下载地址
  • thesaurus 词库内容
Type
Void
Example
nim.getClientAntispamLexicon({
    done: function(error, file) {
       console.log(error, file)
    }
});

getCollects(options)

查询收藏列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
type Number <optional>

要查询的收藏类型,缺省表示所有类型

beginTime Number <optional>

时间戳, 开始时间, 精确到ms, 默认为0

endTime Number <optional>

时间戳, 结束时间, 精确到ms, 默认为服务器的最新时间

lastId String <optional>

上次查询的最后一条收藏的id, 第一次可不填

limit Number <optional>
100

本次查询的消息数量限制, 最多100条, 默认100条

reverse Boolean <optional>
false

默认false表示从endTime开始往前查找历史消息,true表示从beginTime开始往后查找历史消息

done function

结果回调函数,其第二个参数有两个属性collectListtotal,分别是查到的收藏列表和总数

Returns:
Type
Void

getFriends(options)

获取好友列表

  • 如果开发者在初始化SDK的时候设置了syncFriendsfalse, 那么就收不到onfriends回调, 可以调用此接口来获取好友列表。

注:由于 8.9.0 之后好友数量上限变为 10000,远端协议不允许一口气下发 10000 个。

  1. 如果开发者使用数据库,那么此接口将会返回所有数据库中 valid: true 且 updateTime > options.timetag 的记录
  2. 如果开发者不使用数据库,那么使用此接口,传入 timetag,将会从服务器获取 updateTime > options.timetag 的 3000 条记录,分页逻辑请自行处理。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
updateTime Number

时间戳,默认 0。获取更新时间大于此时间戳的升序 3000 条好友。

done done

结果回调函数, 成功的时候会收到好友列表

See:
Returns:
Type
Void
Example
nim.getFriends({
  done: getFriendsDone
});
function getFriendsDone(error, friends) {
  console.log('获取好友列表' + (!error?'成功':'失败'), error, friends);
  if (!error) {
    onFriends(friends);
  }
}

getHistoryMsgs(options)

获取云端历史记录

  • 该接口用于获取一段时间内的历史消息, 由参数beginTimeendTime来控制时间范围。
    • reversefalse时, 后续查询的endTime对应上次查询的最后一条消息的time字段
    • reversetrue时, 后续查询的beginTime对应上次查询的最后一条消息的time字段
  • 如果要搜索历史消息, 请参考获取包含关键词的历史消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

请参考消息场景

to String

聊天对象, 账号或者群id

beginTime Number <optional>

时间戳, 开始时间, 精确到ms, 默认为0

endTime Number <optional>

时间戳, 结束时间, 精确到ms, 默认为服务器的当前时间

lastMsgId String <optional>

上次查询的最后一条消息的idServer, 第一次不填

limit Number <optional>

本次查询的消息数量限制, 最多100条, 默认100条

reverse Boolean <optional>
false

默认false表示从endTime开始往前查找历史消息;
true表示从beginTime开始往后查找历史消息

asc Boolean <optional>
false

默认false表示返回的消息按时间逆序排序;
true表示按时间正序排序

msgTypes StringArray <optional>
['text', 'image', ...]

消息类型列表,默认全部消息类型

done done

结果回调函数, 成功时会额外附上消息列表

Returns:
Type
Void
Example
nim.getHistoryMsgs({
    scene: 'p2p',
    to: 'account',
    done: getHistoryMsgsDone
});
function getHistoryMsgsDone(error, obj) {
    console.log('获取云端历史记录' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        console.log(obj.msgs);
    }
}

getLocalMsgByIdClient(options)

获取 idClient 对应的本地消息

  • 如果不支持数据库, 算成功, 返回 null
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idClient String

idClient

done function

结果回调函数, 成功时会额外附上消息

Returns:
Type
Void
Example
nim.getLocalMsgByIdClient({
    idClient: 'd7a1b2c63066e1038e9aa01321652370',
    done: getLocalMsgByIdClientDone
});
function getLocalMsgByIdClientDone(error, obj) {
    console.log('获取本地消息' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        console.log(obj.msg);
    }
}

getLocalMsgs(options)

获取本地历史记录

  • 如果不支持数据库, 算成功, 返回空数组
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
sessionId String <optional>

如果提供该参数, 那么查询该会话的消息

start Number <optional>
0

开始时间

end Number <optional>
Infinity

结束时间

desc Boolean <optional>
true

true 表示从 end 开始查, false 表示从 begin 开始查

limit Number <optional>
100

limit 数量限制

type String <optional>

消息类型, [indexedDB专用]如果提供该参数, 那么查询该类型的消息

types Array.<String> <optional>

[indexedDB专用]如果提供该参数, 那么查询这几种类型的消息

subTypes Array.<Interger> <optional>

[indexedDB专用]如果提供该参数, 那么查询这几种子类型的消息

keyword String <optional>

[indexedDB专用]如果提供参数, 那么查询匹配该关键词的消息

filterFunc function <optional>

[indexedDB专用]可选参数, 过滤函数, 接收消息对象, 返回 true 表示结果保留该消息

done done

结果回调函数, 成功时会附上消息列表

Returns:
Type
Void
Example
nim.getLocalMsgs({
  sessionId: 'p2p-account'
  limit: 100,
  done: getLocalMsgsDone
})
function getLocalMsgsDone(error, obj) {
  console.log('获取本地消息' + (!error?'成功':'失败'), error, obj)
}

getLocalMsgsByIdClients(options)

获取 idClients 对应的本地消息

  • 如果不支持数据库, 算成功, 返回空数组
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idClients Array.<String>

idClients

done function

结果回调函数, 成功时会额外附上消息列表

Returns:
Type
Void
Example
nim.getLocalMsgsByIdClients({
    idClients: [
        'd7a1b2c63066e1038e9aa01321652370',
        '22e604c7811c23586355f63f24658525'
    ],
    done: getLocalMsgsByIdClientsDone
});
function getLocalMsgsByIdClientsDone(error, obj) {
    console.log('获取本地消息' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        console.log(obj.msgs);
    }
}

getLocalSession(options)

通过sessionId获取本地会话

  • 如果支持数据库, 则查找数据库中的对应会话,有则返回会话对象,无则返回 null
  • 如果不支持数据库, 则查找之前同步到的会话列表,有则返回会话对象,无则返回 null
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
sessionId String <optional>

需要查询的会话的sessionId

done done

结果回调函数

Returns:
Type
Void
Example
nim.getLocalSession({
    sessionId: sessionId,
    done: getLocalSessionDone
});
function getLocalSessionDone(error, obj) {
    console.log('获取本地会话操作' + (!error ? '完成' : '失败'), error, obj)
    if (!error) {
        onSession(obj);
    }
}

getLocalSessions(options)

获取本地会话列表

  • 如果不支持数据库, 返回空数组
  • 会话列表按时间逆序排列, 即最近聊过天的放在列表的最前面
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
lastSessionId Number <optional>

上次查询的最后一条会话的id, 第一次不填

limit Number <optional>

本次查询的会话数量限制, 最多 100 条, 默认 100 条

reverse Boolean <optional>
false

默认false表示从最近的会话开始往前查找本地会话;
true表示从第一条会话开始往后查找本地会话

done done

结果回调函数

Returns:
Type
Void
Example
nim.getLocalSessions({
    lastSessionId: lastSessionId,
    limit: 100,
    done: getLocalSessionsDone
});
function getLocalSessionsDone(error, obj) {
    console.log('获取本地会话列表' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onSessions(obj.sessions);
    }
}

getLocalSessionsByMsgType(options)

获取本地会话列表,开发者可以指定排除lastMsg的类型,比如获取lastMsg是非通知类型的会话列表

  • 如果不支持数据库, 返回空数组
  • 会话列表按时间逆序排列, 即最近聊过天的放在列表的最前面
  • getLocalSessions不同的是,该接口可以排除或指定lastMsg的类型,如当 excludeType='notification' 时,返回的session列表是包含非通知类型消息的会话,该会话的lastMsg为最后一条非通知消息
  • 如果某会话中没有符合类型的消息,则lastMsg为null
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
exclude String | Array <optional>

lastMsg要排除的类型,具体参见消息类型,如不填,表示lastMsg不排除任何类型

done done

结果回调函数

Returns:
Type
Void
Example
nim.getLocalSessionsByMsgType({
    exclude: 'notification',
    // exclude: ['notification', 'image'],
    done: getLocalSessionsByMsgTypeDone
});
function getLocalSessionsByMsgTypeDone(error, obj) {
    console.log('获取会话列表' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onSessions(obj.sessions);
    }
}

getLocalSysMsgs(options)

获取本地系统通知

  • 如果不支持数据库, 算成功, 返回空数组
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
category String <optional>

种类

type String <optional>

类型

read Boolean <optional>

可选

  • 如果不传, 默认获取所有已读和未读的系统通知
  • 如果传 true, 那么只获取已读的系统通知
  • 如果传 false, 那么只获取未读的系统通知
lastIdServer String <optional>

上次查询的最后一条系统通知的idServer, 第一次不填

limit Number <optional>

本次查询的消息数量限制, 最多 100 条, 默认 100 条

reverse Boolean <optional>
false

默认false表示从最近的系统通知开始往前查找本地系统通知;
true表示从第一条系统通知开始往后查找本地系统通知

done done

结果回调函数, 成功时会额外附上系统通知列表

Returns:
Type
Void
Example
nim.getLocalSysMsgs({
    lastIdServer: 'lastIdServer',
    limit: 100,
    done: getLocalSysMsgsDone
});
function getLocalSysMsgsDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取本地系统通知' + (!error?'成功':'失败'));
    if (!error) {
        console.log(obj.sysMsgs);
    }
}

getLocalTeamMembers(options)

获取本地群成员

  • 如果不支持数据库, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

teamId 数组

accounts Array.<String>

成员account列表

done function

结果回调函数, 成功时会额外附上群列表

Returns:
Type
Void
Example
nim.getLocalTeamMembers({
    teamIds: teamIds
    done: getLocalTeamMembers
});
function getLocalTeamMembers(error, obj) {
    console.log('获取本地群成员' + (!error?'成功':'失败'));
    console.log(error);
    console.log(obj);
}

getLocalTeams(options)

获取teamIds对应的本地群

  • 如果不支持数据库, 算成功
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamIds Array.<String>

teamId 数组

done function

结果回调函数, 成功时会额外附上群列表

Returns:
Type
Void
Example
nim.getLocalTeams({
    teamIds: teamIds
    done: getLocalTeamsDone
});
function getLocalTeamsDone(error, obj) {
    console.log('获取本地群' + (!error?'成功':'失败'));
    console.log(error);
    console.log(obj);
}

getMsgPins(options, done)

获取会话的PIN消息列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
id String

会话ID

done function

结果回调函数,第一个参数是error,代表是否有错;第二个参数是返回的PIN消息列表


getMsgsByIdServer(options, done)

根据idServer批量查询服务器消息

  • 主要用于Thread消息场景
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
reqMsgs ObjectArray

数组的每个元素都是一个对象,包含scene, from, to, idServer, time五个字段,数组长度最大为100

done function

结果回调函数,第一个参数是error,第二个参数返回的具体消息列表


getMutedSuperTeamMembers(options)

获取超大群内被禁言的群成员列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
teamId String

群id

joinTime Boolean <optional>
0

获取joinTime在此之后的被禁言的群成员

limit Object <optional>
100

本次获取的群成员数量上限

reverse Boolean <optional>
false

false 按joinTime正序排列 true - 按joinTime逆序排列

done done

结果回调函数, 成功时会额外附上群成员列表和分页数据(如果有的话)

See:
Returns:
Type
Void
Example
nim.getMutedSuperTeamMembers({
    teamId: '123',
    joinTime: 0,
    limit: 100,
    done: onMembers(err, arr)
});
function onMembers (error, arr) {
    console.log('获取群成员' + (!error?'成功':'失败'));
    console.log('群成员:', arr)
    
    var lastmembers = arr && arr[arr.length - 1]
    if (lastmembers) {
       // 继续获取下一页
       nim.getMutedSuperTeamMembers({
         teamId: '123',
         joinTime: lastmembers.joinTime,
         limit: 200,
         done: onMembers(err, arr)
       })
    }
    
}

getMutedTeamMembers(options)

获取群禁言成员列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId Array.<String>

群 ID

Returns:
Type
Void
Example
nim.getMutedTeamMembers({
  teamId: 'teamId',
  done: getMutedTeamMembersDone
})
function getMutedTeamMembersDone (error, obj) {
  console.log('获取群禁言成员列表' + (!error?'成功':'失败'));
}

getNosAccessToken(options)

获取NOS安全下载token

  • 在上传文件时,若设置参数nosScenesnim_security_开头的字符串,则需要调用该接口获取token后才能下载文件。nosScenes可在初始化时全局配置,也可在发送、预览某文件时单独设置
  • 下载文件后请及时删除token,避免token泄漏
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
url Object

文件url

userAgent Object <optional>

用户user agent

ext Object <optional>

扩展字段

done Object

结果回调函数。第一个参数是错误信息,第二个参数是结果对象,它有tokenresUrl两个属性,分别是文件token和带有token的最终url(可以用该url直接下载文件)


getPushNotificationMultiportConfig()

获取当前多端推送配置选项

Returns:

多端推送配置选项

Type
PushNotificationMultiportConfig

getQChatAddress()

获取圈组功能的连接地址

  • 可以在 IM 连接上获取圈组连接地址,再使用圈组 SDK 启动它。
Returns:
Type
String
Example
nim.getQChatAddress({
  done: function (error, obj) {
    console.log('获取圈组连接地址' + (!error?'成功':'失败'), error, obj);
  }
});

getQuickComments(options, done)

查询消息的快捷评论列表

  • 可批量,即同时查询多个消息的评论列表
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
msgs IMMessageArray

被回复的消息,至少要包含scene, from, to, idServer, idClient, time六个字段

done function

结果回调函数,第一个参数是error,第二个参数返回完整的评论内容和时间戳


getRelations(options)

获取黑名单和静音列表

  • 如果开发者在初始化SDK的时候设置了syncRelationsfalse, 那么就收不到onblacklistonmutelist回调, 可以调用此接口来获取黑名单和静音列表。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
done done

结果回调函数, 成功时会返回黑名单和静音列表

See:
Returns:
Type
Void
Example
nim.getRelations({
    done: getRelationsDone
});
function getRelationsDone(error, obj) {
    console.log('获取静音列表' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onBlacklist(obj.blacklist);
        onMutelist(obj.mutelist);
    }
}

getServerSession(options)

获取服务器上的某个会话

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
scene String

会话场景

to String

对方账号或群ID

Example
nim.getServerSession({
    scene: 'p2p',
    to: 'account',
    done: function (obj) {
       console.log('获取会话' + (!error?'成功':'失败'), error, obj);
    }
});

getServerSessions(options)

获取服务器会话列表

  • 与漫游消息构成的会话列表不同,该列表记录的会话数量更多,超过了漫游列表100条的限制,但列表中的会话没有未读数
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
minTimestamp Number <optional>
0

最小的时间戳。0表示之前从未请求过。如果之前拉取过会话,可以填写上次的时间戳,拉取自上次之后更新的会话

maxTimestamp Number <optional>

最大的时间戳。默认是当前时间,表示拉取最新的会话。拉取第一页之后的会话时,填写上一页最后一条会话的更新时间

needLastMsg Boolean <optional>
true

是否需要lastMsg

limit Number <optional>
100

返回的最大条数,最大100,剩余的可分页获取

Example
nim.getServerSessions({
    minTimestamp: 1571039417853, // 获取 1571039417853 时间之后更新的会话,增量获取
    maxTimestamp: 1571039418800, // 非第一页,上一页会话列表最小的时间时1571039418800
    done: function (error, obj) {
       console.log('获取会话列表' + (!error?'成功':'失败'), error, obj);
    }
});

getServerTime(options)

获取服务器时间戳(毫秒)

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
done function

结果回调函数

Returns:
Type
Void
Example
nim.getServerTime({
    done: getServerTimeDone
});
function getServerTimeDone(error, time) {
    console.log('获取服务器时间' + (!error?'成功':'失败'), error, time);
}

getSessionsWithMoreRoaming(options)

查询漫游消息不全的会话/会话列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
id String <optional>

要查询的会话id,若不填,则查询全部

done function

getStickTopSessions(options)

获取置顶会话列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
done function

结果回调函数,第一个参数是error,代表是否有错

findDelete Boolean

结果是否显示已删除的会话,默认false不显示


getSuperTeam(options)

获取群信息

  • 开发者可以调用此接口根据群ID获取群资料
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数, 成功时会收到超大群资料

See:
Returns:
Type
Void
Example
nim.getSuperTeam({
    teamId: '123',
    done: getSuperTeamDone
});
function getSuperTeamDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取群' + (!error?'成功':'失败'));
}

getSuperTeamMembersByAccounts(options)

通过群ID及成员账号获取超大群成员信息

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

群成员账号列表

done done

结果回调函数, 成功时会额外附上超大群成员列表

See:
Returns:
Type
Void
Example
nim.getSuperTeamMembersByAccounts({
    teamId: '123',
    account: 'abc',
    done: done
});
function done(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取群成员' + (!error?'成功':'失败'));
    if (!error) {
        onTeamMember(obj);
    }
}

getSuperTeamMembersByJoinTime(options)

根据进群时间,分页获取超大群成员

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
teamId String

群id

joinTime Boolean <optional>
0

获取在该时间以后进群的群成员

limit Object <optional>
100

本次获取的群成员数量

reverse Boolean <optional>
false

false - 获取joinTime之后进群的群成员,按时间正序排列 true - 获取joinTime之前进群的群成员,按时间逆序排列

done done

结果回调函数, 成功时会额外附上群成员列表和分页数据(如果有的话)

See:
Returns:
Type
Void
Example
nim.getSuperTeamMembersByJoinTime({
    teamId: '123',
    joinTime: 0,
    limit: 100,
    done: onMembers(err, arr)
});
function onMembers (error, arr) {
    console.log('获取群成员' + (!error?'成功':'失败'));
    console.log('群成员:', arr)
    
    var lastmembers = arr && arr[arr.length - 1]
    if (lastmembers) {
       // 继续获取下一页
       nim.getSuperTeamMembersByJoinTime({
         teamId: '123',
         joinTime: lastmembers.joinTime,
         limit: 200,
         done: onMembers(err, arr)
       })
    }
    
}

getSuperTeams(options)

获取所在的超大群列表

  • 如果开发者在初始化SDK的时候设置了syncSuperTeamsfalse, 那么就收不到onSuperTeams回调, 可以调用此接口来获取超大群列表
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
done done

结果回调函数, 成功时会收到超大群列表

See:
Returns:
Type
Void
Example
nim.getSuperTeams({
    done: getSuperTeamsDone
});
function getSuperTeamsDone(error, teams) {
    console.log(error);
    console.log(teams);
    console.log('获取超大群列表' + (!error?'成功':'失败'));
}

getTeam(options)

获取群

  • 开发者可以调用此接口获取群资料
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数, 成功时会收到群资料

See:
Returns:
Type
Void
Example
nim.getTeam({
    teamId: '123',
    done: getTeamDone
});
function getTeamDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取群' + (!error?'成功':'失败'));
}

getTeamMemberByTeamIdAndAccount(options)

通过群ID及成员账号获取群成员信息

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

account String

群成员账号

done done

结果回调函数, 成功时会额外附上群成员列表

See:
Returns:
Type
Void
Example
nim.getTeamMemberByTeamIdAndAccount({
    teamId: '123',
    account: 'abc',
    done: getTeamMemberDone
});
function getTeamMemberDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取群成员' + (!error?'成功':'失败'));
    if (!error) {
        onTeamMember(obj);
    }
}

getTeamMemberInvitorAccid(options)

获取群成员的邀请者accid

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

表示需要查询邀请者accid的群成员账号列表,一次最多查200个。当群成员数量小于等于200时为可选参数,不填默认查全部成员;群成员数量大于200时,需要将成员列表分批多次调用此接口查询。

done done

结果回调函数,返回数据类型为Object,key/value分别是群成员accid/邀请者accid

See:
Returns:
Type
Void
Example
nim.getTeamMemberInvitorAccid({
    teamId: '123',
    account: ['abc'],
    done: getTeamMemberInvitorAccidDone
});
function getTeamMemberInvitorAccidDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取群成员邀请者' + (!error?'成功':'失败'));
}

getTeamMembers(options)

获取群成员

  • 如果开发者在初始化SDK时选择设置了syncTeamMembersfalse, 那么就收不到onteammembers回调, 可以调用此方法来获取群成员列表
  • 接受入群邀请之后调用此方法来获取群成员列表
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数, 成功时会额外附上群成员列表

See:
Returns:
Type
Void
Example
nim.getTeamMembers({
    teamId: '123',
    done: getTeamMembersDone
});
function getTeamMembersDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('获取群成员' + (!error?'成功':'失败'));
    if (!error) {
        onTeamMembers(obj);
    }
}

getTeamMsgReadAccounts(options)

查询群组已读、未读账号列表

  • 若支持db且存在idClient,会将查询到的结果存db
  • 之后从服务器查询失败时,会将错误信息和db中缓存的结果一同返回
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamMsgReceipt Object

已读消息对象

Properties
Name Type Argument Description
teamId String

群序号

idServer String

消息idServer

idClient String <optional>

消息idClient,若支持db且有该参数,则SDK会将查询到的结果存到db中,离线期间也可查

done function

结果回调函数,第三个参数是查询到的结果

Returns:
Type
Void
Example
nim.getTeamMsgReadAccounts({
  teamMsgReceipt: {
     teamId: '1027484',
     idServer: '68953284018302'
  },
  done: getTeamMsgReadAccountsDone
})
function getTeamMsgReadAccountsDone (error, params, result) {
  console.log('查询群组已读、未读账号列表' + (!error?'成功':'失败'), err, result);
}

getTeamMsgReads(options)

查询群组消息已读、未读数量

  • 对应于群组消息发送时配置了needMsgReceipt字段的群组消息,接收方可以对消息发送已读回执
  • done 回调的第二个参数是发送的参数,用于校验,第三个参数才是实际的结果
  • 在支持db,且存在idClient时:
    • 查询完成后,db中对应的msg会拥有 readunread属性,分别对应消息的已读未读人数
    • unread为 0 后,消息的已读、未读数量便不会再变化了,因此建议在调用该接口前,过滤掉unread已为0的消息,减少不必要的性能消耗
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamMsgReceipts Array.<Object>

已读消息对象

teamMsgReceipt.teamId String

群序号

teamMsgReceipt.idServer String

消息编号

teamMsgReceipt.idClient String <optional>

消息的idClient

Returns:
Type
Void
Example
nim.getTeamMsgReads({
  teamMsgReceipts: [{
     teamId: '1027484',
     idServer: '68953284018302'
  }],
  done: getTeamMsgReadsDone
})
function getTeamMsgReadsDone (error, params, result) {
  console.log('查询群组消息已读、未读数量' + (!error?'成功':'失败'));
}

getTeams(options)

获取群列表

  • 如果开发者在初始化SDK的时候设置了syncTeamsfalse, 那么就收不到onteams回调, 可以调用此接口来获取列表
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
done done

结果回调函数, 成功时会收到列表

See:
Returns:
Type
Void
Example
nim.getTeams({
    done: getTeamsDone
});
function getTeamsDone(error, teams) {
    console.log(error);
    console.log(teams);
    console.log('获取群列表' + (!error?'成功':'失败'));
}

getTeamsById(options)

通过 teamId 来获取若干个群

  • 开发者可以调用此接口获取若干个群的资料
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamIds String

群ids,数组

done done

结果回调函数, 成功时会收到群资料

Returns:

注:若批量查询部分成功,部分失败的情况,则下文 example 里的 result,
result.teams 代表成功列表部分的列表,result.tids 代表操作失败的群id。

Type
Void
Example
nim.getTeamsById({
    teamIds: ['812345', '885921'],
    done: (error, result) => { console.log(error, result) }
});

getThreadMsgs(options)

获取某thread的消息列表

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

对方账号

threadMsgFromAccount String

thread根消息的from,即发送者账号

threadMsgToAccount String

thread根消息的to,即接受者账号

threadMsgIdServer String

thread根消息的idServer

threadMsgTime Number

thread根消息的time

beginTime Number <optional>

时间戳, 开始时间, 精确到ms, 默认为0

endTime Number <optional>

时间戳, 结束时间, 精确到ms, 默认为服务器的当前时间

lastMsgId String <optional>

上次查询的最后一条消息的idServer, 第一次不填

limit Number <optional>
100

本次查询的消息数量限制, 最多100条, 默认100条

reverse Boolean <optional>
false

默认false表示从endTime开始往前查找历史消息,true表示从beginTime开始往后查找历史消息

done function

结果回调函数

Returns:
Type
Void

getUser(options)

获取用户名片

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

账号

sync Boolean

是否去服务器上获取,为 true 则从服务器获取,默认从本地 db 获取

done function

结果回调函数, 成功时会返回用户名片

See:
Returns:
Type
Void
Example
nim.getUser({
    account: 'account',
    done: getUserDone
});
function getUserDone(error, user) {
    console.log('获取用户名片' + (!error?'成功':'失败'), error, obj);
    if (!error && user) {
        onUsers(user);
    }
}

getUsers(options)

获取用户名片数组

  • 每次最多 150 个
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
accounts Array.<String>

账号数组

sync Boolean

是否去服务器上获取,为 true 则从服务器获取,默认从本地 db 获取

done function

结果回调函数, 成功时会返回用户名片列表

See:
Returns:
Type
Void
Example
nim.getUsers({
    accounts: ['account1', 'account2'],
    done: getUsersDone
});
function getUsersDone(error, users) {
    console.log('获取用户名片数组' + (!error?'成功':'失败'), error, users);
    if (!error && users.length) {
        onUsers(users);
    }
}

insertLocalSession(options)

插入一条本地会话记录

  • 如果会话已存在, 那么会返回错误
  • 如果不支持数据库, 那么算成功
  • 如果有对应会话的本地历史消息, 那么会更新会话的 lastMsg 为最后一条消息
  • 插入成功后, 会触发onupdatesession回调
Parameters:
Name Type Argument Description
options Object

配置参数

Properties
Name Type Description
scene String

会话场景

option.to String

会话对象, 账号或群ID

options.updateTime Number <optional>

可选, 会话更新的时间, 如果不填, SDK 会设置一个比当前所有会话更新时间大的一个时间

options.done function

结果回调函数, 如果成功会额外附上生成的会话对象

Returns:
Type
Void
Example
nim.insertLocalSession({
    scene: 'p2p',
    to: 'account',
    done: insertLocalSessionDone
});
function insertLocalSessionDone(error, obj) {
    console.log('插入本地会话记录' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onSessions(obj.session);
    }
}

interlaceImage(options)

interlace 图片

  • 只支持通过预览文件发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • 在网络环境较差时, interlace 后的图片会以从模糊到清晰的方式呈现给用户
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

done done

结果回调函数, 成功时附上 interlace 后的图片 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var interlaceUrl = nim.interlaceImage({
    url: url,
    done: interlaceImageDone
});
function interlaceImageDone(error, obj) {
    console.log('interlace 图片' + (!error?'成功':'失败'), error, obj);
}

isMsgRemoteRead(msg)

查询消息是否被对方读过了

  • 目前只支持'p2p'会话
Parameters:
Name Type Description
msg IMMessage

消息

Returns:

是否被对方读过

Type
Boolean
Example
var isRemoteRead = nim.isMsgRemoteRead(msg);

isMyFriend(options)

查看某人是否为当前用户的好友

  • 注:此接口为数据库接口。如果开发者在初始化SDK的时候设置了dbfalse, 或者所在环境不支持数据库,那么此接口永远返回 false。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

查询目标的 account ID

done done

结果回调函数

Returns:
Type
Void
Example
nim.isMyFriend({
  account: 'cs1',
  done: function (err, isFriend) {}
});

isUserInBlackList(options)

查看某人是否在当前用户在黑名单里

  • 注:此接口为数据库接口。如果开发者在初始化SDK的时候设置了dbfalse, 或者所在环境不支持数据库,那么此接口永远返回 false。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

查询目标的 account ID

done done

结果回调函数

Returns:
Type
Void
Example
nim.isUserInBlackList({
  account: 'cs1',
  done: function (err, isInBlackList) {}
});

kick(options)

踢当前用户登录的其它端

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
deviceIds Array.<String>

要踢掉的端的设备号数组

done done

结果回调函数, 成功时会收到被踢掉的设备号数组

Returns:
Type
Void
Example
nim.kick({
    deviceIds: ['device1'],
    done: onKick
});
function onKick(error, obj) {
    console.log('踢其它端' + (!error?'成功':'失败'));
    console.log(error);
    console.log(obj);
}

leaveSuperTeam(options)

主动退群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数

Returns:
Type
Void
Example
nim.leaveSuperTeam({
    teamId: '123',
    done: leaveSuperTeamDone
});
function leaveSuperTeamDone(error, obj) {
    console.log('主动退群' + (!error?'成功':'失败'), error, obj);
}

leaveTeam(options)

主动退群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

done done

结果回调函数

Returns:
Type
Void
Example
nim.leaveTeam({
    teamId: '123',
    done: leaveTeamDone
});
function leaveTeamDone(error, obj) {
    console.log('主动退群' + (!error?'成功':'失败'), error, obj);
}

logout()

登出SDK

  • 在连接正常的情况下,可以调用该方法退出登录,如果您不确定连接是否正常,请使用connect
See:
Returns:
Type
Void
Example
nim.logout();

markInBlacklist(options)

加入黑名单/从黑名单移除

  • 此接口可以完成以下两个功能, 通过参数isAdd来决定实际的功能
    • isAddtrue时, 会将account加入黑名单
      • 如果一个用户被加入了黑名单, 那么就不再会收到此用户发送的消息
    • isAddfalse时, 会将account从黑名单移除
      • 如果一个用户被从黑名单移除, 那么会重新收到此用户发送的消息
  • 每个功能SDK都提供了相应的独立接口
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要加入黑名单/从黑名单移除的账号

isAdd Boolean

true表示加入黑名单, false表示从黑名单移除

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.markInBlacklist({
    account: 'account',
    // `true`表示加入黑名单, `false`表示从黑名单移除
    isAdd: true,
    done: markInBlacklistDone
});
function markInBlacklistDone(error, obj) {
    console.log('将' + obj.account + (isAdd ? '加入黑名单' : '从黑名单移除') + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onMarkInBlacklist(obj);
    }
}

markInMutelist(options)

加入静音列表/从静音列表移除

  • 此接口可以完成以下两个功能, 通过参数isAdd来决定实际的功能
  • 每个功能SDK都提供了相应的独立接口
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要加入静音列表/从静音列表移除的账号

isAdd Boolean

true表示加入静音列表, false表示从静音列表移除

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.markInMutelist({
    account: 'account',
    // `true`表示加入静音列表, `false`表示从静音列表移除
    isAdd: 'true',
    done: markInMutelistDone
});
function markInMutelistDone(error, obj) {
    console.log('将' + obj.account + (isAdd ? '加入静音列表' : '从静音列表移除') + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onMarkInMutelist(obj);
    }
}

markMsgRead(msgs)

标记消息为已收到

  • 如果没有消息、或者支持数据库、或者设置了自动标记, 那么直接返回

注:调用此接口只是向服务器确认本端收到了此消息,下次登录时不会把这些消息当作离线的下发。和消息已读/未读没有关系

Parameters:
Name Type Description
msgs Array.<IMMessage>

待标记的消息或者消息数组

Returns:
Type
Void
Example
nim.markMsgRead(someMsg);
// or
nim.markMsgRead([someMsg]);

markSysMsgRead(options)

标记系统通知为已收到

  • SDK 在收到系统通知后会更新系统通知未读数, 开发者需要调用此接口来通知 SDK 将某条系统通知标记为已读状态, 标记后会触发onupdatesysmsgunread回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
sysMsgs SystemMessage | Array.<SystemMessage>

通过onofflinesysmsgs或者onsysmsg接收到的系统通知或者系统通知数组

done done

结果回调函数

Returns:
Type
Void
Example
nim.markSysMsgRead({
    sysMsgs: someSysMsg,
    done: markSysMsgReadDone
});
function markSysMsgReadDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('标记系统通知为已收到' + (!error?'成功':'失败'));
}

mergeFriends(olds, news)

合并好友

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的好友列表
  • 合并时按照 account 的值去重,按照 account 的值正序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'account'
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并好友
Parameters:
Name Type Description
olds Array.<Friend>

原始好友数组

news Friend | Array.<Friend>

待合并的好友或好友数组

Returns:

合并后的好友数组

Type
Array.<Friend>

mergeLoginPorts(olds, news)

合并登录端

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的登录端列表
  • 合并时按照 deviceId 的值去重,按照 deviceId 的值正序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'deviceId'
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并登录端
Parameters:
Name Type Description
olds Array.<LoginPort>

原始登录端数组

news LoginPort | Array.<LoginPort>

待合并的登录端或登录端数组

Returns:

合并后的登录端数组

Type
Array.<LoginPort>

mergeMsgs(olds, news)

合并消息

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的消息列表
  • 合并时按照 idClient 的值去重,按照 time 的值排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'idClient',
    sortPath: 'time'
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并消息
Parameters:
Name Type Description
olds Array.<Message>

原始消息数组

news Message | Array.<Message>

待合并的消息或消息数组

Returns:

合并后的消息数组

Type
Array.<Message>

mergeRelations(olds, news)

合并关系

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的关系列表
  • 合并时按照 account 的值去重,按照 account 的值正序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'account'
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并关系
Parameters:
Name Type Description
olds Array.<Relation>

原始关系数组

news Relation | Array.<Relation>

待合并的关系或关系数组

Returns:

合并后的关系数组

Type
Array.<Relation>

mergeSessions(olds, news)

合并会话

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的会话列表
  • 合并时按照 id 的值去重,按照 updateTime 的值倒序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    sortPath: 'updateTime',
    desc: true
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并会话
Parameters:
Name Type Description
olds Array.<Session>

原始会话数组

news Session | Array.<Session>

待合并的会话或会话数组

Returns:

合并后的会话数组

Type
Array.<Session>

mergeSysMsgs(olds, news)

合并系统通知

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的系统通知列表
  • 合并时按照 idServer 的值去重,按照 idServer 的值倒序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'idServer',
    desc: true
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并系统通知
Parameters:
Name Type Description
olds Array.<SystemMessage>

原始系统通知数组

news SystemMessage | Array.<SystemMessage>

待合并的系统通知或系统通知数组

Returns:

合并后的系统通知数组

Type
Array.<SystemMessage>

mergeTeamMembers(olds, news)

合并群成员

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的群成员列表
  • 合并时按照 id 的值去重,按照 id 的值正序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并群成员
Parameters:
Name Type Description
olds Array.<TeamMember>

原始群成员数组

news TeamMember | Array.<TeamMember>

待合并的群成员或群成员数组

Returns:

合并后的群成员数组

Type
Array.<TeamMember>

mergeTeams(olds, news)

合并群

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的群列表
  • 合并时按照 teamId 的值去重,按照 teamId 的值正序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'teamId'
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并群
Parameters:
Name Type Description
olds Array.<Team>

原始群数组

news Team | Array.<Team>

待合并的群或群数组

Returns:

合并后的群数组

Type
Array.<Team>

mergeUsers(olds, news)

合并名片

  • 此方法不会改变参数的值,而是会返回新的数组,包含合并后的名片列表
  • 合并时按照 account 的值去重,按照 account 的值正序排序
  • 此方法内部调用 NIM.util.mergeObjArray 来完成实际工作
if (!olds) {olds = [];}
if (!news) {return olds;}
if (!NIM.util.isArray(news)) { news = [news]; }
if (!news.length) {return olds;}
var options = {
    keyPath: 'account'
};
NIM.util.mergeObjArray([], olds, news, options);
  • 如果此方法不满足开发者的业务需求,那么开发者可以根据自己的业务需求调用 NIM.util.mergeObjArray 来合并名片
Parameters:
Name Type Description
olds Array.<User>

原始名片数组

news User | Array.<User>

待合并的名片或名片数组

Returns:

合并后的名片数组

Type
Array.<User>

msgFtsInServer(options)

云端全文检索消息(full text search)

  • 返回的消息会按会话 session 分类
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
keyword String

检索关键词

fromTime Interger <optional>

检索目标的开始时间,默认 0 代表不限制

toTime Interger <optional>

检索目标的结束时间,默认 当前时间

sessionLimit Interger <optional>

会话数量限制。默认 10. 举例传入 5,检索返回 5 个会话的消息

msgLimit Interger <optional>

单个会话返回的消息数量限制。默认 5。 举例传 1,每个会话返回 1 条匹配的消息。

order Interger <optional>

查询的消息排序规则,默认 DESC 按消息时间降序。可选 ASC 升序。

p2pList Array.<String> <optional>

搜索条件 P2P会话列表,会话(p2p-accid1)的 account 示例:['accid1', 'accid2', 'accid3']

teamList Array.<String> <optional>

搜索条件 群列表。从这些 team(team-146694936) 里搜寻消息,示例:['146694936', '13897']

senderList Array.<String> <optional>

消息发送者列表,account 列表 示例:['accid1', 'accid2', 'accid3']

msgTypeList Array.<String> <optional>

消息类型 示例:['text', 'image', 'audio', 'video', 'geo', 'notification', 'file', 'tip', 'custom']

msgSubTypeList Array.<String> <optional>

消息子类型,此类型开发者在发送消息时可自定义,且格式为大于0的整数。示例:[1, 2]

done function

结果回调函数

Returns:
Type
Void
Example
nim.msgFtsInServer({
    keyword: '一个关键词'
    done: function(err, obj) { console.log(err, obj) }
});

msgFtsInServerByTiming(options)

云端全文检索消息-按时间分页搜索(full text search)

  • 返回的消息结果按时间自然排序
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
keyword String

检索关键词

fromTime Interger <optional>

检索目标的开始时间,默认 0 代表不限制

toTime Interger <optional>

检索目标的结束时间,默认 当前时间

msgLimit Interger <optional>

单个会话返回的消息数量限制。默认 20。举例传 1,每个会话返回 1 条匹配的消息。

order Interger <optional>

查询的消息排序规则,默认 DESC 按消息时间降序。可选 ASC 升序。

p2pList Array.<String> <optional>

搜索条件 P2P会话列表,会话(p2p-accid1)的 account 示例:['accid1', 'accid2', 'accid3']

teamList Array.<String> <optional>

搜索条件 群列表。从这些 team(team-146694936) 里搜寻消息,示例:['146694936', '13897']

senderList Array.<String> <optional>

消息发送者列表,account 列表 示例:['accid1', 'accid2', 'accid3']

msgTypeList Array.<String> <optional>

消息类型 示例:['text', 'image', 'audio', 'video', 'geo', 'notification', 'file', 'tip', 'custom']

msgSubTypeList Array.<String> <optional>

消息子类型,此类型开发者在发送消息时可自定义,且格式为大于0的整数。示例:[1, 2]

done function

结果回调函数

Returns:
Type
Void
Example
nim.msgFtsInServerByTiming({
    keyword: '一个关键词'
    done: function(err, obj) { console.log(err, obj) }
});

muteTeamAll(options)

群组禁言

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

待禁言群的群id

mute Boolean

是否禁言

Returns:
Type
Void
Example
nim.muteTeamAll({
  teamId: '1027484',
  mute: 1,
  done: muteTeamAllDone
})
function muteTeamAllDone (error, obj) {
  console.log('禁言群' + (!error?'成功':'失败'));
}

notifyForNewTeamMsg(options)

查询是否需要群消息通知

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamIds Array.<String>

群列表

done done

结果回调函数,成功时第二个参数是一个map, key是群ID, value 是一个布尔值, 表示该群是否需要群消息通知;如果有部分成功部分失败,第三个参数是失败的群ID数组

Returns:
Type
Void
Example
nim.notifyForNewTeamMsg({
    teamIds: ['123'],
    done: notifyForNewTeamMsgDone
})
function notifyForNewTeamMsgDone(error, map) {
    console.log(error);
    console.log(map);
    console.log('查询是否需要群消息通知' + (!error?'成功':'失败'));
}

packFileDownloadName(options)

修改图片下载的名字

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

name String

下载的名字

Returns:

修改图片下载名字后的图片 url

Type
String
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var nameUrl = nim.packFileDownloadName({
    url: url,
    name: '测试.jpg'
});
console.log(nameUrl);

passFriendApply(options)

通过好友申请

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
    • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'系统通知, 此类群通知消息的from字段的值为通过方的帐号, to字段的值为申请方的账号。
    • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

对应的系统通知的 idServer

account String

要通过好友申请的账号

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.passFriendApply({
    idServer: sysMsg.idServer,
    account: 'account',
    ps: 'ps',
    done: passFriendApplyDone
});
function passFriendApplyDone(error, obj) {
    console.log('通过好友申请' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onAddFriend(obj.friend);
    }
}

passSuperTeamApply(options)

通过入群申请

  • 用户申请加入高级群后, 目标群的群主和管理员会收到一条类型为'applySuperTeam'系统通知,可调用该方法通过该用户的入群申请
  • 通过入群申请后,该群的所有群成员会收到一条类型为'passSuperTeamApply'群通知消息, 此类群通知消息的from字段的值为通过入群申请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段account包含了申请方的帐号, attach有一个字段members的值为被通过申请的群成员列表。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idServer String

对应的系统通知的 idServer

teamId String

群ID

from String

申请方的帐号

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.passSuperTeamApply({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'a2',
    done: passSuperTeamApplyDone
});
function passSuperTeamApplyDone(error, obj) {
    console.log('通过入群申请' + (!error?'成功':'失败'), error, obj);
}

passTeamApply(options)

通过入群申请

  • 用户可以主动申请加入高级群, 目标群的群主和管理员会收到一条类型为'applyTeam'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为对应的群ID, 高级群的群主和管理员在收到入群申请后, 可以选择通过或者拒绝入群申请。
    • 如果通过入群申请, 那么该群的所有群成员会收到一条类型为'passTeamApply'群通知消息, 此类群通知消息的from字段的值为通过入群申请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段account包含了申请方的帐号, attach有一个字段members的值为被通过申请的群成员列表。
    • 如果拒绝入群申请, 那么申请人会收到一条类型为'rejectTeamApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
idServer String

对应的系统通知的 idServer

teamId String

群ID

from String

申请方的帐号

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.passTeamApply({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'a2',
    done: passTeamApplyDone
});
function passTeamApplyDone(error, obj) {
    console.log('通过入群申请' + (!error?'成功':'失败'), error, obj);
}

previewFile(options)

预览文件

  • 开发者可以预览文件, 支持以下几种场景
    • 通过参数fileInput传入文件选择 dom 节点或者节点 ID, SDK 会读取该节点下的文件, 在上传完成前请不要操作该节点下的文件
    • 通过参数blob传入 Blob 对象
    • 通过参数dataURL传入包含 MIME type 和 base64 数据的 data URL, 此用法需要浏览器支持 Blob
    • 通过参数filePath传入文件路径(跨平台系列),支持小程序(5.1.0+)、nodejs(5.4.0+ 内测中)、react-native(5.3.0+),;该参数不支持浏览器环境
  • SDK会将文件上传到文件服务器, 然后将拿到的文件对象在done回调中传给开发者, 文件对象有以下几种
    • 图片对象
    • 音频对象
    • 视频对象
    • 文件对象
  • 开发者在拿到文件对象之后, 可以调用发送文件消息来发送文件消息。
  • 文件大小限制为最大 100M
    • 高级浏览器会在上传前就检测文件大小
    • IE8/IE9 会在上传完成后检测文件大小
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
type String <optional>

文件过滤器

  • image会过滤掉非图片的文件, audio过滤掉非音频, video会过滤掉非视频的文件
  • IE8/IE9 不支持文件过滤
fileInput String | Node <optional>

文件选择 dom 节点或者节点 ID, SDK 会读取该节点下的文件, 在上传完成前请不要操作该节点下的文件

filePath String <optional>

filePath 文件路径(跨平台系列),支持小程序(5.1.0+)、nodejs(5.4.0+ 内测中)、react-native(5.3.0+),上传文件统一使用该参数;该参数不支持浏览器环境

maxSize Number <optional>

限制文件的大小,单位字节

commonUpload Boolean <optional>

使用普通上传(最大100M文件)

blob Blob <optional>

Blob 对象

dataURL String <optional>

包含 MIME type 和 base64 数据的 data URL

uploadprogress uploadprogress <optional>

上传进度, ie9以下不支持上传进度

nosScenes String <optional>

存储场景,不传默认实例化配置,默认为"im"

nosSurvivalTime Number <optional>

存储有效时间,不传默认实例化配置 不得小于一天,单位秒

transcode Boolean <optional>

仅当 type 为 file 时,此参数为 true,举例 docx 文件上传后还会被转换为图片。

done done

结果回调函数, 成功时会收到文件对象, 请参考

  • 图片对象
  • 音频对象
  • 视频对象
  • 文件对象
Returns:
Type
Void
Example
nim.previewFile({
    type: 'image',
    fileInput: fileInput,
    uploadprogress: function(obj) {
        console.log('文件总大小: ' + obj.total + 'bytes');
        console.log('已经上传的大小: ' + obj.loaded + 'bytes');
        console.log('上传进度: ' + obj.percentage);
        console.log('上传进度文本: ' + obj.percentageText);
    },
    done: function(error, file) {
        console.log('上传image' + (!error?'成功':'失败'));
        // show file to the user
        if (!error) {
            var msg = nim.sendFile({
                scene: 'p2p',
                to: 'account',
                file: file,
                done: sendMsgDone
            });
            console.log('正在发送p2p image消息, id=' + msg.idClient);
            pushMsg(msg);
        }
    }
});

processImage(options)

处理图片

此方法接收一组图片操作, 按操作顺序依次处理图片, 可选的操作包括:

每个操作所需的参数请参考上面的各个方法, 除了上面方法列出来的参数之外, 每个操作需要提供操作类型, 分别是

  • 'quality'
  • 'interlace'
  • 'rotate'
  • 'blur'
  • 'crop'
  • 'thumbnail'

请参考下面的示例代码

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

ops Array

操作序列

done done

结果回调函数, 成功时附上处理后的图片 url

Returns:
Type
Void
Example
// 裁剪后旋转
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
nim.processImage({
    url: url,
    ops: [
        {
            type: 'crop',
            x: 100,
            y: 0,
            width: 250,
            height: 250,
        },
        {
            type: 'thumbnail',
            mode: 'cover',
            width: 80,
            height: 80
        }
    ],
    done: processImageDone
});
function processImageDone(error, obj) {
    console.log('处理图片' + (!error?'成功':'失败'), error, obj);
}

qualityImage(options)

修改图片质量

  • 只支持通过预览文件发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • 默认图片质量为100, 开发者可以降低图片质量来省流量
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

quality Int

图片质量, 必须为整数, 取值范围为 0-100, 此方法内部使用 Math.round 来格式化 quality

done done

结果回调函数, 成功时附上修改质量后的图片 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var qualityUrl = nim.qualityImage({
    url: url,
    quality: 20,
    done: qualityImageDone
});
function qualityImageDone(error, obj) {
    console.log('修改图片质量' + (!error?'成功':'失败'), error, obj);
}

rejectFriendApply(options)

拒绝好友申请

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
    • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'系统通知, 此类群通知消息的from字段的值为通过方的帐号, to字段的值为申请方的账号。
    • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

对应的系统通知的 idServer

account String

要拒绝好友申请的账号

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectFriendApply({
    idServer: sysMsg.idServer,
    account: 'account',
    ps: 'ps',
    done: rejectFriendApplyDone
});
function rejectFriendApplyDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('拒绝好友申请' + (!error?'成功':'失败'));
}

rejectSuperTeamApply(options)

拒绝入群申请

  • 用户申请加入高级群后, 目标群的群主和管理员会收到一条类型为'applySuperTeam'系统通知,可调用该方法拒绝该入群申请
  • 如果拒绝入群申请, 那么申请人会收到一条类型为'rejectSuperTeamApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

对应的系统通知的 idServer

teamId String

群ID

from String

申请方的帐号

ps String <optional>

附言, 选填, 长度不能大于5000, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectSuperTeamApply({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'a2',
    ps: '就不',
    done: rejectSuperTeamApplyDone
});
function rejectSuperTeamApplyDone(error, obj) {
    console.log('拒绝入群申请' + (!error?'成功':'失败'), error, obj);
}

rejectSuperTeamInvite(options)

拒绝入群邀请

  • 高级群的群主和管理员在邀请成员加入群(通过操作拉人入群)之后, 被邀请的人会收到一条类型为'teamInvite'系统通知, 此类系统通知的from字段的值为邀请方的帐号, to字段的值为对应的群ID, 此类系统通知的attach有一个字段team的值为被邀请进入的, 被邀请的人可以选择接受邀请或者拒绝邀请。
    • 如果接受入群邀请, 那么该群的所有群成员会收到一条类型为'acceptSuperTeamInvite'群通知消息, 此类群通知消息的from字段的值为接受入群邀请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段members的值为接收入群邀请的群成员列表。
    • 如果拒绝入群邀请, 那么邀请你的人会收到一条类型为'rejectSuperTeamInvite'系统通知, 此类系统通知的from字段的值为拒绝入群邀请的人的帐号, to字段的值为对应的群ID。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

对应的系统通知的 idServer

teamId String

群id

from String

邀请方的帐号

ps String <optional>

附言, 选填, 长度不能大于5000, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectSuperTeamInvite({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'zyy1',
    ps: '就不',
    done: rejectSuperTeamInviteDone
});
function rejectSuperTeamInviteDone(error, obj) {
    console.log('拒绝入群邀请' + (!error?'成功':'失败'), error, obj);
}

rejectTeamApply(options)

拒绝入群申请

  • 用户可以主动申请加入高级群, 目标群的群主和管理员会收到一条类型为'applyTeam'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为对应的群ID, 高级群的群主和管理员在收到入群申请后, 可以选择通过或者拒绝入群申请。
    • 如果通过入群申请, 那么该群的所有群成员会收到一条类型为'passTeamApply'群通知消息, 此类群通知消息的from字段的值为通过入群申请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段account包含了申请方的帐号, attach有一个字段members的值为被通过申请的群成员列表。
    • 如果拒绝入群申请, 那么申请人会收到一条类型为'rejectTeamApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

对应的系统通知的 idServer

teamId String

群ID

from String

申请方的帐号

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectTeamApply({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'a2',
    ps: '就不',
    done: rejectTeamApplyDone
});
function rejectTeamApplyDone(error, obj) {
    console.log('拒绝入群申请' + (!error?'成功':'失败'), error, obj);
}

rejectTeamInvite(options)

拒绝入群邀请

  • 高级群的群主和管理员在邀请成员加入群(通过操作创建群拉人入群)之后, 被邀请的人会收到一条类型为'teamInvite'系统通知, 此类系统通知的from字段的值为邀请方的帐号, to字段的值为对应的群ID, 此类系统通知的attach有一个字段team的值为被邀请进入的, 被邀请的人可以选择接受邀请或者拒绝邀请。
    • 如果接受入群邀请, 那么该群的所有群成员会收到一条类型为'acceptTeamInvite'群通知消息, 此类群通知消息的from字段的值为接受入群邀请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段members的值为接收入群邀请的群成员列表。
    • 如果拒绝入群邀请, 那么邀请你的人会收到一条类型为'rejectTeamInvite'系统通知, 此类系统通知的from字段的值为拒绝入群邀请的人的帐号, to字段的值为对应的群ID。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

对应的系统通知的 idServer

teamId String

群id

from String

邀请方的帐号

ps String <optional>

附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectTeamInvite({
    idServer: sysMsg.idServer,
    teamId: '123',
    from: 'zyy1',
    ps: '就不',
    done: rejectTeamInviteDone
});
function rejectTeamInviteDone(error, obj) {
    console.log('拒绝入群邀请' + (!error?'成功':'失败'), error, obj);
}

removeFromBlacklist(options)

从黑名单移除

  • 如果一个用户被从黑名单移除, 那么会重新收到此用户发送的消息
  • SDK内部调用nim.markInBlacklist来完成实际工作
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要从黑名单移除的账号

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.removeFromBlacklist({
    account: 'account',
    done: removeFromBlacklistDone
});
function removeFromBlacklistDone(error, obj) {
    console.log('从黑名单移除' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        removeFromBlacklist(obj);
    }
}

removeFromMutelist(options)

从静音列表移除

  • SDK只负责维护静音列表, 具体要根据静音列表进行的操作由开发者决定
  • SDK内部调用nim.markInMutelist来完成实际工作
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
account String

要从静音列表移除的账号

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.removeFromMutelist({
    account: 'account',
    done: removeFromMutelistDone
});
function removeFromMutelistDone(error, obj) {
    console.log('从静音列表移除' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        removeFromMutelist(obj);
    }
}

removeSuperTeamManagers(options)

移除群管理员

  • 移除群管理员后, 所有群成员会收到一条类型为'removeSuperTeamManagers'群通知消息。此类群通知消息的from字段的值为移除群管理员的人的帐号, to字段的值为对应的群ID, attach有一个字段accounts的值为被移除的管理员的帐号列表, attach有一个字段members的值为被移除管理员的群成员列表。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

要移除的管理员帐号列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.removeSuperTeamManagers({
    teamId: '123',
    accounts: ['a2', 'a3'],
    done: removeSuperTeamManagersDone
});
function removeSuperTeamManagersDone(error, obj) {
    console.log('移除群管理员' + (!error?'成功':'失败'), error, obj);
}

removeSuperTeamMembers(options)

踢人出群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

要移除的成员帐号列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.removeSuperTeamMembers({
    teamId: '123',
    accounts: ['a3', 'a4'],
    done: removeSuperTeamMembersDone
});
function removeSuperTeamMembersDone(error, obj) {
    console.log('踢人出群' + (!error?'成功':'失败'), error, obj);
}

removeTeamManagers(options)

移除群管理员

  • 移除群管理员后, 所有群成员会收到一条类型为'removeTeamManagers'群通知消息。此类群通知消息的from字段的值为移除群管理员的人的帐号, to字段的值为对应的群ID, attach有一个字段accounts的值为被移除的管理员的帐号列表, attach有一个字段members的值为被移除管理员的群成员列表。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

要移除的管理员帐号列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.removeTeamManagers({
    teamId: '123',
    accounts: ['a2', 'a3'],
    done: removeTeamManagersDone
});
function removeTeamManagersDone(error, obj) {
    console.log('移除群管理员' + (!error?'成功':'失败'), error, obj);
}

removeTeamMembers(options)

踢人出群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array.<String>

要移除的成员帐号列表

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.removeTeamMembers({
    teamId: '123',
    accounts: ['a3', 'a4'],
    done: removeTeamMembersDone
});
function removeTeamMembersDone(error, obj) {
    console.log('踢人出群' + (!error?'成功':'失败'), error, obj);
}

resetAllSessionUnread()

重置所有会话的未读数

  • 如果是已经存在的会话记录, 会将此会话未读数置为 0, 那么会收到onupdatesession回调
  • 之后此会话在收到消息之后依然会更新未读数
Returns:
Type
Void
Example
nim.resetAllSessionUnread('sessionId');

resetCurrSession()

重置当前会话

  • 重置当前会话后, 所有会话在收到消息之后会更新未读数
Example
nim.resetCurrSession();

resetSessionsUnread(sessionIds, done)

批量重置会话的未读数

  • 如果是已经存在的会话记录, 会将此会话未读数置为 0, 那么会收到onupdatesessions回调
  • 之后此会话在收到消息之后依然会更新未读数
  • 会同步至多端登录的其他端
Parameters:
Name Type Description
sessionIds String

会话ID数组

done function

done回调,第一个参数errerrnull时,表示成功

Returns:
Type
Void
Example
nim.resetSessionsUnread(['p2p-xx', 'p2p-yy'], (err) => {
 if (err) {
   console.log('重置失败:', err)
 }
});

resetSessionUnread(sessionId, done)

重置某个会话的未读数

  • 如果是已经存在的会话记录, 会将此会话未读数置为 0, 那么会收到onupdatesession回调
  • 之后此会话在收到消息之后依然会更新未读数
  • 会同步至多端登录的其他端
Parameters:
Name Type Description
sessionId String

会话ID

done function

done回调,第一个参数errerrnull时,表示成功;若err不为null,表示同步至其他端失败,第二个参数是失败的sessionId

Returns:
Type
Void
Example
nim.resetSessionUnread('sessionId', (err, failId) => {
 if (err) {
   console.log('重置失败:', err, '失败的sessionid是', failId)
 }
});

resetSuperTeamSessionsUnread(sessionIds, done)

批量重置超大群会话的未读数

  • 如果是已经存在的会话记录, 会将此会话未读数置为 0, 那么会收到onupdatesessions回调
  • 之后此会话在收到消息之后依然会更新未读数
  • 会同步至多端登录的其他端
Parameters:
Name Type Description
sessionIds String

会话ID数组

done function

done回调,第一个参数errerrnull时,表示成功

Returns:
Type
Void
Example
nim.resetSuperTeamSessionsUnread(['superTeam-xx', 'superTeam-yy'], (err) => {
 if (err) {
   console.log('重置失败:', err)
 }
});

rotateImage(options)

旋转图片

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

angle Int

旋转的角度, 正整数表示顺时针, 负整数表示逆时针, 必须为整数, 此方法内部会先将 angle 格式化为 [0, 360] 范围内的数字, 然后使用 Math.round 来格式化 angle

done done

结果回调函数, 成功时附上旋转后的图片的 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var rotateUrl = nim.rotateImage({
    url: url,
    angle: 90,
    done: rotateImageDone
});
function rotateImageDone(error, obj) {
    console.log('旋转图片' + (!error?'成功':'失败'), error, obj);
}

saveMsgsToLocal(options)

将消息存储至本地数据库

  • 若不支持数据库,算成功
  • SDK仅会主动存储离线、漫游、在线时收发的消息,其他消息开发者可根据需要调用该接口存储到本地数据库
  • 请考虑用户终端上数据库的容量合理使用、定时清除,避免出现爆仓等问题
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
msgs Array

要存储的消息数据,每条消息都应该至少包含idClient,并符合云信消息的结构

done function

结果回调函数

Example
nim.saveMsgsToLocal({
 msgs: msgs, // 要存储的消息
 done: err => console.log(err ? '存储失败' : '存储成功')
})

searchHistoryMsgs(options)

获取云端包含关键词的历史记录

  • 获取历史消息接口类似, 只是去掉了参数lastMsgId, 增加了参数keyword(要搜索的关键词)
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String

聊天对象, 账号或者群id

keyword String

待搜索的关键词

beginTime Number <optional>

时间戳, 开始时间, 精确到ms, 默认为0

endTime Number <optional>

时间戳, 结束时间, 精确到ms, 默认为服务器的当前时间

limit Number <optional>

本次查询的消息数量限制, 最多100条, 默认100条

reverse Boolean <optional>
false

默认false表示从endTime开始往前查找历史消息;
true表示从beginTime开始往后查找历史消息

asc Boolean <optional>
false

默认false表示返回的消息按时间逆序排序;
true表示按时间正序排序

done done

结果回调函数, 成功时会额外附上消息列表

Returns:
Type
Void
Example
nim.searchHistoryMsgs({
    scene: 'p2p',
    to: 'account',
    keyword: 'keyword',
    done: searchHistoryMsgsDone
});
function searchHistoryMsgsDone(error, obj) {
    console.log('获取云端包含关键词的历史记录' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        console.log(obj.msgs);
    }
}

searchLocal(options)

搜索本地内容,支持搜索本地会话和本地联系人

  • 可细分为大搜索和定向搜索
  • 传入参数keyPath时,SDK会根据键路径做定向搜索。比如keyPathsession时,只搜索会话;keyPathuser时,只搜索好友联系人;keyPathsession.lastMsg.type时,只搜索会话lastMsg消息类型
  • 没有传入参数keyPath时,SDK会进行大搜索:遍历搜索所有的keyPath
  • userkeyPath列表:['user.account', 'user.nick', 'user.alias']sessionkeyPath列表:['session.id', 'session.scene', 'session.lastMsg.type', 'session.lastMsg.text', 'session.localCustom', 'session.target.account', 'session.target.nick', 'session.target.alias', 'session.target.name']
  • 不使用数据库时,返回空
Parameters:
Name Type Description
options

查询参数

Properties
Name Type Argument Description
keyword

待搜索的关键词

keyPath <optional>

定点搜索时使用

done <optional>

结果回调函数,第二个参数是一个对象,它有三个属性userssessionsmsg, 分别是匹配到的用户、匹配到的会话和没匹配到时的原因


sendCustomMsg(options)

发送自定义消息

  • 自定义消息是消息类型的一种
  • 下面的代码用自定义消息实现了石头剪刀布游戏
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String | Number

接收方, 对方帐号或者群id

content String

自定义消息的消息内容, 推荐使用JSON格式构建

text String <optional>

可搜索字段, 没有实际含义。如调用getLocalMsgsAPI带有keyword时,会尝试匹配该字段

resend Boolean <optional>

是否是重发。如果是重发,还需要额外带上消息的flowstatus

idClient String <optional>

如果是重发, 那么需要带上之前生成的idClient来标记这条消息

custom String <optional>

扩展字段

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
pushContent String <optional>

自定义推送文案

pushPayload String <optional>

自定义的推送属性

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
apns Object <optional>

特殊推送选项, 只在群会话中使用

Properties
Name Type Argument Default Description
accounts Array.<String> <optional>

需要特殊推送的账号列表, 不填表示推送给当前会话内的所有用户

content String <optional>

需要特殊推送的文案, 不填的话默认为 pushContent

forcePush String <optional>
true

是否强制推送, true 表示即使推送列表中的胡勇屏蔽了当前会话(如静音), 仍能够推送当前这条内容给相应用户

isHistoryable Boolean <optional>
true

是否存储云端历史

isRoamingable Boolean <optional>
true

是否支持漫游

isSyncable Boolean <optional>
true

是否支持发送者多端同步

cc Boolean <optional>

是否支持抄送

isPushable Boolean <optional>
true

是否需要推送

isOfflinable Boolean <optional>
true

是否要存离线

isUnreadable Boolean <optional>
true

是否计入消息未读数

needPushNick Boolean <optional>
true

是否需要推送昵称

isLocal Boolean <optional>
false

是否是本地消息

localFrom String <optional>

本地消息的发送方,默认是当前用户

  • 只有发送本地消息时,才可自定义发送方
  • true表示本地消息, 那么SDK并不会发送此条消息, 而是直接调用回调表示发送成功, 并更新对应的会话
replyMsg Object <optional>

要回复的消息对象,表示当前消息是对某条消息的回复

yidunAntiCheating String <optional>

易盾反作弊字段,长度限制1024,JSON字符串格式。如:"{"email":"test@163.com","phone":"12345678901","token":"1234","extension":"hello"}"

yidunAntiSpamExt String <optional>

易盾反作弊扩展字段字段,2021-08-09 追加。限制 JSON 格式字符串,长度上限 1024

subType Interger <optional>

消息子类型,格式为大于0的整数,开发者可自定义

env String <optional>

环境变量,用于指向不同的抄送、第三方回调等配置

done done

结果回调函数

Returns:
Type
Message
Example
var value = Math.ceil(Math.random()*3);
var content = {
    type: 1,
    data: {
        value: value
    }
};
var msg = nim.sendCustomMsg({
    scene: 'p2p',
    to: 'account',
    content: JSON.stringify(content),
    done: sendMsgDone
});
console.log('正在发送p2p自定义消息, id=' + msg.idClient);
pushMsg(msg);

sendCustomSysMsg(options)

发送自定义系统通知

  • 开发者可以向其他用户或群发送自定义通知。
  • 自定义系统通知和自定义消息的区别如下
    • 自定义消息属于消息, 会存储在云信的消息数据库中, 需要跟其他消息一同展现给用户。
    • 自定义系统通知属于系统通知, 用于第三方通知自己, 不会存储在云信的数据库中, SDK不会解析这些通知, SDK仅仅负责传递这些通知。
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景跟消息场景的一样, 分为p2p(点对点)team(群)superTeam(超大群)

to String | Number

接收方, 帐号或者群id

content String

自定义系统通知的内容, 推荐使用JSON格式构建

apnsText String <optional>

apns推送文案, 仅对接收方为iOS设备有效

pushPayload String <optional>

自定义系统通知的推送属性

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
sendToOnlineUsersOnly Boolean <optional>
true

是否只发送给在线用户。
true时只发送给在线用户, 如果接收方不在线, 这条通知将被丢弃。
适合发送即时通知, 比如正在输入。
false时假如接收方在线, 那么会立即收到该通知,
假如接收方不在线, 会在其上线后推送过去。

cc Boolean <optional>

是否抄送

env String <optional>

环境变量,用于指向不同的抄送、第三方回调等配置

isPushable Boolean <optional>
true

是否需要推送

needPushNick Boolean <optional>
false

是否需要推送昵称

done done

结果回调函数

See:
Returns:

SDK生成的ID

Type
String
Example
var content = {
    type: 'type',
    value: 'value'
};
content = JSON.stringify(content);
var msgId = nim.sendCustomSysMsg({
    scene: 'p2p',
    to: 'account',
    content: content,
    sendToOnlineUsersOnly: false,
    apnsText: content,
    done: sendCustomSysMsgDone
});
console.log('正在发送p2p自定义系统通知, id=' + msgId);
function sendCustomSysMsgDone(error, msg) {
    console.log(error);
    console.log(msg);
    console.log('发送' + msg.scene + '自定义系统通知' + (!error?'成功':'失败') + ', id=' + msg.idClient);
}

sendFile(options)

发送文件消息

  • 文件消息是消息类型的一种
  • 开发者可以直接发送文件消息
    • 支持以下几种场景
      • 通过参数fileInput传入文件选择 dom 节点或者节点 ID, SDK 会读取该节点下的文件, 在上传完成前请不要操作该节点下的文件
      • 通过参数blob传入 Blob 对象
      • 通过参数dataURL传入包含 MIME type 和 base64 数据的 data URL, 此用法需要浏览器支持 Blob
    • SDK会先将文件上传到文件服务器, 然后把拿到的文件对象在uploaddone回调中传给用户, 然后将其拼装成文件消息发送出去。
  • 开发者也可以先预览文件来获取文件对象, 然后调用此接口发送文件消息。
    • 通过参数file传入文件
  • 直接发送文件消息的话会在beforesend回调里面传入SDK生成的idClient, 如果先预览文件再发送, 那么此接口会直接返回idClient
  • 参数type指定了要发送的文件类型, 包括图片、音频、视频和普通文件, 对应的值分别为'image''audio''video''file', 不传默认为'file'
  • 图片、音频、视频和普通文件的区别在于具体的文件信息不一样, 具体字段请参考
    • 图片对象
    • 音频对象
    • 视频对象
    • 文件对象
    • 机器人对象
  • 文件大小限制为最大100M
    • 高级浏览器会在上传前就检测文件大小
    • IE8和IE9会在上传完成后检测文件大小
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String | Number

接收方, 对方帐号或者群id

type String <optional>

文件过滤器,
'image'会过滤掉非图片的文件, 'audio'过滤掉非音频, 'video'会过滤掉非视频的文件,
IE8/IE9 不支持文件过滤

fileInput String | Node <optional>

文件选择 dom 节点或者节点 ID, SDK 会读取该节点下的文件, 在上传完成前请不要操作该节点下的文件

maxSize Number <optional>

限制文件的大小,单位字节

commonUpload Boolean <optional>

使用普通上传(最大100M文件)

blob Blob <optional>

Blob 对象

dataURL String <optional>

MIME type 和 base64 数据的 data URL

file Array <optional>

文件对象, 开发者可以通过预览文件拿到文件对象

filePath String <optional>

仅供小程序(5.1.0+)、nodejs(5.4.0+)、react-native(5.3.0+)使用, 举例小程序通过 wx.chooseImage 或者 wx.startRecord 拿到临时文件路径 filePath 再传入。

resend Boolean <optional>
false

是否是重发。如果是重发,还需要额外带上消息的flowstatus

beginupload function <optional>

开始上传图片的回调

  • 如果开发者传入 fileInput, 在此回调之前不能修改 fileInput
  • 在此回调之后可以取消图片上传, 此回调会接收一个参数 upload, 调用 upload.abort(); 来取消文件上传
uploadprogress uploadprogress <optional>

上传进度, IE9以下不支持上传进度

uploaddone uploaddone <optional>

上传完成回调

  • 此回调接收两个参数, error 和 obj
  • 如果出错, error 包含详细的错误信息
  • 如果上传成功, obj 包含详细的文件信息
beforesend beforesend <optional>

发送文件消息之前的回调函数

resend Boolean <optional>

是否是重发。如果是重发,还需要额外带上消息的flowstatus

idClient String <optional>

如果是重发, 那么需要带上之前生成的idClient来标记这条消息

custom String <optional>

扩展字段

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
pushContent String <optional>

自定义推送文案

pushPayload String <optional>

自定义的推送属性

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
apns Object <optional>

特殊推送选项, 只在群会话中使用

Properties
Name Type Argument Default Description
accounts Array.<String> <optional>

需要特殊推送的账号列表, 不填表示推送给当前会话内的所有用户

content String <optional>

需要特殊推送的文案, 不填的话默认为 pushContent

forcePush String <optional>
true

是否强制推送, true 表示即使推送列表中的胡勇屏蔽了当前会话(如静音), 仍能够推送当前这条内容给相应用户

isHistoryable Boolean <optional>
true

是否存储云端历史

isRoamingable Boolean <optional>
true

是否支持漫游

isSyncable Boolean <optional>
true

是否支持发送者多端同步

cc Boolean <optional>

是否支持抄送

isPushable Boolean <optional>
true

是否需要推送

isOfflinable Boolean <optional>
true

是否要存离线

isUnreadable Boolean <optional>
true

是否计入消息未读数

needPushNick Boolean <optional>
true

是否需要推送昵称

isLocal Boolean <optional>
false

是否是本地消息

  • true表示本地消息, 那么SDK并不会发送此条消息, 而是直接调用回调表示发送成功, 并更新对应的会话
localFrom String <optional>

本地消息的发送方,默认是当前用户

  • 只有发送本地消息时,才可自定义发送方
nosScenes String <optional>

存储场景,不传默认实例化配置

nosSurvivalTime Number <optional>

存储有效时间,不传默认实例化配置 不得小于一天,单位秒

replyMsg Object <optional>

要回复的消息对象,表示当前消息是对某条消息的回复

yidunAntiCheating String <optional>

易盾反作弊字段,长度限制1024,JSON字符串格式。如:"{"email":"test@163.com","phone":"12345678901","token":"1234","extension":"hello"}"

yidunAntiSpamExt String <optional>

易盾反作弊扩展字段字段,2021-08-09 追加。限制 JSON 格式字符串,长度上限 1024

subType Interger <optional>

消息子类型,格式为大于0的整数,开发者可自定义

env String <optional>

环境变量,用于指向不同的抄送、第三方回调等配置

done done

结果回调函数

Returns:
  • 如果提供了参数fileInput, 那么先上传文件到服务器再发送, 不会返回消息, 会在beforesend里面返回消息.
  • 如果提供了参数file, 那么直接发送文件消息, 返回消息
Type
Void | Message
Example
nim.sendFile({
    scene: 'p2p',
    to: 'account',
    type: 'image',
    fileInput: fileInput,
    uploadprogress: function(obj) {
        console.log('文件总大小: ' + obj.total + 'bytes');
        console.log('已经上传的大小: ' + obj.loaded + 'bytes');
        console.log('上传进度: ' + obj.percentage);
        console.log('上传进度文本: ' + obj.percentageText);
    },
    uploaddone: function(error, file) {
        console.log('上传' + (!error?'成功':'失败'), error, file);
    },
    beforesend: function(msg) {
        console.log('正在发送p2p image消息, id=' + msg.idClient);
        pushMsg(msg);
    },
    done: sendMsgDone
});

sendGeo(options)

发送地理位置消息

  • 地理位置消息是消息类型的一种, geo参数请参考地理位置对象
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String | Number

接收方, 对方帐号或者群id

geo Object

地理位置对象

Properties
Name Type Description
lng Number

经度

lat Number

纬度

title String

地址描述

resend Boolean <optional>

是否是重发。如果是重发,还需要额外带上消息的flowstatus

idClient String <optional>

如果是重发, 那么需要带上之前生成的idClient来标记这条消息

custom String <optional>

扩展字段

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
pushContent String <optional>

自定义推送文案

pushPayload String <optional>

自定义的推送属性

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
apns Object <optional>

特殊推送选项, 只在群会话中使用

Properties
Name Type Argument Default Description
accounts Array.<String> <optional>

需要特殊推送的账号列表, 不填表示推送给当前会话内的所有用户

content String <optional>

需要特殊推送的文案, 不填的话默认为 pushContent

forcePush String <optional>
true

是否强制推送, true 表示即使推送列表中的用户屏蔽了当前会话(如静音), 仍能够推送当前这条内容给相应用户

isHistoryable Boolean <optional>
true

是否存储云端历史

isRoamingable Boolean <optional>
true

是否支持漫游

isSyncable Boolean <optional>
true

是否支持发送者多端同步

cc Boolean <optional>

是否支持抄送

isPushable Boolean <optional>
true

是否需要推送

isOfflinable Boolean <optional>
true

是否要存离线

isUnreadable Boolean <optional>
true

是否计入消息未读数

needPushNick Boolean <optional>
true

是否需要推送昵称

isLocal Boolean <optional>
false

是否是本地消息

  • true表示本地消息, 那么SDK并不会发送此条消息, 而是直接调用回调表示发送成功, 并更新对应的会话
localFrom String <optional>

本地消息的发送方,默认是当前用户

  • 只有发送本地消息时,才可自定义发送方
replyMsg Object <optional>

要回复的消息对象,表示当前消息是对某条消息的回复

yidunAntiCheating String <optional>

易盾反作弊字段,长度限制1024,JSON字符串格式。如:"{"email":"test@163.com","phone":"12345678901","token":"1234","extension":"hello"}"

yidunAntiSpamExt String <optional>

易盾反作弊扩展字段字段,2021-08-09 追加。限制 JSON 格式字符串,长度上限 1024

subType Interger <optional>

消息子类型,格式为大于0的整数,开发者可自定义

env String <optional>

环境变量,用于指向不同的抄送、第三方回调等配置

done done

结果回调函数

Returns:
Type
Message
Example
var msg = nim.sendGeo({
    scene: 'p2p',
    to: 'account',
    geo: {
        lng: '116.3833',
        lat: '39.9167',
        title: 'Beijing'
    },
    done: sendMsgDone
});
console.log('正在发送p2p geo消息, id=' + msg.idClient);
pushMsg(msg);

sendMsgReceipt(options)

发送消息已读回执

  • 目前只支持'p2p'会话
  • 如果没有传入消息, 则直接返回成功
  • 如果已经发送过比传入的消息的时间戳大的已读回执, 那么直接返回成功
Parameters:
Name Type Description
options Object

参数

Properties
Name Type Description
msg IMMessage

要发送已读回执的会话的最后一条消息, 可以直接通过session.lastMsg来获取此消息

done function

结果回调函数

Returns:
Type
Void
Example
nim.sendMsgReceipt({
    msg: session.lastMsg,
    done: sendMsgReceiptDone
});
function sendMsgReceiptDone(error, obj) {
    console.log('发送消息已读回执' + (!error?'成功':'失败'), error, obj);
}

sendRobotMsg()

此api即将废弃!原因:机器人消息服务已下线。

给机器人发送消息

  • 机器人消息是消息类型的一种
  • 机器人消息类型分为type为robot

sendTeamMsgReceipt(options)

标记群组消息已读

  • 支持数据库且带有idClient参数时,标记已读完成后,SDK会自动给消息添加hasRead: true字段
  • 对于已有hasRead: true字段的消息,则无需重复标记已读
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamMsgReceipts Array.<Object>

已读消息对象

teamMsgReceipt.teamId String

群序号,必传

teamMsgReceipt.idServer String

消息的idServer,必传

teamMsgReceipt.idClient String <optional>

消息的idClient

Returns:
Type
Void
Example
nim.sendTeamMsgReceipt({
  teamMsgReceipts: [{
     teamId: '1027484',
     idServer: '68953284018302',
     idClient: '917b149176b6570c0d5b797a50c36e8d'
  }],
  done: sendTeamMsgReceiptDone
})
function sendTeamMsgReceiptDone (error, obj) {
  console.log('标记群组消息已读' + (!error?'成功':'失败'));
}

sendText(options)

发送文本消息

  • 文本消息是消息的一种, 请参考消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String

接收方, 对方帐号或者群id

text String

文本消息内容

resend Boolean <optional>

是否是重发。如果是重发,还需要额外带上 消息的flowstatus

idClient String <optional>

如果是重发, 那么需要带上之前生成的idClient来标记这条消息

custom String <optional>

扩展字段

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
pushContent String <optional>

自定义推送文案

pushPayload String <optional>

自定义的推送属性

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
needPushNick Boolean <optional>
true

是否需要推送昵称

isHistoryable Boolean <optional>
true

是否存储云端历史

isRoamingable Boolean <optional>
true

是否支持漫游

isSyncable Boolean <optional>
true

是否支持发送者多端同步

cc Boolean <optional>

是否支持抄送

isPushable Boolean <optional>
true

是否需要推送

isOfflinable Boolean <optional>
true

是否要存离线

isUnreadable Boolean <optional>
true

是否计入消息未读数

apns Object <optional>

特殊推送选项, 只在群会话中使用

Properties
Name Type Argument Default Description
accounts Array.<String> <optional>

需要特殊推送的账号列表, 不填表示推送给当前会话内的所有用户

content String <optional>

需要特殊推送的文案, 不填的话默认为 pushContent

forcePush String <optional>
true

是否强制推送, true 表示即使推送列表中的胡勇屏蔽了当前会话(如静音), 仍能够推送当前这条内容给相应用户

isLocal Boolean <optional>
false

是否是本地消息

  • true表示本地消息, 那么SDK并不会发送此条消息, 而是直接调用回调表示发送成功, 并更新对应的会话
localFrom String <optional>

本地消息的发送方,默认是当前用户

  • 只有发送本地消息时,才可自定义发送方
needMsgReceipt Boolean <optional>
false

是否需要业务已读(包含该字段且为true即表示需要)

clientAntiSpam Boolean <optional>
false

是否需要过客户端反垃圾

yidunEnable Boolean <optional>
false

是否需要使用自定义反垃圾字段,如为true,可通过antiSpamContent指定自定义字段

antiSpamContent String <optional>

在开启yidunEnable后, 开发者自定义的反垃圾字段(json格式),格式如下:{"type": 1, "data": "custom content"} 字段说明:type:1.文本,2.图片,3视频,data内容:文本内容or图片地址or视频地址

antiSpamBusinessId String <optional>

用户配置的对某条单条消息另外反垃圾的业务ID

antiSpamUsingYidun Boolean <optional>
false

单条消息是否需要易盾反垃圾

needUpdateSession Boolean <optional>
true

是否需要刷新服务器会话列表,默认是(请注意区分两种会话)

replyMsg Object <optional>

要回复的消息对象,表示当前消息是对某条消息的回复

yidunAntiCheating String <optional>

易盾反作弊字段,长度限制1024,JSON字符串格式。如:"{"email":"test@163.com","phone":"12345678901","token":"1234","extension":"hello"}"

yidunAntiSpamExt String <optional>

易盾反作弊扩展字段字段,2021-08-09 追加。限制 JSON 格式字符串,长度上限 1024

subType Interger <optional>

消息子类型,格式为大于0的整数,开发者可自定义

env String <optional>

环境变量,用于指向不同的抄送、第三方回调等配置

done done

结果回调函数

Returns:
Type
Message
Example
var msg = nim.sendText({
    scene: 'p2p',
    to: 'account',
    text: 'hello',
    done: sendMsgDone
});
console.log('正在发送p2p text消息, id=' + msg.idClient);
pushMsg(msg);
function sendMsgDone(error, msg) {
    console.log('发送' + msg.scene + ' ' + msg.type + '消息' + (!error?'成功':'失败') + ', id=' + msg.idClient, error, msg);
}

sendTipMsg(options)

发送提醒消息

  • 提醒消息是消息类型的一种
  • 提醒消息用于会话内的状态提醒,如进入会话时出现的欢迎消息,或者会话命中敏感词后的提示消息等等.
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
scene String

场景

to String | Number

接收方, 对方帐号或者群id

tip String

提醒内容

resend Boolean <optional>

是否是重发。如果是重发,还需要额外带上消息的flowstatus

idClient String <optional>

如果是重发, 那么需要带上之前生成的idClient来标记这条消息

custom String <optional>

扩展字段

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
pushContent String <optional>

自定义推送文案

pushPayload String <optional>

自定义的推送属性

  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
apns Object <optional>

特殊推送选项, 只在群会话中使用

Properties
Name Type Argument Default Description
accounts Array.<String> <optional>

需要特殊推送的账号列表, 不填表示推送给当前会话内的所有用户

content String <optional>

需要特殊推送的文案, 不填的话默认为 pushContent

forcePush String <optional>
true

是否强制推送, true 表示即使推送列表中的胡勇屏蔽了当前会话(如静音), 仍能够推送当前这条内容给相应用户

isHistoryable Boolean <optional>
true

是否存储云端历史

isRoamingable Boolean <optional>
true

是否支持漫游

isSyncable Boolean <optional>
true

是否支持发送者多端同步

cc Boolean <optional>

是否支持抄送

isPushable Boolean <optional>
true

是否需要推送

isOfflinable Boolean <optional>
true

是否要存离线

isUnreadable Boolean <optional>
true

是否计入消息未读数

needPushNick Boolean <optional>
true

是否需要推送昵称

isLocal Boolean <optional>
false

是否是本地消息

  • true表示本地消息, 那么SDK并不会发送此条消息, 而是直接调用回调表示发送成功, 并更新对应的会话
localFrom String <optional>

本地消息的发送方,默认是当前用户

  • 只有发送本地消息时,才可自定义发送方
replyMsg Object <optional>

要回复的消息对象,表示当前消息是对某条消息的回复

yidunAntiCheating String <optional>

易盾反作弊字段,长度限制1024,JSON字符串格式。如:"{"email":"test@163.com","phone":"12345678901","token":"1234","extension":"hello"}"

yidunAntiSpamExt String <optional>

易盾反作弊扩展字段字段,2021-08-09 追加。限制 JSON 格式字符串,长度上限 1024

subType Interger <optional>

消息子类型,格式为大于0的整数,开发者可自定义

env String <optional>

环境变量,用于指向不同的抄送、第三方回调等配置

done done

结果回调函数

Returns:
Type
Message
Example
var msg = nim.sendTipMsg({
    scene: 'p2p',
    to: 'account',
    tip: 'tip content',
    done: sendMsgDone
});
console.log('正在发送p2p提醒消息, id=' + msg.idClient);
pushMsg(msg);

setCurrSession(sessionId)

设置当前会话

  • 设置后, 当前会话未读数会被置为 0, 同时开发者会收到 onupdatesession 回调
  • 之后此会话在收到消息之后不会更新未读数
  • 传空字符串的话, 重置当前会话为空
Parameters:
Name Type Description
sessionId String

会话ID

Returns:
Type
Void
Example
nim.setCurrSession('sessionId');

setOptions(options)

更新配置, 参数格式跟 NIM.getInstance 保持一致

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
token String

帐号的 token, 用于建立连接

Example
// 更新 token 的例子
nim.setOptions({
    token: 'newToken'
});

stripImageMeta(options)

去除图片元信息

  • 只支持通过预览文件发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • 去除元信息后的图片将不包含 EXIF 信息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

done done

结果回调函数, 成功时附上 interlace 后的图片 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var interlaceUrl = nim.stripImageMeta({
    url: url,
    strip: true,
    done: stripImageMetaDone
});
function stripImageMetaDone(error, obj) {
    console.log('去除图片元信息' + (!error?'成功':'失败'), error, obj);
}

thumbnailImage(options)

生成缩略图

  • 只支持通过预览文件发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • width/height 限制了缩略图的尺寸
    • width/height 必须大于等于 0, 不能同时为 0, 必须小于 4096
  • 不同模式下生成的缩略图是不一样的, 目前支持以下三种模式
    • 'cover': 原图片等比缩略, 缩略图一边等于请求的尺寸, 另一边大于请求的尺寸, 即缩略图刚好能覆盖住尺寸为 width*height 的矩形
    • 'contain': 原图片等比缩略, 缩略图一边等于请求的尺寸, 另一边小于请求的尺寸, 即尺寸为 width*height 的矩形刚好能覆盖住缩略图
    • 'crop': 先等比缩略原图片, 使得一边等于请求的尺寸, 另一边大于请求的尺寸, 然后对大于请求尺寸的那条边进行裁剪, 使得最终的图片大小刚好等于请求的尺寸
  • 如果缩略图尺寸大于图片尺寸, 默认情况下图片不会被放大, 可以传入参数enlarge=true来放大图片
  • 'crop' 模式下可以传入参数 axis.x 或 axis.y 来控制最后一步裁剪的位置
    • x/y 必须为整数, 取值范围为 0-10, 此方法内部使用 Math.round 来格式化 x/y
    • x 为 0 时表示裁取最左端, x 为 10 时表示裁取最右端
    • y 为 0 时表示裁取最上端, y 为 10 时表示裁取最下端
    • x/y 默认值均为 5, 即裁取正中间
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Default Description
url String

原图 url

width Int <optional>

缩略图的最大宽度, 必须为整数, 此方法内部使用 Math.round 来格式化 width/height

height Int <optional>

缩略图的最大高度, 必须为整数, 此方法内部使用 Math.round 来格式化 width/height

mode String

缩略模式, 目前支持以下三种模式, 请参考上面的描述

  • 'cover'
  • 'contain'
  • 'crop'
axis.x Int <optional>

'crop' 模式下控制最后一步裁剪的位置, 请参考上面的描述

axis.y Int <optional>

'crop' 模式下控制最后一步裁剪的位置, 请参考上面的描述

enlarge Boolean <optional>
false

当图片尺寸小于要缩略的尺寸时, 是否放大图片, 默认false不放大

done done

结果回调函数, 成功时附上缩略后的图片 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var thumbnailUrl = nim.thumbnailImage({
    url: url,
    mode: 'cover',
    width: 80,
    height: 100,
    done: thumbnailImageDone
});
function thumbnailImageDone(error, obj) {
    console.log('生成缩略图' + (!error?'成功':'失败'), error, obj);
}

transferSuperTeam(options)

转让群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

account String

新群主的帐号

leave Boolean

转让群的同时是否离开群

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.transferSuperTeam({
    teamId: '123',
    account: 'zyy2',
    leave: false,
    done: transferOwnerDone
});
function transferOwnerDone(error, obj) {
    console.log('转让群' + (!error?'成功':'失败'), error, obj);
}

transferTeam(options)

转让群

  • 转让群后, 所有群成员会收到一条类型为'transferTeam'群通知消息。此类群通知消息的from字段的值为转让群的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段account的值为为新群主的帐号, attach有一个字段members的值为包含新旧群主的群成员列表。
  • 如果转让群的同时离开群, 那么相当于调用主动退群来离开群, 所有群成员会再收到一条类型为'leaveTeam'群通知消息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

account String

新群主的帐号

leave Boolean

转让群的同时是否离开群

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.transferTeam({
    teamId: '123',
    account: 'zyy2',
    leave: false,
    done: transferOwnerDone
});
function transferOwnerDone(error, obj) {
    console.log('转让群' + (!error?'成功':'失败'), error, obj);
}

updateCollect(options, done)

更新收藏

  • 只允许更新扩展字段custom
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
collect Object

新的Collect对象,至少要包含idcreateTime和更新后的custom三个字段;如要删除custom,可不填

done function

结果回调函数,第一个参数是error,第二个参数有一个属性collect,代表更新后的收藏对象


updateFriend(options)

更新好友

  • 开发者可以用此接口来更新好友的备注
  • 开发者也可以使用JSON格式的扩展字段来进行扩展
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
account String

要更新的好友的account

alias String <optional>

备注

custom String <optional>

扩展字段, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.updateFriend({
    account: 'account',
    alias: 'alias',
    custom: 'custom',
    done: updateFriendDone
});
function updateFriendDone(error, obj) {
    console.log('更新好友' + (!error?'成功':'失败'), error, obj);
    if (!error) {
        onUpdateFriend(obj);
    }
}

updateInfoInSuperTeam(options)

修改个人群成员信息 (修改自己的群属性)

目前支持修改的属性有这些

  • nickInTeam: 自己在群里面的群昵称
    • 更新昵称后, 所有其它在线的群成员会收到初始化SDK时传入的onUpdateSuperTeamMember回调。
  • muteTeam: 是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定
  • custom: 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串

修改自己的群属性后,所有群成员会收到SDK初始化时设置的onUpdateSuperTeamMember回调

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

nickInTeam String <optional>

在群里面的昵称

muteTeam Boolean <optional>

是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定

custom Boolean <optional>

第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串

done done

结果回调函数

Returns:
Type
Void
Example
nim.updateInfoInSuperTeam({
    teamId: '123',
    // 此参数为可选参数
    nickInTeam: '群昵称',
    // 静音群, 此参数为可选参数
    muteTeam: true,
    // 第三方扩展字段
    custom: '{}'
    done: updateInfoInSuperTeamDone
});
function updateInfoInSuperTeamDone(error, obj) {
    console.log('修改自己的群属性' + (!error?'成功':'失败'), error, obj);
}

updateInfoInTeam(options)

修改自己的群属性

目前支持修改的属性有这些

  • nickInTeam: 自己在群里面的群昵称
    • 更新昵称后, 所有其它在线的群成员会收到初始化SDK时传入的onupdateteammember回调。
  • muteTeam: 是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定, 设置之后可以调用接口NIM#notifyForNewTeamMsg来查询是否需要群消息通知
  • custom: 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

nickInTeam String <optional>

在群里面的昵称

muteTeam Boolean <optional>

是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定

custom Boolean <optional>

第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.updateInfoInTeam({
    teamId: '123',
    // 此参数为可选参数
    // nickInTeam: '群昵称',
    // 静音群, 此参数为可选参数
    // muteTeam: true,
    // 第三方扩展字段
    // custom: '{}'
    done: updateInfoInTeamDone
});
function updateInfoInTeamDone(error, obj) {
    console.log('修改自己的群属性' + (!error?'成功':'失败'), error, obj);
}

updateLocalMsg(options)

更新本地消息

  • 更新 idClient 对应的本地消息
  • 如果不支持数据库, 算成功
  • 如果对应的消息不存在, 算成功, 返回 null
  • 这些字段只会被更新到本地数据库, 不会被更新到服务器上
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idClient String

idClient

localCustom String <optional>

自定义字段

done function

结果回调函数, 成功时会额外附上消息

Returns:
Type
Void
Example
nim.updateLocalMsg({
    idClient: 'p2p-account',
    localCustom: '{"key","value"}',
    done: updateLocalMsgDone
});
function updateLocalMsgDone(error, obj) {
    console.log('更新本地消息' + (!error?'成功':'失败'), error, obj);
}

updateLocalSession(options)

更新本地会话

  • 更新 id 对应的本地会话
  • 如果不支持数据库, 算成功
  • 如果对应的会话不存在, 算成功, 返回 null
  • 这些字段只会被更新到本地数据库, 不会被更新到服务器上
  • 目前只允许更新 localCustom
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
id String

id

localCustom String <optional>

自定义字段

done function

结果回调函数, 成功时会额外附上会话

Returns:
Type
Void
Example
nim.updateLocalSession({
    id: 'p2p-account',
    localCustom: '{"key","value"}',
    done: updateLocalSessionDone
});
function updateLocalSessionDone(error, obj) {
    console.log('更新本地会话' + (!error?'成功':'失败'), error, obj);
}

updateLocalSysMsg(options)

更新本地系统通知

  • 更新 idServer 对应的本地系统通知
  • 如果不支持数据库, 算成功
  • 如果对应的系统通知不存在, 算成功, 返回 null
  • 这些字段只会被更新到本地数据库, 不会被更新到服务器上
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
idServer String

idServer

state String <optional>

处理状态

localCustom String <optional>

自定义字段

done function

结果回调函数, 成功时会额外附上系统通知

Returns:
Type
Void
Example
nim.updateLocalSysMsg({
    idServer: '1234',
    status: 'bingo',
    localCustom: '{"key","value"}',
    done: updateLocalSysMsgDone
});
function updateLocalSysMsgDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('更新本地系统通知' + (!error?'成功':'失败'));
}

updateMsgPin(options, done)

更新PIN消息的扩展字段

  • 若成功,会触发相关人员的onPinMsgChange初始化回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
msg Object

被PIN的消息对象

pinCustom String <optional>

要更新的PIN扩展字段

done function

结果回调函数,第一个参数是error,代表是否有错


updateMuteStateInTeam(options)

更新群成员禁言状态

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

account String

要修改昵称的群成员的帐号

mute Boolean

是否要禁言

done done

结果回调函数

Returns:
Type
Void
Example
nim.updateMuteStateInTeam({
    teamId: '123',
    account: 'a',
    mute: true,
    done: updateMuteStateInTeamDone
})
function updateMuteStateInTeamDone(error, obj) {
    console.log('更新群成员禁言状态' + (!error?'成功':'失败'), error, obj);
}

updateMyInfo(options)

更新我的名片

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
nick String

昵称

avatar String

头像

sign String

签名

gender String

性别

email String

邮箱

birth String

生日

tel String

手机号

custom String

扩展字段

antiSpamBusinessId String

用户配置的对某些资料内容另外的反垃圾的业务ID

See:
Returns:
Type
Void
Example
nim.updateMyInfo({
    nick: 'newNick',
    avatar: 'http://newAvatar',
    sign: 'newSign',
    gender: 'male',
    email: 'new@email.com',
    birth: '1900-01-01',
    tel: '13523578129',
    custom: '{type: "newCustom", value: "new"}',
    antiSpamBusinessId:'{"textbid":"","picbid":""}'
    done: updateMyInfoDone
});
function updateMyInfoDone(error, user) {
    console.log('更新登录用户的名片' + (!error?'成功':'失败'), error, user);
    if (!error) {
        onUpdateMyInfo(user);
    }
}

updateNickInSuperTeam(options)

修改别人的群昵称

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

account String

要修改昵称的超大群群成员的帐号

nickInTeam String

群昵称

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.updateNickInSuperTeam({
    teamId: '123',
    account: 'a2',
    nickInTeam: '群昵称',
    done: updateNickInSuperTeamDone
});
function updateNickInSuperTeamDone(error, obj) {
    console.log('修改自己的群属性' + (!error?'成功':'失败'), error, obj);
}

updateNickInTeam(options)

修改别人的群昵称

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

account String

要修改昵称的群成员的帐号

nickInTeam String

群昵称

done done

结果回调函数

See:
Returns:
Type
Void
Example
nim.updateNickInTeam({
    teamId: '123',
    account: 'a2',
    nickInTeam: '群昵称',
    done: updateNickInTeamDone
});
function updateNickInTeamDone(error, obj) {
    console.log('修改自己的群属性' + (!error?'成功':'失败'), error, obj);
}

updatePushNotificationMultiportConfig(options)

更新多端推送配置选项

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
shouldPushNotificationWhenPCOnline Boolean <optional>

桌面端在线时是否需要发送推送给手机端

Returns:
Type
Void

updateServerSession(options)

更新服务器上某个会话的扩展字段

  • 指更新服务器上会话列表中的会话,不是漫游会话
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
scene String

会话场景

to String

对方账号或群ID

extra String

要更新的扩展字段

Example
nim.updateServerSession({
    scene: 'p2p',
    to: 'account',
    extra: 'xxxx',
    done: function (obj) {
       console.log('更新会话' + (!error?'成功':'失败'), error, obj);
    }
});

updateSessionsWithMoreRoaming(options)

更新漫游消息不全的会话的漫游时间戳

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
msg Object

完整漫游消息列表中最早的一条消息,即在这条消息之后的本地消息列表是完整的,msg至少应有timeidServerfromtoscene五个属性

done function

updateStickTopSession(options, done)

更新置顶会话的扩展字段

  • 若成功,会触发onupdatesession回调
  • 多端登录时,会触发多端的onupdatesession回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
id String

会话ID

topCustom String <optional>

扩展字段

done function

结果回调函数,第一个参数是error,代表是否有错


updateSuperTeam(options)

更新群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

name String <optional>

群名字

avatar String <optional>

群头像

intro String <optional>

群简介

announcement String <optional>

群公告

joinMode String <optional>

超大群加入方式

beInviteMode String <optional>

超大群被邀请模式

antiSpamBusinessId String <optional>

用户配置的对某些资料内容另外的反垃圾的业务ID

custom String <optional>

扩展字段

done done

结果回调函数

Returns:
Type
Void
Example
nim.updateSuperTeam({
    teamId: '123',
    name: '群名字',
    avatar: 'avatar',
    intro: '群简介',
    announcement: '群公告',
    custom: '自定义字段',
    done: updateSuperTeamDone
});
function updateSuperTeamDone(error, team) {
    console.log('更新群' + (!error?'成功':'失败'), error, team);
}

updateSuperTeamMembersMute(options)

更新群成员禁言状态

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

群id

accounts Array

要修改禁言的超大群成员帐号列表,每次最多修改十个

mute Boolean

是否要禁言

done done

结果回调函数

Returns:
Type
Void
Example
nim.updateSuperTeamMembersMute({
    teamId: '123',
    accounts: ['ss', 'aa'],
    mute: true,
    done: updateSuperTeamMembersMuteDone
})
function updateSuperTeamMembersMuteDone(error, obj) {
    console.log('更新群成员禁言状态' + (!error?'成功':'失败'), error, obj);
}

updateSuperTeamMute(options)

超大群禁言

  • 更新超大群的禁言状态后,所有超大群群成员会收到一条类型为'updateSuperTeam'群通知消息。此类群通知消息的from字段的值为操作方, to字段的值为对应的群ID, attach有一个字段team的值为对应的超大群对象, attach有一个字段users的值为对应的操作人列表
  • 更新超大群的禁言状态后, 会收到SDK初始化时设置的onUpdateSuperTeam回调
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
teamId String

待禁言群的群id

mute String

是否禁言

Returns:
Type
Void
Example
nim.updateSuperTeamMute({
   teamId: '1027484',
   mute: true,
   done: updateSuperTeamMuteDone
})
function updateSuperTeamMuteDone (error, obj) {
  console.log('禁言群' + (!error?'成功':'失败'));
}

updateTeam(options)

更新群

Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Argument Description
teamId String

群id

name String <optional>

群名字

avatar String <optional>

群头像

intro String <optional>

群简介

announcement String <optional>

群公告

joinMode String <optional>

群加入方式

beInviteMode String <optional>

群被邀请模式

inviteMode String <optional>

群邀请模式

updateTeamMode String <optional>

群信息修改权限

updateCustomMode String <optional>

群信息自定义字段修改权限

antiSpamBusinessId String <optional>

用户配置的对某些资料内容另外的反垃圾的业务ID

custom String <optional>

扩展字段

done done

结果回调函数

Returns:
Type
Void
Example
nim.updateTeam({
    teamId: '123',
    name: '群名字',
    avatar: 'avatar',
    intro: '群简介',
    announcement: '群公告',
    custom: '自定义字段',
    done: updateTeamDone
});
function updateTeamDone(error, team) {
    console.log('更新群' + (!error?'成功':'失败'), error, team);
}

viewImageStripMeta(options)

预览去除图片元信息

  • 只支持通过预览文件发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • 去除元信息后的图片将不包含 EXIF 信息
Parameters:
Name Type Description
options Object

配置参数

Properties
Name Type Description
url String

原图 url

done done

结果回调函数, 成功时附上 interlace 后的图片 url

Returns:
Type
Void
Example
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var stripMetaUrl = nim.viewImageStripMeta({
    url: url,
    strip: true
});

Type Definitions


publishEvent

发布事件

Example
nim.publishEvent({
    type: 100000,
    value: 2,
    custom: 'hello world',
    vaildTime: 60,
    sync: false,
    done: publishEventDone
});
function publishEventDone(error, obj) {
    console.log('发布事件' + (!error?'成功':'失败'), error, obj);
}

querySubscribeEventsByAccounts

按账号获取指定事件的订阅关系

Example
nim.querySubscribeEventsByAccounts({
    type: 100000,
    accounts: ['cs3'],
    done: querySubscribeEventDone
});
function querySubscribeEventDone(error, obj) {
    console.log('获取订阅列表' + (!error?'成功':'失败'), error, obj);
}

querySubscribeEventsByType

查询指定事件的全部订阅关系

Example
nim.querySubscribeEventsByType({
    type: 100000,
    done: querySubscribeEventDone
});
function querySubscribeEventDone(error, obj) {
    console.log('获取订阅列表' + (!error?'成功':'失败'), error, obj);
}

subscribeEvent

订阅事件

Example
nim.subscribeEvent({
    type: 100000,
    accounts: ['cs3'],
    subscribeTime: 70,
    sync: true,
    done: subscribeEventDone
});
function subscribeEventDone(error, obj) {
    console.log('订阅事件' + (!error?'成功':'失败'), error, obj);
}

unSubscribeEventsByAccounts

按账号取消指定事件的订阅关系

Example
nim.unSubscribeEventsByAccounts({
    type: 100000,
    accounts: ['cs3'],
    done: unSubscribeEventDone
});
function unSubscribeEventDone(error, obj) {
    console.log('取消订阅事件' + (!error?'成功':'失败'), error, obj);
}

unSubscribeEventsByType

取消指定事件的全部订阅关系

Example
nim.unSubscribeEventsByType({
    type: 100000,
    done: unSubscribeEventDone
});
function unSubscribeEventDone(error, obj) {
    console.log('取消订阅事件' + (!error?'成功':'失败'), error, obj);
}