uni微信小程序获取微信运动权限
需求
我有一个需求,就是在小程序的首页需要获取一下微信步数,这样拆分一下就是首次进入小程序时,需要获取用户授权,如果用户允许授权并且微信有打开微信运动健康功能,那么就直接展示步数,如果用户拒绝了授权,那么当我再次点击这块区域的时候就要重新获取授权。
第一版
代码如下
onload(){
uni.authorize({
scope: 'scope.werun',
success() {
// 用户授权成功,获取运动数据
wx.getWeRunData({
success(res) {
// 获取加密数据
const encryptedData = res.encryptedData;
const iv = res.iv;
// 调用服务器端的接口进行解密(需要开发者后台处理)
request.post('/wx/getXXX', {
encryptedData: encryptedData,
iv: iv
}).then(res => {
that.todaySteps = res.steps;});
},
},
fail() {
}
})
},
fail() {
console.log('用户拒绝授权')
}
});
}
代码解析:
- 这个代码在页面初始化加载的时候使用uni.authorize获取了用户授权
- scope: ‘scope.werun’, 微信运动
- 获取权限后使用wx.getWeRunData()方法获取到了用户的encryptedData 和 iv
- 将encryptedData 和 iv传给后台接口解密获取微信步数
问题
这版代码写出来以后,同事提出了几个问题
- 问题一:如果用户第一次拒绝授权以后后面又想获取步数怎么办?
- 问题二:如果用户本身微信就没开微信运动这个功能怎么办?
为了解决上面的两个问题,我针对代码做了一下改动,于是就有了下面的
第二版
代码如下
首先我给这个没有数据的view标签绑定了点击事件,来去获取步数,我觉得这样应该就好了
<view v-if="!todaySteps" @click=getSteps()>{
{todaySteps}}</view>
javascript代码这块就是做了一下函数封装,其他也没什么改动
onload(){
this.getSteps()
},
methods: {
getSteps(){
uni.authorize({
scope: 'scope.werun',
success(