设置API:wx.openSetting,wx.getSetting使用说明(示例:地图授权与取消授权后的重新授权)

Posted 子钦加油

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设置API:wx.openSetting,wx.getSetting使用说明(示例:地图授权与取消授权后的重新授权)相关的知识,希望对你有一定的参考价值。

这个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 () {

    }
})

以上是关于设置API:wx.openSetting,wx.getSetting使用说明(示例:地图授权与取消授权后的重新授权)的主要内容,如果未能解决你的问题,请参考以下文章

小程序获取地址授权的修改 wx.openSetting需点击

微信小程序再次授权地理位置getLocation+openSetting使用

微信小程序-获取用户信息

微信小程序-获取当前位置和城市名

小程序--重新获取用户授权

微信小程序图片压缩