首页 > 编程语言 >uni-app微信小程序GPS位置获取爬坑

uni-app微信小程序GPS位置获取爬坑

时间:2024-12-20 18:53:34浏览次数:5  
标签:getLocation 微信 app 申请 接口 uni 权限

前情

uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,现在所在公司项目有抖音、快手、微信、支付、APP端,就是使用uni-app来开发的。

坑位

最近接手的项目是需要在下单前获取用户所有位置的GPS信息,再服务端会根据当前用户的GPS信息来判定是否给当前用户一定优惠。本以为就是调用一个API的事,但当你直接调用的时候你会发现根本无法使用。

Why?

位置信息属于用户隐私,从23年9月开始如果小程序需要获取位置信息需要去小程序管理后台:开发与服务-开发管理-接口设置-接口权限页申请地理位置api权限方才能使用。

解决方案

STEP 1:申请权限

开发与服务-开发管理-接口设置-接口权限申请权限,这里又有一小坑,微信提供了二个获取位置的接口

  1. wx.getLocation:获取当前的地理位置、速度,支持高精度定位
  2. wx.getFuzzyLocation:获取当前的模糊地理位置

在申请地理位置获取api权限的时候,你需要填二项必填项,申请理由和场景说明,官方有提供申请成功的案例

我第一感觉是申请支持高精度定位的wx.getLocation,模精定位特有接口能做的支持高精度定位也一定能实现需求,于是我就申请了wx.getLocation接口,同时针对场景截了图提交了申请,一天后发现申请不通过,于是又完善了资料再次提交又碰壁了,二天二次申请都被打回,一脸蒙逼。

搜了论坛都是说申请全被拒的,用模糊定位接口又不准,后面问了产品,我们只需要定位到市区级别行不行,产品说可以的,不用那么精确,于是转而申请wx.getFuzzyLocation,半小时时间未到就收到申请通过的短信提醒(怀疑是机审,走个过场,哈哈哈)

所以在申请接口前要跟产品确认好对于gps位置的精度要求,如果模糊定位能实现那就不要去折腾申请高精度定位的接口了,微信对wx.getLocation接口管理的比较严格,如果你确实需要高精度接口,那你就按官方提供的参考申请案例补充资料再申请吧,但是从论坛里的抱怨来看申请可能不是那么容易,如果你要申请那就多费点心吧,在此祝好。

STEP 2:填写接口权限配置

申请接口了并不就是说你就能直接调用了,你需要去app.json里补全位置权限获取说明描述和对应的接口权限注明

"permission" : {
		"scope.userFuzzyLocation" : {
			"desc" : "为了给用户提供更好的服务"
		}
	},
	"requiredPrivateInfos": ["getFuzzyLocation"]

如果你是使用uni-app的话,你直接用hbuilderx以源码视图方式打开manifest.json文件,找到mp-weixin微信项配置按如下配置好

STEP 3:接口调用

查了uni-app官方文挡都没有找到uni.getFuzzyLocation接口的说明,但是你在调用的时候是可以调用的,如果你实在不放心,可以直接使用wx.getFuzzyLocation接口。

接口调用注意事项:

你调用uni/wx.getFuzzyLocation的时候如果没有授过权会弹出授权的提示弹框,只有用户同意了才能获取地理位置信息,这里如果用户拒绝就无法再次唤起授权弹框,微信会记住授权状态,所以这里如果用户选了同意,那就万事大吉了,但是如果用户选择了拒绝,那后面就一直无法再获取用户位置信息了。

如果你获取用户的位置是可有可无的,你可以把位置信息当可选项,用户不同意你就不上传即可,但是如果你需求是位置信息是必需要的,那这里你需要做一些引导,引导用户去开启权限,对于引导你又要注意二种情况,一种是小程序位置授权没开启,另一种是微信APP位置权限没开启,下面是关键代码:

uni.getFuzzyLocation({
	type: 'gcj02',
	success(res){
		// 位置信息获取成功
		// ...
	},
	fail(err) {
		// 位置信息获取失败
		if (['getLocation:fail auth deny','getLocation:fail:auth denied','getLocation:fail:system permission denied'].includes(err.errMsg)) {
			if (是否是需要强制获取位置信息的) {
			  //小程序位置信息获取被拒绝
				if (['getLocation:fail auth deny','getLocation:fail:auth denied'].includes(err.errMsg)) {
					uni.showModal({
						content: "为了您享受到更好的优惠,请授权位置信息后下单",
						confirmText: '去授权',
						cancelText: '再想想',
						success(res) {
							if (res.confirm) {
								// 去小程序位置授权页
								uni.openSetting();
							} else if (res.cancel) {
								console.log('小程序权授没有开启。微信用户点击取消');
							}
						}
					})
				}
				// 微信位置信息获取权限没有打开
				if (err.errMsg === 'getLocation:fail:system permission denied') {
					uni.showModal({
						content: "请确认是否已授权APP位置权限",
						confirmText: '知道了',
						showCancel: false,
						success(res) {
							console.log('微信app权限没有开启', res);
						}
					})
				}
			}
		}
	}
})

