应用的 App Key,即您的应用在云信的账号。
登录 IM 的鉴权方式(默认为 0):
注意如果使用 动态token 鉴权,需要监听 onwillreconnect 回调,并在 onwillreconnect 中设置动态 token
是否自动标记消息为已收到,默认为 true。
如果设置为 false,所有的消息(包括普通消息和系统通知)都不会自动标记已读,需要手动调用标记已读接口 markMsgRead 来告知服务端消息已接收。否则服务器会在初始化时通过离线消息通知,以及离线系统通知通知下发消息。
协议包超时时间. 默认为 8s
自定义客户端类型,请设置大于 0 的整数。可实现自定义多端登录策略,具体策略可在云信管理后台配置。详情请查看文档: 自定义多端登录
客户端自定义 tag。最多 32 个字符。
多端登录场景下,如果某个设备端登录时设置了该字段,其他设备端可通过 onloginportschange 回调获取该字段信息。
//设备1
NIM.getInstance({
account: 'test1',
onloginportschange: function(err, data) {
//设备2登录时,打印:
//data: [{
// account: 'test1',
// customTag: 'customTag from test1',
// connectionId, deviceId, ip, mac, online, os, time, type
//}]
console.log('data', data)
}
})
//设备2
NIM.getInstance({
account: 'test1',
customTag: 'customTag from test1'
})
是否使用 IM 业务数据库(采用 indexedDb),默认 true
是否将日志存储到本地数据库,默认 true,即默认将日志存储到本地数据库。后续如需拉取本地数据库中的日志,请联系云信技术支持。
是否打印调试日志。默认为false,即不打印日志
默认的备用长连接地址,9.18.1 之后支持传入多个备用地址
本地数据库中的日志有效期。单位:小时,默认为 72 小时。
心跳协议包超时时间. 默认为 5s
心跳间隔时间. 单位毫秒, 默认 30000ms
注: 不能小于 5000ms. 且建议不要大于 30000ms
消息内容里的文件的 CDN 链接是否强制使用 HTTPS 协议。默认 false。
是否开启备用 LBS 地址,默认为 true,即 NIM SDK 会将上一次连接成功的 LBS 地址存储到浏览器本地缓存 localStorage 作为备用,当主 LBS 不可用时,会尝试请求备用 LBS 地址进行连接。
自定义的备用 LBS 地址数组,用于自定义接口去代理 LBS 返回,防止运营商劫持。当主 LBS 不可用且浏览器本地缓存的备用 LBS 地址均不可用时,NIM SDK 会尝试请求自定义的备用 LBS ,优先级比lbsBackup 提到的 localstorage 里缓存的低。
默认使用的 LBS 连接地址
日志级别,默认为 off,即不输出任何日志。该属性会同时影响indexdb和控制台中的日志级别
登录自定义扩展字段,可转发给指定的第三方服务器,不会同步至其他端。authType为 2,即通过第三方回调进行 IM 登录鉴权时,必须传入,用于第三方服务器鉴权。
是否开启自动重连,默认 true,即如果长连接因为网络问题、心跳超时等原因断开,NIM SDK 默认自动尝试重连。
上传的文件在 NOS 上的存储场景。
上传的文件在网易云存储服务(NetEase Object Storage, NOS)上的存储有效期。
私有化配置
数据上报的域名地址,如果有多个值,值之间以逗号分隔。默认为: 'https://statistic.live.126.net,https://statistic-overseas.yunxinfw.com'
是否开启ABTest,主版本默认是true,稳定版默认是false
注:稳定版本 8.9.111~8.9.1xx 支持,且主干版本 > 9.11.0 支持
是否开启数据上报,默认是true
注:稳定版本 8.9.111~8.9.1xx 支持,且主干版本 > 9.11.0 支持
是否开启融合存储,主版本默认是true,稳定版默认是false
注:稳定版本 8.9.111~8.9.1xx 支持,且主干版本 > 9.11.0 支持
是否需要兼容私有化环境登录参数。
默认在稳定版为 true,在开发版为 false
注:稳定版本 >= 8.9.125 支持,主干版本 >= 9.16.0 支持 注:稳定版 8.9.122~8.9.124,主干版本 9.14.3~9.14.4,如果是私有化环境且未升级到最新版本,需要在 options 中设置该变量为 true,否则会导致登录失败。
是否开启快速自动重连,默认 false。若设置为 true,NIM SDK 会监听浏览器的 offline 和 online 事件来嗅探网络断开和恢复,将会做相应的断开和重连策略。
SDK 尝试重连的最大次数,超过后则不再尝试重连。
调用关联函数重置会话未读数失败后,是否需要继续重置当前客户端的未读数,默认为true
调用 clearServerHistoryMsgsWithSync 清空历史消息后,是否更新会话未读数以及最后一条消息,并触发 onupdatesessions 回调函数,默认为true。
撤回消息后是否更新相应会话的未读数,默认 true
假设该参数设置为 true 且某会话有 2 条未读消息,如果其中 1 条消息被撤回了,那么该会话未读数变为 1
是否通过 HTTPS 协议跟服务器建立连接, 默认 true
初始化后是否跳过连接. 默认视为 false.
是否同步信令未读消息,默认true
注:9.10.0及以上支持
是否在初始化时同步离线广播消息,默认 false。
同步协议包的超时时间. 默认为 180s
是否在初始化时同步用户在各个群中的信息。默认为true。如果设置为 false,则初始化阶段 onMyTeamMembers
不会触发。
onMyTeamMembers
返回了当前用户在各个群中的信息,包括但不限于:
是否在初始化时同步好友对应的用户名片列表, 默认true
是否在初始化时同步已读回执时间戳, 默认 true。
若设置为true,则初始化阶段回调函数onsessions中,可以根据session.msgReceiptTime查看会话的已读回执时间
是否同步黑名单和静音列表, 默认true。若设置为true,则初始化同步接收黑名单和静音列表
是否同步p2p,以及高级群的漫游消息,默认 true。
默认为false。该参数有两个作用:
是否在初始化时同步云端的置顶会话信息,默认 false。置顶会话信息通过 onStickTopSessions 传给用户,并附带在会话的 isTop 属性中
是否在初始化时同步超大群的漫游消息, 默认 true。
是否在初始化时同步超大群列表, 默认true
IM 账号的登录凭证。该登录凭证只会在登录 IM (建立 SDK 与云信服务端的长连接)时校验一次。
是否对日志做额外的处理,诸如日志存储、日志上报等等。
该函数会截获 SDK 日志的参数,供开发者使用。
const logs = []
setInterval(() => {
if (logs.length > 0) {
//每隔2分钟,将logs的内容上传到您的业务服务器
//...
//清空logs
logs = []
}
}, 120000)
NIM.getInstance({
logFunc: {
log: function (data) {
logs.push(`log: ${data}`)
},
warn: function (data) {
logs.push(`warn: ${data}`)
},
info: function (data) {
logs.push(`info: ${data}`)
},
debug: function (data) {
logs.push(`debug: ${data}`)
},
error: function (data) {
logs.push(`error: ${data}`)
}
}
})
有成员进入超级群时,包括该成员在内所有在线的客户端,触发该回调函数。
被添加的用户的账号
被添加的用户的群成员信息
群的信息
有成员进入群组时,包括该成员在内所有在线的客户端,触发该回调函数。
被添加的用户的账号
被添加的用户的群成员信息
群的信息
多端同步或初始化同步时,接收函数 MessageLogInterface.clearServerHistoryMsgsWithSync 调用后的回调函数。
在线或多端登录时接收“创建群通知”的回调。
多端登录时,接收到删除本地消息的回调函数
扩展字段
注:推荐传入 JSON 序列化的字符串
消息删除的时间
消息发送方, 帐号
端测生成的消息id, 可作为消息唯一主键使用。
服务器用于区分消息用的ID, 用于获取历史消息和获取包含关键词的历史消息。
消息场景:
时间戳
消息接收方, 帐号或群id
删除快捷评论时,消息的发送者,以及快捷评论发送者的多端登录账户会收到 onDeleteQuickComment 回调函数
// key: sessionId
// value.msgs: 消息列表
// value.msgs[idx].quickComments: 评论列表
const sessions = {}
function getSessionId(msg) {
if (msg.scene !== 'p2p') {
return `${msg.scene}-${msg.to}`
} else if (msg.from === nim.account) {
return `p2p-${msg.to}`
} else {
return `p2p-${msg.from}`
}
}
nim = NIM.getInstance({
// 收到了删除评论的通知,从快捷评论队列中移除评论
onDeleteQuickComment: function(msg, comment) {
const sessionId = getSessionId(msg)
const session = sessions[sessionId]
if (session) {
for (let _msg of session.msgs) {
if (_msg.idClient === msg.idClient) {
// 找到了被评论的消息
_msg.quickComments = _msg.quickComments || []
// 剔除同一账号类型相同的快捷评论
for (let i = _msg.quickComments.length - 1; i >= 0; i--) {
if (_msg.quickComments[i].from === comment.from && _msg.quickComments[i].body === comment.body) {
_msg.quickComments.splice(i, 1)
break
}
}
}
}
}
}
})
消息发送方, 帐号
端测生成的消息id, 可作为消息唯一主键使用。
服务器用于区分消息用的ID, 用于获取历史消息和获取包含关键词的历史消息。
消息场景:
时间戳
消息接收方, 帐号或群id
快捷评论内容
扩展内容
该评论的发送方的 account ID
评论的发送时间。
群解散时,群内所有成员收到 onDismissSuperTeam 的回调。群解散接口只能够通过服务器API调用
const superTeamById = {}
nim = NIM.getInstance({
onDismissSuperTeam: function (data) {
console.log('debug++ onDismissSuperTeam', data)
const teamId = data.teamId
delete superTeamById[teamId]
}
})
群解散时,群内所有成员收到 onDismissTeam 的回调
接收到其它用户消息已读回执的通知。注意,发送群消息时需要设置needMsgReceipt = true,否则无法收到 onMsgReceipts 回调
(初始化同步, 在线, 多端同步)收到了当前账户,在各个群内的信息设置。比如当前用户是否为群主、管理员、是否设置了免打扰等等。
注: 自己的超级群成员信息里有字段可以代表对此群的免打扰策略,开发者可自行组合到 session 中。
新增、更新、删除 一条消息的PIN标记时,会触发多端登录设备的 onPinMsgChange 回调
// key: sessionId
// value.msgs: 会话中消息列表
// value.msgs[idx].pinInfo: 如果有pinInfo,说明该消息被收藏
const sessions = {}
// 找到会话列表中被PIN的消息
function getMsgInSessions(msg) {
const sessionId = getSessionId(msg)
const session = sessions[sessionId]
if (session) {
const msgs = session.msgs || []
for (let _msg of msgs) {
if (msg.idClient === _msg.idClient) {
return _msg
}
}
}
}
function getSessionId(msg) {
if (msg.scene !== 'p2p') {
return `${msg.scene}-${msg.to}`
} else if (msg.from === nim.account) {
return `p2p-${msg.to}`
} else {
return `p2p-${msg.from}`
}
}
nim = NIM.getInstance({
onPinMsgChange: function (data, action) {
const _msg = getMsgInSessions(data.msg)
if (action === 'add' || action === 'update') {
_msg.pinInfo = data.pinTag
} else {
_msg.pinInfo = undefined
}
}
})
被 pin 标记的消息的基础结构
pin 标记的扩展字段
pin 标记的操作者
========================== AI start =================================
对消息添加快捷评论后,消息的发送者,以及快捷评论的多端登录设备,会收到 onQuickComment 回调函数
快捷评论只能够发送整数类型的字段。常用快捷评论给消息添加表情类的回复。比如1代表鲜花,2代表开心,等等。
同一个用户发送多次同一类型的快捷评论时,先发送的评论会被后续的发送覆盖
// key: sessionId
// value.msgs: 消息列表
// value.msgs[idx].quickComments: 评论列表
const sessions = {}
function getSessionId(msg) {
if (msg.scene !== 'p2p') {
return `${msg.scene}-${msg.to}`
} else if (msg.from === nim.account) {
return `p2p-${msg.to}`
} else {
return `p2p-${msg.from}`
}
}
nim = NIM.getInstance({
//收到了新的评论,将评论附加到消息的快捷评论队列中
onQuickComment: function(msg, comment) {
const sessionId = getSessionId(msg)
const session = sessions[sessionId]
if (session) {
for (let _msg of session.msgs) {
if (_msg.idClient === msg.idClient) {
// 找到了被评论的消息
_msg.quickComments = _msg.quickComments || []
// 先剔除同一账号类型相同的快捷评论
for (let i = _msg.quickComments.length - 1; i >= 0; i--) {
if (_msg.quickComments[i].from === comment.from && _msg.quickComments[i].body === comment.body) {
_msg.quickComments.splice(i, 1)
break
}
}
_msg.quickComments.push(comment)
}
}
}
}
})
消息发送方, 帐号
端测生成的消息id, 可作为消息唯一主键使用。
服务器用于区分消息用的ID, 用于获取历史消息和获取包含关键词的历史消息。
消息场景:
时间戳
消息接收方, 帐号或群id
快捷评论内容
扩展内容
该评论的发送方的 account ID
评论的发送时间。
有成员离开超级群时,包括该成员在内所有在线的客户端,触发该回调函数。
被添加的用户的 IM 账号(accid)
群的信息。
注: 已知主动离开群的场景触发的 onRemoveSuperTeamMembers 是不存在 team 信息的。
群 ID
初始化同步阶段接收置顶会话信息
初始化时同步超级群列表的回调
const superTeamById = {}
nim = NIM.getInstance({
syncSuperTeams: true
onSuperTeams: function (teamArr) {
for (let team of teamArr) {
superTeamById[team.teamId] = team
}
}
})
在线阶段,群主收到超级群创建的通知(超级群只能够通过服务器接口创建)
调用 updateServerSession 后,多端登录设备收到该回调
data.teamMsgReceipts:
超级群群主变更时,所有在线群成员都会收到此回调。此方法参数包含群信息,以及新老群主信息
转让者的信息
被转让的目标用户的信息
群主变更时,所有在线群成员都会收到此回调
转让者的信息
群成员 ID (群 ID + account)
群成员类型
更新时间
被转让的目标用户的信息
群成员 ID (群 ID + account)
群成员类型
更新时间
超级群资料更新时,或者更新群全体禁言状态时,群内在线成员都会收到该回调
超级群管理成员变更时,在线群成员会收到该回调
被添加的用户的账号
是否为管理员.
若为 false 代表被移出管理员列表.
被添加的用户的群成员基础信息
群的基础信息
在线或多端同步时接收“超级群成员的信息变更”的回调
对指定成员禁言或者解除禁言后,超级群内所有在线成员收到该回调
被添加的用户的账号
被添加的用户的群成员基础信息
是否静音.
若为 false 代表被移出静音列表.
群的基础信息
群资料更新时,或者更新群全体禁言状态时,群内在线成员都会收到该回调
群管理成员变更时,在线群成员会收到该回调
被添加的用户的账号
是否为管理员.
若为 false 代表被移出管理员列表.
被添加的用户的群成员基础信息
群的基础信息
群成员最后更新时间戳
群Id
对指定成员禁言或者解除禁言后,群内所有在线成员收到该回调
被添加的用户的账号
被添加的用户的群成员基础信息
群成员 ID (群 ID + account)
(该成员)是否被禁言
群ID
群成员类型
更新时间
是否静音.
若为 false 代表被移出静音列表.
群的基础信息
初始化阶段返回黑名单列表。注意,黑名单是单向的。当前用户的黑名单,是指其它用户无法对当前用户发送消息。反之并不受影响。
在线广播消息到达事件的回调。用户可通过该回调接收在线广播消息。
离线广播消息到达事件的回调。用户可通过该回调在初始化的同步阶段接收单条或批量接收多条离线广播消息。
SDK 与云信服务端建立长连接的回调。用户可以通过onwillreconnect, onconnect, ondisconnect等回调函数,在界面中提示应用的网络状态。
连接建立后的回调, 会传入一个对象, 包含登录的信息, 有以下字段:
本次登录的连接号
地区
客户端自定义 tag。最多 32 个字符。
本机外网IP 地址
上次登录的设备的设备号
端口
在线自定义系统通知的回调。用户在线时通过该回调接收系统通知。
SDK 仅透传自定义系统通知,不负责解析和存储,也不管理其未读数,通知内容由第三方 APP 自由扩展。 开发者可以根据其业务逻辑自定义一些事件状态的通知,来实现各种业务场景。例如实现单聊场景中的对方“正在输入”的功能。
请参考文档:https://doc.yunxin.163.com/messaging/docs/zQxOTIwMDc?platform=web 查看自定义系统通知的详细用法
SDK 与云信服务端断开长连接的回调。用户可以通过onwillreconnect, onconnect, ondisconnect等回调函数,在界面中提示应用的网络状态
code
提示相应的错误信息, 并且跳转到登录页面 // store代指你的应用中存放数据的对象
NIM.getInstance({
ondisconnect: function (res) {
// 根据断开的 code 设置页面提示
// 数字类型的 code 为初次登陆时,服务器返回的状态码
// 字符类型的 code 为登录保持态断开时的状态码
if (typeof res.code === "number") {
if (res.code === 302) {
store.uistate.networkHint = "账号或者密码错误";
} else if (res.code === 403) {
store.uistate.networkHint = "账号禁止登录";
} else if (res.code === 422) {
store.uistate.networkHint = "账号被禁用";
} else if (res.code === 417) {
store.uistate.networkHint = "重复登录, 已经在其它端登录了";
} else {
store.uistate.networkHint = "账号无法登录";
}
} else if (res.code === "kicked") {
if (res.reason === 'samePlatformKick' || res.reason === 'otherPlatformKick') {
store.uistate.networkHint = '当前账户已在其它设备中登录'
} else if (res.reason === 'serverKick') {
store.uistate.networkHint = '当前设备已被服务器踢掉'
} else {
store.uistate.networkHint = '账号已被踢出'
}
} else if (res.code === "allAttemptsFailed") {
store.uistate.networkHint = "无法连接至服务器";
} else if (res.code === "logout") {
store.uistate.networkHint = "当前账户已登出";
} else {
store.uistate.networkHint = "当前账户已登出";
}
redirect("loginPage");
}
})
初始化阶段发生错误的回调。
初始化阶段同步好友列表。若没有好友:
多端登录状态变化的回调, 可通过该回调获取登录端列表。以下情况该回调触发:
多端同步或在线时接收消息的回调。除了各种类型的基础消息外,重发消息、转发消息也会收到 onmsg 回调。
此外,群相关的部分信息,考虑到一般也会在会话中展示,所以也会触发 onmsg 回调。群消息触发 onmsg 时,具体的群信息类型通过 attach.type 字段查看。详情可以查看: 群通知消息
初始化阶段返回静音列表。注意,和黑名单一样,静音名单为单向的。静音名单主要的作用是设置会话免打扰:
初始化阶段同步自己的用户名片的回调。
初始化阶段同步离线自定义系统通知
SDK 仅透传自定义系统通知,不负责解析和存储,也不管理其未读数,通知内容由第三方 APP 自由扩展。 开发者可以根据其业务逻辑自定义一些事件状态的通知,来实现各种业务场景。例如实现单聊场景中的对方“正在输入”的功能。
请参考文档:https://doc.yunxin.163.com/messaging/docs/zQxOTIwMDc?platform=web 查看自定义系统通知的详细用法
初始化阶段接收离线消息的回调。具体的消息来源可以查看 onmsg 回调
初始化阶段接收离线系统通知。在线系统通知通过 onsysmsg 接收。
系统通知分为内置系统通知,以及自定义系统通知。自定义系统通知请参考 SystemMessageInterface.sendCustomSysMsg
内置系统通知主要包括用户关系、以及群组两大类型。详细系统通知类型请参考: 系统通知类型
会触发系统消息的函数列表,请参考 onsysmsg
在初始化阶段,或者在线时,接收订阅事件。
接收订阅事件之前,需要调用 subscribeEvent 订阅事件。
订阅事件时,可以设置有效时间,在有效时间内重新登录,无需重新调用 subscribeEvent
初始化阶段接收漫游消息的回调。具体的消息来源可以查看 onmsg 回调
初始化时同步接收漫游系统通知。注意,漫游系统消息仅包含 deleteMsg (recallMsg引发的) 类型的系统消息
初始化阶段同步的会话列表
多端登录时接收“创建群通知”的回调。
初始化同步完成的回调。如果开启了 db,应该在同步结束后再开始调用会使用 db 的操作。
多端登录时接收好友动作的回调。好友动作包括添加好友、好友申请、通过好友申请、拒绝好友申请、删除好友和更新好友备注。
账号信息,当 type 为下列类型时存在:
好友信息。当type为下列类型时存在:
好友动作类型
多端登录时接收“拉黑/移出黑名单事件”的回调
被操作者账号 ID
是否加入名单(黑名单或者静音列表)
true 代表某人被加入名单,false 代表某人被移出名单
该操作记录的详情
被操作者账号 ID
更新时间戳
多端登录时接收“拉黑/移出静音列表”的回调
被操作者账号 ID
是否加入名单(黑名单或者静音列表)
true 代表某人被加入名单,false 代表某人被移出名单
该操作记录的详情
被操作者账号 ID
更新时间戳
在线时接收系统通知。离线阶段的系统通知通过 onofflinesysmsgs 接收。
系统通知分为内置系统通知,以及自定义系统通知。自定义系统通知请参考 SystemMessageInterface.sendCustomSysMsg
内置系统通知主要包括用户关系、以及群组两大类型。详细系统通知类型请参考: 系统通知类型
初始化阶段,获取系统消息未读数。注意,该回调仅在db = true时有意义。
初始化阶段,SDK会接收离线系统消息 (onofflinesysmsgs),以及漫游系统消息 (onroamingsysmsgs),然后和db中保存的系统消息合并后,计算系统消息的未读数
注意未读数结果中,以下字段为:
会触发系统通知的函数列表请查看 onsysmsg
调用 updateMyInfo 时,多端登录设备会收到此回调
在线阶段会话更新时的回调函数。会话更新可能包含lastMsg、已读回执时间、未读数、是否置顶等更新
在线接收系统通知更新的回调。在通过或者拒绝好友申请、接收或者拒绝入群申请、通过或者拒绝入群邀请时触发。发送这些动作后:
在线时接收系统通知未读数的更新。注意,该回调仅在db = true时有意义。
在线阶段,SDK接收到系统通知后更新未读数。或者,SDK调用本地系统通知已读后,收到系统通知未读数更新回调
注意未读数结果中,以下字段为:
会触发系统通知的函数列表请查看 onsysmsg
在线或多端同步时接收“群成员的信息变更”的回调
在线阶段接收消息后,发线聊天对象有用户名片上的信息更新时触发回调
初始化阶段接收好友的用户名片的回调
SDK 与云信服务端即将重连的回调。用户可以通过onwillreconnect, onconnect, ondisconnect等回调函数,在界面中提示应用的网络状态
重试间隔
重试次数
设置函数-去设置重连退避间隔. 稳定版自 8.9.124+ 支持,主干版本自 9.16.0+ 支持
原本的重连退避间隔时间. 单位毫秒
返回一个新的重连退避间隔时间. 单位毫秒
判定通知类消息是否计入会话的未读数。通知类消息主要包括群通知类消息和超级群通知类消息,具体请查看 NIMGetInstanceOptions.onmsg
判定是否需要忽略通知类型的消息。通知类消息主要包括群通知类消息和超级群通知类消息,具体请查看 NIMGetInstanceOptions.onmsg
云信 IM 账号(又称 accid),即应用的用户在云信的唯一标识。
应用本身的用户帐号和云信的 IM 账号(accid)彼此独立。云信的 IM 账号只用于云信 IM 服务的鉴权,IM 账号并不等同于应用的用户账号。