前言:

小程序需要添加一个定位功能,主要的就是获取用户位置的经纬度,然后根据用户经纬度进行一些判断操作。

在小程序提供的Api中,获取用户定位信息的主要Api是 wx.getLocation(obj) 。但是使用这个API,会先获取用户授权。如果用户取消授权,那么再调这个Api,也不会再出现授权页面,也就不能再获取用户位置了,这就需要使用其他的Api辅助打开授权页面了。所以获取用户位置就需要完整的授权、获取位置的流程及异常流处理了。

业务流程图:

关键技术点:

页面加载默认调用 wx.getLocation ,然后如果获取失败则调用 wx.getSetting ,如果未授权,则调用 wx.openSetting 打开授权设置界面,如果授权界面设置允许授权,则返回页面再次调用 wx.getLocation,主要的流程就是这个了。

示例代码:

 const app = getApp()

 Page({
data: {
hiddenReAuthorizePop:true,//隐藏重新授权确认弹窗
latitude: "", //维度,浮点数
longitude: "", //经度,浮点数
content:"本活动需要获取位置才可以参加"
},
onLoad: function() {
//1. 页面加载的时候获取定位
this.getLocation()
},
/**
* 1. 获取用户定位
*/
getLocation: function() {
var self = this;
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的坐标,可传入'gcj02'
altitude: true, //传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度
success: function(res) {
var latitude = res.latitude; // 纬度,浮点数
var longitude = res.longitude; // 经度,浮点数
self.setData({
latitude: res.latitude,
longitude: res.longitude
})
},
fail: function(res) {
//未授权就弹出弹窗提示用户重新授权
self.reAuthorize();
}
});
},
/**
* 1.2 重新授权按钮点击事件
* click event
*/
openLocationSetting: function() {
var self = this
//先获取用户的当前设置,返回值中只会出现小程序已经向用户请求过的权限
wx.getSetting({
success: function(res) {
if (res.authSetting && !res.authSetting["scope.userLocation"]) {
//未授权则打开授权设置界面
wx.openSetting({
success: function(res) {
if (res.authSetting && res.authSetting["scope.userLocation"]) {
//允许授权,则自动获取定位,并关闭二确弹窗,否则返回首页不处理
self.getLocation();
self.setData({
hiddenReAuthorizePop:true
})
wx.showToast({
title: '您已授权获取位置信息',
icon: 'none'
})
}else{
//未授权就弹出弹窗提示用户重新授权
self.reAuthorize();
}
}
})
} else {
//授权则重新获取位置新(授权设置界面返回首页,首页授权二确弹窗未关闭)
self.getLocation();
}
}
})
},
/**
* 重新授权
*/
reAuthorize:function(){
var self=this
self.setData({ hiddenReAuthorizePop:false})
}
})

代码片段地址:https://developers.weixin.qq.com/s/uRMylxmO7e3Q

原创专业博客,转载请注明来源地址:https://www.cnblogs.com/xyyt/p/9871898.html

微信小程序开发——小程序API获取用户位置及异常流处理完整示例的更多相关文章

  1. 通过腾讯地图api获取用户位置限制在指定位置区域

    <!--在微信中获取用户位置--><script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">& ...

  2. 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

    异常描述: 点击按钮获取用户手机号码,有的时候会出现点击无反应或很久之后才弹出用户授权获取手机号码的弹窗,这种情况下,也会出现点击穿透的问题(详见:微信小程序开发——连续快速点击按钮调用小程序api返 ...

  3. mpvue小程序开发之 wx.getUserInfo获取用户信息授权

    一.背景 在使用美团的mpvue2.0框架搭建起小程序项目后,做获取用户信息时遇到一些问题:微信小程序更新api后,获取用户信息只能通过button上的绑定方法 来获取用户信息,vue上方法绑定不能直 ...

  4. 微信公众号开发(三)获取access_token

    微信公众号开发(三)获取access_token 1.说明 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.acce ...

  5. Ceph Object Gateway Admin api 获取用户列表问题

    按照官方文档使用Admin Ops API 获取用户列表 GET /admin/user时 返回{code: 403, message: Forbidden}这里有两个问题:首先用户列表的请求为 如下 ...

  6. HTML5调用百度地图API获取当前位置并直接导航目的地的方法

    <!DOCTYPE html> <html lang="zh-cmn-Hans">     <meta charset="UTF-8&quo ...

  7. HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地

    <!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8"&g ...

  8. 微信小程序维护登录态与获取用户信息

    前言. 微信小程序的运行环境不是在浏览器下运行的.所以不能以cookie来维护登录态.下面我就来说说我根据官方给出的方法来写出的维护登录态的方法吧. 一.登录态维护 官方的文档地址:https://m ...

  9. 微信小程序开发01-小程序的执行流程是怎么样的?

    前言 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是我们需要做一个Hybrid体系,如果做App,React Native也是不错的选择,但是一定要有完善的分层: ① ...

随机推荐

  1. js弹出div层,弹出层页面底部出现UL出现一条线问题

    整个弹出div层,列表满一页时:底部会出现一条横线 原因:ul固定写在页面中了 解决方法: 将ul代码与li列表一样写在js中,如下 var newhtml = '<ul class=" ...

  2. 通过SSH克隆远程仓库(GitLab)到本地

    由于不是任何用户都能从远程仓库克隆到本地的,也是需要鉴别的,因此本地需要用git bash 创建一个公钥,而远程仓库也要把这个公钥保存下来,进而本地才可以从远程download.主要步骤如下: 1.首 ...

  3. 用tomcat插件 在Eclipse 中配置Tomcat项目

    1.安装Tomcat在Eclipse中的插件(使可以在eclipse中启动Tomcat) 2.培植eclipse中tomcat属性, window-->preferences 对话框中Tomca ...

  4. [Linux]CentOS7搭建Nginx + MySQL + PHP

    ------------------------------------------------------------------------------------- Nginx安装参考地址:ht ...

  5. django使用restframework实现安全的api

    参考地址:https://github.com/tomchristie/django-rest-framework/ 一般如果在批量修改多的时候,不建议使用,一般在get请求,或者修改单条数据的时候使 ...

  6. 制作基于U盘启动和网络常识

    一.制作基于U盘启动的操作系统盘1.准备相关的软件和硬件 下载软件并安装到[电脑]中 ——大白菜.老毛桃 硬件——U盘(空的) 2.插入U盘,点击桌面上的[大白菜装机版]打开大白菜, 点击[一键制作U ...

  7. (转)JS之——解决IE6、7、8使用JSON.stringify报JSON未定义错误的问题

    https://blog.csdn.net/l1028386804/article/details/53439755 在通过JavaScript将对象类型的参数通过JSON.stringify转换成字 ...

  8. 在maven中classpath notfund

  9. linux安装mysql5.1

    一.卸载mysql 1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除 # yum list installed | grep mysql mysql-libs.i686        ...

  10. Functional and Class Components

    [Functional and Class Components] The simplest way to define a component is to write a JavaScript fu ...