1.功能

当用户未授权地理位置权限时,引导用户开启地理位置权限,区别于之前的uni处理,uni的处理 的处理没有手机系统关闭位置权限的处理,但是uni文章中对于打开位置权限后重新返回小程序有做权限重获取,当前文章未做处理

2.无授权情况分为(截图示例为iphone手机)

2.1 手机系统未开启位置授权 无法通过代码跳转到该设置页面

2.2 微信、企微App未授权 可以通过代码跳转设置页面



2.3 小程序未授权 可以通过代码跳转设置页面

3.代码

其中$dialog为提示框,具有确认取消按钮,点击后会执行对应逻辑可以换成对应项目的组件

async function checkAndAuthLocationAuth(): Promise<boolean> {
return new Promise(async (resolve, reject) => {
const systemRes = await taro.getSystemInfo()
if (!systemRes.locationEnabled) {
$dialog({
title: '提示',
render: () => '当前系统,未开启定位权限,请在设置中开启系统定位权限!',
cancelButton: true,
confirmButton: true,
handleConfirm: async () => {
}
})
return reject(false)
} else {
const appAuthorizeSetting = await taro.getAppAuthorizeSetting()
const appAuthObj = {
title: '提示',
render: () =>
'当前App未开启定位权限,请在设置中开启App定位权限!',
cancelButton: true,
confirmButton: true,
handleConfirm: async () => {
taro.openAppAuthorizeSetting({})
} }
switch (appAuthorizeSetting.locationAuthorized) {
case 'authorized':
const wxMiniSetting = await taro.getSetting() if (wxMiniSetting.authSetting['scope.userLocation']) {
// 成功获取后你可以直接根据项目业务需求决定此处是否直接获取经纬度等 return resolve(true)
}else if (wxMiniSetting.authSetting['scope.userLocation'] === undefined) {
const authRes = await taro.authorize({ scope: 'scope.userLocation' })
if (authRes.errMsg === 'authorize:ok') {
// 成功获取后你可以直接根据项目业务需求决定此处是否直接获取经纬度等
resolve(true)
} else {
// 拒绝后这里可以直接再次提示以及一些业务逻辑处理
}
}
else {
$dialog({
title: '提示',
render: () =>
'您的账号尚未获取或已拒绝“获取位置信息”,暂时无法使用该功能,是否确认授权?',
cancelButton: true,
confirmButton: true,
handleConfirm: async () => {
taro.openSetting({})
},
})
}
return reject(false)
case 'denied':
$dialog(appAuthObj)
return reject(false)
case 'not determined':
$dialog(appAuthObj)
return reject('')
default:
break;
}
}
})
}

使用示例

await checkAndAuthLocationAuth()

// 业务逻辑 如果未成功获取则不会走到业务逻辑代码中
...
... // 业务逻辑结束

微信、企微小程序使用taro对位置权限进行处理的更多相关文章

  1. 微信小程序之获取用户位置权限(拒绝后提醒)

    微信小程序获取用户当前位置有三个方式: 1. wx.getLocation(多与wx.openLocation一起用) 获取当前的精度.纬度.速度.不需要授权.当type设置为gcj02 返回可用于w ...

  2. Taro -- 原生微信小程序转taro

    微信小程序转Taro  (转发https://nervjs.github.io/taro/docs/taroize.html) Taro 可以将你的原生微信小程序应用转换为 Taro 代码,进而你可以 ...

  3. 微信小程序-获取当前城市位置及再次授权地理位置

    微信小程序-获取当前城市位置 1. 获取当前地理位置,可通过wx.getLocation接口,返回经纬度.速度等信息; 注意---它的默认工作机制: 首次进入页面,调用该api,返回用户授权结果,并保 ...

  4. 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程

    这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉 ...

  5. 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址

    摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...

  6. HotApp小程序统计,第一个专业的微信第三方小程序统计工具

    1.什么是HotApp小程序统计 HotApp小程序统计是第一个微信第三方小程序统计工具,就像做android 和 ios开发的人知道友盟统计一样,小程序也需要有个统计工具. 通过这个工具,可以知道小 ...

  7. WeTest+微信:小程序云端测试系统上线

    日前,微信新增小程序测试系统,可便于开发者检测小程序缺陷,评估小程序产品质量.在小程序发布之前,开发者可将小程序代码提交到测试系统,在不同型号的手机真机上运行,执行完毕后自动生成测试报告.小程序云端测 ...

  8. 小程序内嵌H5页面判断微信及小程序环境

    判断微信及小程序环境 1.H5页面引入jweixin-1.3.2.js 2. var ua = window.navigator.userAgent.toLowerCase(); if(ua.matc ...

  9. 类似微信聊天小程序-网易云信,IM DEMO小程序版本

    类似微信聊天小程序-网易云信,IM DEMO小程序版本 代码地址: https://github.com/netease-im/NIM_Web_Weapp_Demo 云信IM DEMO 小程序版本 ( ...

  10. Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE

    基于tauri+vue3.js+vite3跨桌面端仿微信聊天实例TauriVue3Chat. tauri-chat 运用最新tauri+vue3+vite3+element-plus+v3layer等 ...

随机推荐

  1. C++容器博客汇总

    文章的原作者为 https://blog.csdn.net/qq_37529913?type=blog C++ STL 容器.迭代器.适配器(深入了解,一文学会) 1.STL容器 2.序列式容器    ...

  2. C++学习笔记之进阶编程

    目录 进阶编程 STL(Standard Template Library) 容器(container) 仿函数(functor) 算法(algorithm) transform 查找 全排列 迭代器 ...

  3. (2)Python解释器的安装

    鉴于有同学在安装Python解释器出现了问题,这里再安装一下 step1,下载安装包,链接https://www.python.org/downloads/ 这里我安装的是3.6.4版本 我选择的是6 ...

  4. Prism框架的用法

    今天,我向大家介绍一款WPF后台框架,以及,它的用法. 官网 https://prismlibrary.com/ Prism 框架是一个用于构建松耦合.可维护且可测试的 WPF 和 Xamarin.F ...

  5. 记录--一道js笔试题, 刷新了我对map方法函数的认知

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 昨天在看一道笔试题的时候本以为很简单,但是结果不是我想象的那样,直接上笔试题. const array = new Array(5) ...

  6. ChatGPT 指令大全

    1.写报告 报告开头 我现在正在 报告的情境与目的 .我的简报主题是 主题 ,请提供 数字 种开头方式,要简单到 目标族群 能听懂,同时要足够能吸引人,让他们愿意专心听下去. 我现在正在修台大的简报课 ...

  7. Oracle 几种行转列的方式 sum+decode sum+case when pivot

    原始数据: 方式一: select t_name, sum(decode(t_item, 'item1', t_num, 0)) item1, sum(decode(t_item, 'item2', ...

  8. SSH框架使用AOP代理+自定义注解遇到的相关问题总结

    1.AOP注解失效问题 编写完成注解和AOP切面类时,在controller中加上注解,注解不生效.在配置文件xml中开启AOP注解: <aop:aspectj-autoproxy proxy- ...

  9. 温馨提示:不注意这几点,PDT(产品开发团队)就得散!

    在IPD(集成产品开发)体系中,PDT(Product Development Team,产品开发团队)发挥着至关重要的作用.PDT是一个跨部门.跨职能的协作团队,其成员来自不同的专业领域,包括研发. ...

  10. Scala 不可变Map

    1 package chapter07 2 3 object Test08_ImmutableMap { 4 def main(args: Array[String]): Unit = { 5 // ...