微信小程序位置之重新授权

原创 2018年02月03日 19:26:37

目前开发的小程序需要应用到一个获取经纬度的功能,授权的部分有点繁琐,记录一下。

1.使用 wx.getLocation() 可以获取用户的位置信息,第一次会弹出微信原生的modal提问用户是否授权,之后不会再次弹出。第一次我的解决方案是,每次要定位之前getSetting,查看用户是否已授权。如果未授权执行openSetting引导用户开启授权。代码如下:

studentCheckIn: function () {
    console.log("执行签到程序");
    var student;

    var stuId = this.data.studentId;
    var courseId = this.data.courseId;
    var idKey = wx.getStorageSync('idKey');
    console.log('stuId', stuId, 'courseId', courseId, 'idKey', idKey);

    var long;
    var lati;

    wx.getSetting({
      success: function (res) {
        console.log('getSetting...', res)
        if (res.authSetting["scope.userLocation"] == true) {
          console.log("用户已开启定位授权");
        } else {
          wx.showModal({
            title: '位置信息授权',
            content: '位置授权暂未开启,无法完成签到',
            confirmText: '开启授权',
            confirmColor: '#345391',
            cancelText: '仍然拒绝',
            cancelColor: '#999999',
            success: function (res) {
              if (res.confirm) {
                wx.openSetting({
                  fail: function () {
                    console.log('openSetting.failed')
                  }
                })
              }
              if (res.cancel) {
                wx.showModal({
                  title: '签到失败',
                  content: '无法使用定位权限,签到失败',
                  confirmText: '太遗憾了',
                  confirmColor: '#345391',
                  showCancel: false
                })
              }
            }
          })
        }
      }
    })

    wx.getLocation({
      success: function (res) {
        console.log(res);
        long = res.longitude
        lati = res.latitude

        console.log("签到成功,等待服务器反馈")
        console.log('stuId', stuId, 'courseId', courseId, 'idKey', idKey, 'longitude', long, 'latitude', lati);
      },

      fail: function () {
        wx.showModal({
          title: '签到失败',
          content: '拒绝授权,获取位置信息失败',
          confirmText: '授权开启',
          cancelText: '我知道了',

        })
      }
    })

  },


2.上述办法有些繁琐,但是可以实现。也可以使用 wx.authorize(OBJECT) 进行提前授权。

官方说明:↓
提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。

但是比较坑的是,wx.authorize(OBJECT)也只调用一次!!!!所以还是得调用openSetting引导用户开启授权。与上述方法相似,不再赘述。





版权声明:本文为博主原创文章,未经博主允许不得转载。

开通附近小程序,覆盖小程序附近5公里范围客户

附近小程序, 就是微信通过定位获取到用户的地理位置, 然后把这个位置附近的小程序展示给你。 当你把微信小程序开发出来, 并发布后, 可以为你的小程序设置一...
  • towtotow
  • towtotow
  • 2017年12月14日 09:32
  • 4161

CSS中的定位——position属性

CSS定位指的是 改变元素在页面中的位置。 CSS定位机制: 普通流:元素按照其在HTML中的位置顺序决定排布的过程(也就是我不对元素进行定位的默认排布) 浮动 绝对布局 CSS定位包含的属性有: ...
  • qq_15096707
  • qq_15096707
  • 2016年01月07日 15:19
  • 1246

微信小程序开发(6)---用户拒绝授权,重新调起授权

用户拒绝授权,重新调起授权
  • qq_28189091
  • qq_28189091
  • 2017年07月19日 17:00
  • 4405

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

写在前面我们知道: 1、微信的getLocation接口,是获取用户当前地理位置的,返回经纬度、速度等信息; 2、它的默认工作机制:首次进入页面,调用该api,返回用户授权结果,并保持该结果。...
  • rolan1993
  • rolan1993
  • 2017年10月24日 17:47
  • 1836

我做了一个成语接龙的小程序

我是一名安卓程序员,以前没有接触过前端开发,直到有幸接手了公司的小程序项目。小程序学起来还是很快的,对于有编程经验的人,看着示例代码,对照着官方文档,几天就能上手了。...
  • a49220824
  • a49220824
  • 2017年08月24日 15:31
  • 2110

如何正确释放小程序的产品能力?

几天前,我重新翻阅了2017年5月写的一篇关于小程序的文章,文章虽青涩但还算精确,文中阐述了三个观点: 如何决定小程序的产品定位?如何决定小程序的产品形态?如何决定小程序的资源投入? 无论...
  • rolan1993
  • rolan1993
  • 2018年01月15日 11:57
  • 40

微信小程序如何再次获取用户授权

现在在做一个小程序有地图的功能,通过点击按钮打开地图。调用wx.getlocation()这个接口是需要用户的授权。如果他授权了,返回一个success当然最好啦,就什么问题都没有了。如果他点了取消,...
  • hanzhaoshuai
  • hanzhaoshuai
  • 2017年05月21日 21:36
  • 13425

微信授权、登录、注册逻辑

http://www.jianshu.com/p/e662beb6ab2b刚进入公司的时候,参与了一个公司较为复杂的项目,我们公司大部分都只是一些活动页面,复杂一点的项目并不多,我运气比较好,进入公司...
  • sinat_17775997
  • sinat_17775997
  • 2017年04月05日 19:57
  • 1627

微信小程序实例源码大全

微信小程序实例源码大全下载 微信小应用示例代码(phodal/weapp-quick) 源码链接:https://github.com/phodal/weapp-quick 微信小应用地...
  • lamenw
  • lamenw
  • 2018年01月16日 15:58
  • 209

微信小程序 —— 成员管理及开发管理

引入 要理解微信小程序的成员管理,首先要理解微信小程序的注册。 微信小程序的注册需要用户提供一个邮箱作为登录账号,并绑定一个微信号作为管理员。 登录账号会得到一个官方提供的appid作为标识码,...
  • starter_____
  • starter_____
  • 2018年02月11日 19:46
  • 43
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信小程序位置之重新授权
举报原因:
原因补充:

(最多只允许输入30个字)