Skip to content
This repository has been archived by the owner on Nov 20, 2019. It is now read-only.

升级v0.6版本指引 #68

Open
binsee opened this issue Nov 1, 2018 · 3 comments
Open

升级v0.6版本指引 #68

binsee opened this issue Nov 1, 2018 · 3 comments

Comments

@binsee
Copy link
Owner

binsee commented Nov 1, 2018

sdk发布了0.6.0版本,服务端将于下午更新上线,请务必及时升级sdk并修改代码,否则部分功能将无法正常使用

主要修改内容:

  1. 登陆:断线重连名称修改为 auto
    [预告] 修改断线重连名称 #29

  2. 推送机制重构

  • 推送机制重构,以优化推送性能。第三方接入方案需注意notify事件处理方式,sdk用户可忽略此条
  • 联系人推送从push事件独立为contact事件,push事件不再推送联系人
  1. ws通讯荷载数据字段名称修改为payload,第三方接入方案需注意修改
    [提案] 修改ws通讯荷载数据key名称 #28

  2. 修复异常推送问题,增加自动重连机制,增加了autoLogin事件

  • 需要注意的是,当账号连接断开并自动重连后,可能会同步到近期(短时间内)的重复信息,自行处理过滤。
  • 自动重连后,原先的token将不能断线重连,只能二次登陆(手机端确认)。当autoLogin事件被触发后,应及时更新登陆数据。用法见demo
  1. 考虑到金融相关接口过于敏感,下线接收转账、接收红包接口。

在运行稳定的基础上,无紧急问题将不再频繁更新sdk项目。后续会推出更好用的新接入方案。
日常问题请发issues,在群内告知编号以及时跟进。
紧急问题可在群内at项目服务人员: @杉木 @晶晶

@binsee binsee changed the title 升级v0.6版本 升级v0.6版本指引 Nov 1, 2018
@binsee
Copy link
Owner Author

binsee commented Nov 1, 2018

升级指南:

升级依赖: 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) //开启同步消息

下线接口

由于金融相关较为敏感,接收转账及红包接口已经下线,此系列接口无法使用。

@binsee
Copy link
Owner Author

binsee commented Nov 6, 2018

第三方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

@xinbenlv
Copy link

xinbenlv commented Nov 9, 2018

建议修改npm update padchat-sdknpm i [email protected] --save

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants