1、首先查看是否授权(获取用户当前的授权状态)wx.getSetting({})
2、判断当前访问权限结果是否为true,如果为true,则获取相关信息,如果未false,需要重新授权,第一种授权方式:wx.authorize,第二种授权方式:推荐使用跳转至授权页使用button的open-type进行授权
注意:获取用户信息一定要使用button,其余的如获取地理位置等其他可以使用wx.authorize
3、在授权过程中,如果用户点击确认,则获取相关信息,如果用户点击false,则打开授权设置页-重新授权wx.openSetting
如果仅仅只获取 用户头像 、昵称、性别、地理位置等 可以使用
此方法不管是否授权或者登陆,都可以获取到
<open-data type="userAvatarUrl" open-type=""></open-data>
<open-data type="userNickName"open-type=""></open-data>
1、查看是否授权(获取用户当前的授权状态)
wx.getSetting({
success: (res) => {
if (res.authSetting['scope.userLocation']) { // 如果授权结果为true,则获取相关信息
wx.getLocation({})
}else{ // 如果授权结果为false,执行授权操作
wx.authorize({})或者跳转至授权页使用button的open-type进行授权
}
}
})
2、授权
//提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。
//如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。
//如果用户之前没有同意授权,则出现弹窗询问是否授权,如果用户点击拒绝,则以后不会出现弹窗,直接进入fail回调,需要引导用户去设置
wx.authorize({
scope: 'scope.userLocation',
success:function(res){
console.log(res) //res返回调用结果 {errMsg: "openSetting:ok", authSetting: {…}}
console.log(res.Msg) // openSetting:ok
console.log(res.authSetting) //{scope.userLocation: false}
console.log(res.authSetting['scope.userLocation']) //false
},
fail: function () {
//如果用户点击拒绝,以后的每次点击授权每次都都会直接进入此回调
wx.openSetting({ //重新授权--用户请求过的权限列表
success: function (res){
console.log(res)
}
})
}
})
重新授权--调起客户端小程序设置界面
wx.openSetting({})
此接口进行了调整
调整后“打开小程序设置页”将支持以下两种实现方式:
方法1:使用 button 组件来使用此功能,示例代码如下:
<button open-type="openSetting" bindopensetting="callback">打开设置页</button>
方法2:由点击行为触发wx.openSetting接口的调用,示例代码如下:
<button bindtap="openSetting">打开设置页</button> openSetting() { wx.openSetting() }
注意:原无需用户点击即可直接调用wx.openSetting接口的实现方式将不再支持,即将废弃的错误使用方式示例如下:
onShow() { wx.openSetting() }
针对仅仅获取用户信息
wx.getUserInfo()
//如果使用该接口之前已经授权(通过button授权),可以使用该接口直接调取用户信息,
//如果使用该接口之前没有授权(没有通过button授权),因为不在出现授权弹窗,会直接进入 fail 回调,所以获取不到用户信息
所以如果使用该接口,必须需要先通过button授权
//如果获取用户信息 ( wx.getUserInfo() ) 或者 授权获取用户信息( wx.authorize({scope: "scope.userInfo"}) )是不会有弹窗授权操作 需要使用<button open-type="getUserInfo"></button> 进行弹窗授权操作
<button open-type="getUserInfo" bindgetuserinfo="onGotUserInfo"></button>//每次点击都会出现弹窗
onGotUserInfo: function (res) {
console.log(res)
console.log(res.detail.errMsg) //获取状态(用户点击拒绝或者允许)
console.log(res.detail.userInfo) //获取用户信息
console.log(res.detail.rawData) //获取原始数据
}
//res.detail.errMsg的返回值为: getUserInfo:ok 和 getUserInfo:fail auth deny
//利用返回值做判断
if(res.detail.errMsg == "getUserInfo:ok"){
}