升级v0.6版本指引
sdk发布了0.6.0版本,服务端将于下午更新上线,请务必及时升级sdk并修改代码,否则部分功能将无法正常使用
主要修改内容:
-
登陆:断线重连名称修改为 auto
见 https://github.com/binsee/padchat-sdk/issues/29 -
推送机制重构
- 推送机制重构,以优化推送性能。第三方接入方案需注意
notify事件处理方式,sdk用户可忽略此条 - 联系人推送从
push事件独立为contact事件,push事件不再推送联系人
-
ws通讯荷载数据字段名称修改为payload,第三方接入方案需注意修改 见 https://github.com/binsee/padchat-sdk/issues/28
-
修复异常推送问题,增加自动重连机制,增加了
autoLogin事件
- 需要注意的是,当账号连接断开并自动重连后,可能会同步到近期(短时间内)的重复信息,自行处理过滤。
- 自动重连后,原先的token将不能断线重连,只能二次登陆(手机端确认)。当
autoLogin事件被触发后,应及时更新登陆数据。用法见demo
- 考虑到金融相关接口过于敏感,下线接收转账、接收红包接口。
在运行稳定的基础上,无紧急问题将不再频繁更新sdk项目。后续会推出更好用的新接入方案。 日常问题请发issues,在群内告知编号以及时跟进。 紧急问题可在群内at项目服务人员: @杉木 @晶晶
升级指南:
升级依赖: npm update padchat-sdk
代码修改:
断线重连
断线重连原先的类型名称是token,并不直观,现改为auto
await wx.login('auto', loginData)
autoLogin事件
增加autoLogin事件处理。当账号异常掉线时,会自动重连,重连后触发autoLogin事件,需要在这里获取并保存最新的自动登陆数据,否则下次启动断线重连将失败,只能二次登陆(手机端确认)
参考demo
wx
.on('autoLogin', async () => {
// 自动重连后需要保存新的自动登陆数据
await saveAutoData()
})
分离联系人推送
原先联系人和消息推送都在push事件中,现在将联系人剥离出来,单独放在contact事件,push事件中只处理消息
需同步通讯录时,建议登陆成功后,在login事件中调用一次syncContact()来立刻触发同步联系人。全量同步完毕后会触发loaded事件。
如登陆后未调用syncContact(),则会在联系人有变动时开始推送,先推送全量,再推送增量。
如不想接收联系人推送,可调用wx.setSyncContact(false)关闭联系人同步。但关闭后,同时也不会接收增量推送,且不会触发loaded事件。
wx
.on('contact', async data => {
logger.info('收到推送联系人:%s - %s\n', data.userName, data.nickName, JSON.stringify(data))
})
新特性
- 可独立控制是否同步通讯录/消息。默认为都接收同步
见
wx.setSyncContact()和wx.setSyncContact()
wx.setSyncContact(false) //关闭同步联系人
wx.setSyncContact(true) //开启同步联系人
wx.setSyncMsg(false) //关闭同步消息
wx.setSyncMsg(true) //开启同步消息
下线接口
由于金融相关较为敏感,接收转账及红包接口已经下线,此系列接口无法使用。
第三方sdk适配注意点:
推送通知机制
//这里为单次推送
case 'notify': // 推送通知
if (data.payload.type === 4) {
if (this.openSyncContact) {
this.syncContact()
}
} else {
if (this.openSyncMsg) {
this.syncMsg()
}
}
break
联系人推送特殊处理
case 'push':
if (data.payload && Array.isArray(data.payload.list)) {
const pushContact = data.payload.type === 4
const event = pushContact ? 'contact' : 'push'
let loaded = false
data.payload.list.forEach(item => {
const type = item.msgType
if (type === 32768 && item.continue === 0) {
//通讯录同步完毕
loaded = true
}
// 过滤无意义的2048和32768类型数据
if (type === undefined || type === 2048 || type === 32768) {
return null
}
// 当msg_type为5时,即表示推送的信息类型要用sub_type进行判断
// 另外增加一个属性来存储好了
item.mType = item.msgType === 5 ? item.subType : item.msgType
// 解析群成员列表
if (item.member) {
try {
item.member = JSON.parse(item.member) || []
} catch (e) {
}
}
this.emit(event, item)
})
// 如果推送的是联系人(通讯录)
if (pushContact) {
// 如果通讯录没有载入完毕,且全局的通讯录同步开关开启,则继续同步
if (!loaded && this.openSyncContact) {
this.syncContact()
}
if (loaded && !this.loaded) {
this.loaded = true
this.emit('loaded')
}
}
}
break
建议修改npm update padchat-sdk为npm i [email protected] --save