注:查了微信官方文挡,并没有对应的错误提示说明,我是多次测试发现的上面的错误提示加入的判断,如果你有官方的错误提示说明文挡链接,欢迎分享出来,谢谢了。

总结

使用微信的地理位置接口分三步

  1. 申请权限:按需选用wx.getFuzzyLocation(易申请)、wx.getLocation(较难申请)
  2. 填写接口权限配置:原生小程序在app.json里配置,uniapp在manifest.json里配置
  3. 接口调用:根据自己需求这里要对权限失败的场景做好引导

标签:getLocation,微信,app,申请,接口,uni,权限
From: https://www.cnblogs.com/xwwin/p/18619824

相关文章

  • Mastering Communication Skills: A Path to Personal and Professional Success
    MasteringCommunicationSkills:APathtoPersonalandProfessionalSuccess-DEVCommunityhttps://dev.to/nozibul_islam_113b1d5334f/mastering-communication-skills-a-path-to-personal-and-professional-success-3995Communicationskillsplayavitalrolein......
  • 如何针对app应用类产品进行数据分析制定运营方案
    一、项目背景某科技公司推出一款AI智能写作助手,旨在帮助用户快速生成高质量的文章、文案等内容。产品上线一段时间后,积累了一定数量的用户,但在用户增长、注册转换、付费转换以及用户粘性等方面仍面临挑战,需要通过数据分析制定针对性的用户运营方案,以提升产品的整体运营效果......
  • Unix C:系统调用IO
    文件描述符FILE结构体查看stdio.h头文件中,有FILE结构体的定义://stdio.htypedefstruct_iobuf{char*_ptr;//文件输入的下一个位置int_cnt;//当前缓冲区的相对位置char*_base;//文件初始位置int_flag;//文件标......
  • Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
            本文仅作学习交流,不做任何商业用途        郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴                                                         版本:Unity6......
  • 智能脂肪秤方案app蓝牙称重方案研发
    智能脂肪秤方案,一种测量仪器,针对人体体重智能分析的仪器,相比传统的指针式体重秤,具有精度高、锁定显示、读数方便、体积小、重量轻等优势。这种智能脂肪秤,由于其测量的数据精准和价格便宜,面向的也不仅仅是医疗行业,更多的是面对个人家庭,因为,现如今由于人们对于消费观念的改变,导......
  • 【Unity实用技巧】Transform组件位置快速对齐(编辑器扩展)
    前言在Unity项目开发中,经常需要调整物体的位置。特别是在处理3D模型时,我们可能需要将一个父物体移动到其所有子物体的中心位置或底部中心位置。本文将介绍如何通过Unity编辑器扩展来实现这个功能,让美术同学在摆放模型时更加方便。一、效果演示二、完整代码这里直接上......
  • App端合并需求
      用这次的测试版本,去对比上一次的release版本,看数据是否一致马上分期Android?数据看板,这三个去掉新开发的在ors-portal-test,与最新的realse版本进行比对(原生的就和这个对比,向开发确认ctest4是否为最新的),web端与ctest1对比这次是用这个来测试,这个是新开发的要测的链接  ......
  • SD模型微调之Textual Inversion和Embedding fine-tuning
    SD模型微调方法TextualInversion详细介绍,包括数据集准备,模型微调过程,推理过程,优缺点等。......
  • 微信小程序、H5、Web 和 App 是不同的移动应用开发和部署形式。每种形式都有其特定的
    微信小程序、H5、Web和App是不同的移动应用开发和部署形式。每种形式都有其特定的技术架构、使用场景和优缺点。以下是这些平台的详细对比,按关键因素表格化:对比维度微信小程序H5WebNativeApp平台支持微信平台(需安装微信)任何支持浏览器的设备(手机、PC、平板等)......
  • WPF GeometryCombineMode Exclue,Intersect,Union,Xor
      <Windowx:Class="WpfApp72.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.micro......