小程序开发新能力解读 - 2022.01
快速知悉 用户信息相关接口调整 - 访问蓝牙、添加通讯录联系人、添加日历事件需要用户授权 - <open-data>组件功能调整 - 获取手机号能力安全升级 头像昵称填写storage存储提供加密存储接口小程序设备消息 1. 用户信息相关接口调整 点击 用户信息相关接口 公告 1.1 访问蓝牙、添加通讯录联系人、添加日历事件需要用户授权: 访问蓝牙:调用 wx.openBluetoothAdapter 、wx.createBLEPeripheralServer ,需要授权 scope.bluetooth 添加通讯录联系人:调用 wx.addPhoneContact ,需要授权 scope.addPhoneContact 添加日历事件:调用 wx.addPhoneRepeatCalendar 、wx.addPhoneCalendar ,需要授权 scope.addPhoneCalendar 开发者可在平台调整前提前增加使用 wx.getSetting 获取用户当前的授权状态的逻辑,若授权状态为false可以调用 wx.openSetting 打开设置界面,引导用户开启授权。 授权功能详细说明可参考:官方文档 示例代码: // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.bluetooth" 这个 scope
wx.getSetting({
success(res) {
if (!res.authSetting['scope.bluetooth']) {
wx.openBluetoothAdapter({ //以 wx.openBluetoothAdapter示例,其他同理
success (res) {
console.log(res)
}
})
}
}
})
1.2 <open-data>组件功能调整: 开发者在未获取用户明示同意的情况下通过 <open-data>组件 在小程序中展示用户个人信息,用户容易误以为自己的个人信息在未授权的情况下,被小程序获取。 平台计划从2022年2月21日24时起回收通过<open-data>展示个人信息的能力,若小程序需收集用户昵称头像等信息,可以通过 头像昵称填写功能 功能进行收集。具体回收方式为: 头像展示 灰色头像用户昵称展示“微信用户”用户性别、地区、语言展示为为空(“”)小程序通过 <open-data>组件 展示群名称能力保留,平台会针对小程序生命周期内首次调用该组件展示群名称向用户提示:“群名称仅你可见,小程序无法获取。” 1.3 获取手机号能力安全升级: 此前小程序获取用户手机号是通过基础库接口直接获取 encryptedData 后进行解密。从基础库2.21.2版本起,回调参数中增加 code 参数,开发者获取 code 参数后,通过服务端 auth.getPhoneNumber 接口,使用 code 换取 encryptedData ,用于解密手机号。 为不影响开发者现有逻辑,原有基础库接口中的 encryptedData 参数依旧保留,建议开发者尽快使用新的方式获取用户手机号。 示例代码: //获取用户手机号,可以从bindgetphonenumber回调中获取到用户信息
Page({
getPhoneNumber (e) {
console.log(e.detail.code)//通过服务端auth.getPhoneNumber接口,使用code换取encryptedData,用于解密手机号。
}
})
详细功能描述可参考 官方文档 2. 头像昵称填写 头像选择:需要将 button 组件 open-type 的值设置为 chooseAvatar(获取用户头像),当用户选择需要使用的头像之后,可以通过 bindchooseavatar 事件回调获取到获取到头像信息的临时路径。昵称填写:需要将 input 组件 type 的值设置为 nickname(昵称输入键盘),当用户在此input进行输入时,键盘上方会展示微信昵称。示例代码:
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'//头像信息
Page({
data: {
avatarUrl: defaultAvatarUrl,
},
onChooseAvatar(e) {
const { avatarUrl } = e.detail //拿到用户头像信息
this.setData({
avatarUrl,
})
}
})
详细功能描述可参考 官方文档 3. storage存储提供加密存储接口 wx.setStorage(Object object): 使用介绍:将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB wx.getStorage(Object object): 使用介绍:从本地缓存中异步获取指定 key 的内容。缓存相关策略请查看 存储 代码示例: // 开启加密存储
wx.setStorage({//开启加密
key: "key",
data: "value",
encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true
success() {
wx.getStorage({
key: "key",
encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true
success(res) {
console.log(res.data)
}
})
}
})
4. 小程序设备消息 能力介绍: 「小程序设备消息」是一种长期订阅类型的「小程序订阅消息」,且需要完成「设备接入」才能够使用。 用户在使用设备过程中,需要关注某些由设备触发且需要人工介入的事件。例如安防摄像头检测到异常,设备耗材不足,设备发生故障,等等。 「小程序设备消息」能力指的是,只要用户在小程序内订阅通知,开发者就可以将这些事件以订阅消息的形式发送给用户。消息在微信内的产品形态,目前以“服务通知”形式呈现 接入流程: 1. 设备接入 小程序想要使用设备消息能力,首先需要接入设备,详见「设备接入」文档。完成接入后,开发者可获得由平台分配的 model_id 。model_id 对应一种设备类型,也是调用小程序设备能力相关接口的重要凭证。 2. 获取模版 ID 登录小程序管理后台——功能——订阅消息——公共模板库——长期订阅,查看可选用的设备消息模板。 3. 获取设备票据 获取 snTicket 用于「发起订阅」步骤。详见服务端设备票据接口 hardwareDevice.getSnTicket 。 4. 发起订阅 调用 wx.requestSubscribeDeviceMessage 接口会有以下授权弹窗出现,用户同意订阅消息后,才会有设备消息发送至用户的微信会话。 示例代码: wx.requestSubscribeDeviceMessage({
sn: 'xxxx',//设备唯一序列号。由厂商分配,长度不能超过128字节。字符只接受数字,大小写字母,下划线(_)和连字符(-)。
snTicket: 'xxxxx',//设备票据,5分钟内有效。
modelId: 'xxxxx',//设备型号 id 。通过微信公众平台注册设备获得。
tmplIds: ['xxxxx'],//需要订阅的消息模板的 id 的集合,一次调用最多可订阅3条消息
success(res) {
console.log('[wx.requestSubscribeDeviceMessage success]: ', res)
// { 'QCpBsp1TGJ1ML-UIwAIMkdXpPGzxSfwJqsKsvMVs3io': 'accept' }
},
fail(res) {
console.log('[wx.requestSubscribeDeviceMessage fail]: ', res)
}
})
详细功能描述可参考 官方文档