这个API解决了过去一个长久以来无法解决的问题,如何让用户重复授权;

打开小程序的设置界面:就是主动调取授权

目前资料极少,但是已经可以让大家先看看了;

官方文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/setting.html#opensettingobject

基础库版本 1.1.0 开始支持,低版本需做兼容处理
调起客户端小程序设置界面,返回用户设置的操作结果

目前的授权影响范围:

scope 说明:
scope 对应接口
scope.userInfo wx.getUserInfo
scope.userLocation wx.getLocation, wx.chooseLocation
scope.address wx.chooseAddress
scope.record wx.startRecord

相关文章:微信小程序重新调起授权用户信息,扫码进入小程序获取二维码携带参数wx.openSetting,wx.setClipboardData,wx.getClipboardData
微信小程序最新更新--api测试一览

微信小程序之新版本测试

相关讨论:
wx.openSetting()怎么判断success里面 用户有没有授权了我写的

[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
wx.openSetting({
      success:(res)=>{
          console.log("授权结果..")
        console.log(res)
        if(!res.authSetting.scope.userInfo || !res.authSetting.scope.userLocation){
            applyNotice()
        }
      }
    })

不正常啊,res的authSetting两个对象,两个对象的键名是scope.userInfo和scope.userLocation都是带了 . 的,怎么判断用户都授权了呢?我的小程序需要用户授权才能使用服务呢。做的事基于LBS的共享服务,没有定位和用户登录,就无法获取服务器上的区域划分的数据。用户就看不了自己周围的地图和自己的用户信息

[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
wx.openSetting({
      success:(res)=>{
          console.log("授权结果..")
        console.log(res)
        if(!res.authSetting["scope.userInfo"] || !res.authSetting["scope.userLocation"]){
            applyNotice()
        }
      }
    })

试试上述改动。

打印出来的console的可以判断了,对象还可以像数组一样键值调用,谢谢啦!
 

相关讨论:
用户取消后如何再次调出允许授权的modal?
如果用户错点了拒绝,就没办法再继续进入使用小程序了。能重新再调出许可的小窗让用户重新再选择吗?
答:林超

使用 wx.openSetting接口
相关讨论:
关于用户授权界面的唤醒
用户如果不小心拒绝了授权,之前是过十分钟之后还可以被唤醒,最近发现唤不醒了,一直是:"getUserInfo:fail auth deny",该如何应对?
答:Tïedào

//如下,在getUserInfo失败后调用wx.openSetting即可

如下是我的真实示例:

// pages/contactus/contactus.js
var app = getApp()
Page({ /**
* 页面的初始数据
*/
data: {
loadingHidden: false,
latitude: 23.099994,
longitude: 113.324520,
markers: [{
iconPath: '../../images/location.png',
id: 1,
latitude: 31.245442,
longitude: 121.506337,
title: '千卉摄影',
width: 50,
height: 50,
callout: {
content: '千卉摄影',
color: '#ff00000',
fontSize: '18',
borderRadius: '5',
bgColor: '#ffffff',
padding: '10',
display: 'ALWAYS',
textAlign: 'center'
}
}],
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var that = this
wx.getSystemInfo({
success: function (res) {
// console.log(res)
that.setData({
scrollHeight: res.windowHeight
});
}
});
wx.getSetting({
success(res) {
console.log(!res.authSetting['scope.userLocation']);
if (!res.authSetting['scope.userLocation']) {
wx.authorize({
scope: 'scope.userLocation',
success() {
// 用户已经同意
//其他操作...
console.log("用户已经同意位置授权");
},
fail() {
console.log("用户已经拒绝位置授权");
that.openConfirm();//如果拒绝,在这里进行再次获取授权的操作
}
})
}
//其他操作..
}
});
},
//当用户第一次拒绝后再次请求授权
openConfirm: function () {
wx.showModal({
content: '检测到您没打开此小程序的定位权限,是否去设置打开?',
confirmText: "确认",
cancelText: "取消",
success: function (res) {
console.log(res);
//点击“确认”时打开设置页面
if (res.confirm) {
console.log('用户点击确认')
wx.openSetting({
success: (res) => { }
})
} else {
console.log('用户点击取消')
}
}
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function (e) {
this.mapCtx = wx.createMapContext('myMap')
}, /**
* 生命周期函数--监听页面显示
*/
onShow: function () {
var that = this
app.reqGetfunc.reqGet('qh_contact.html', {}, function (res) {
// console.log(res)
that.setData({
tel: res.tel,
address: res.address,
map: res.map,
qq: res.qq,
wechat: res.wechat,
code: res.code,
loadingHidden: true
}) })
},
getLocation:function(){
var that = this
wx.getSetting({
success(res) {
console.log(res)
if (!res.authSetting['scope.userLocation']) {
wx.authorize({
scope: 'scope.userLocation',
success() {
// 用户已经同意小程序使用此功能,后续调用 wx.getLocation 接口不会弹窗询问
wx.getLocation({
type: 'gcj02',
success: function (res) {
//console.log(res)
var latitude = res.latitude
var longitude = res.longitude
var speed = res.speed
var accuracy = res.accuracy
console.log("latitude:" + latitude)
console.log("longitude:" + longitude)
console.log("speed:" + speed)
console.log("accuracy:" + accuracy)
wx.openLocation({
name: '山东省',
address: '山东省临沂市千卉摄影',
//latitude: latitude,
//longitude: longitude,
latitude: Number(that.data.map.latitude),
longitude: Number(that.data.map.longitude),
scale: 28
})
}
})
},
fail() {
console.log("用户已经拒绝位置授权");
that.openConfirm();//如果拒绝,在这里进行再次获取授权的操作
}
})
}
}
})
},
chooseLocation:function(){
wx.getSetting({
success(res) {
if (!res.authSetting['scope.userLocation']) {
wx.authorize({
scope: 'scope.userLocation',
success(){
wx.chooseLocation({
success: function (res) {
var name = res.name
var address = res.address
var latitude = res.latitude
var longitude = res.longitude
}
})
} })
}
},
fail() {
console.log("用户已经拒绝位置授权");
that.openConfirm();//如果拒绝,在这里进行再次获取授权的操作
}
}) },
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () { }, /**
* 生命周期函数--监听页面卸载
*/
onUnload: function () { }, /**
* 用户点击右上角分享
*/
onShareAppMessage: function () { }
})

最新文章

  1. Droid4x快照还原
  2. system 函数
  3. HDU 2665 && POJ 2104(主席树)
  4. 深入理解HTML5:语义、标准与样式
  5. mysql insert语句错误问题解决
  6. 【转载】怎么理解Condition
  7. iOS手写2048--基于Xcode7.1
  8. javascript--时钟
  9. 数据库 isnull()、nvl()、ifnull() 使用
  10. JavaScript 中的事件类型2(读书笔记思维导图)
  11. js缓冲运动
  12. RMQ(模板 ST 区间最值,频繁的间隔时间)
  13. 关于如何使用SVN的一些建议
  14. SpringBoot系列三:SpringBoot自定义Starter
  15. Angular4 组件间通讯
  16. npm快速入门
  17. LearnOpenGL学习笔记(三)——VBO,VAO,EBO理解
  18. [转帖] .NET FrameWork 版本的确定方法
  19. 如何同步两台Linux机器的时间?
  20. mysql中explain的用法

热门文章

  1. flask项目统一捕获异常并自定义异常信息
  2. js 获取当前日期和时间
  3. SpringCloud Zuul2.X网关实现服务熔断降级(复制即用)
  4. ASP.NET MVC5基础 - Global.asax详解
  5. springboot 打包jar 运行找资源文件
  6. DevExpress Skins<2>
  7. JS---DOM---自定义属性引入和移除
  8. English:Root "tele"
  9. Git问题汇总
  10. Go 数组(array) & 切片(slice)