
在开发基于UniApp的微信小程序时,位置权限和第三方插件的使用是两个非常常见的需求。然而,很多开发者(尤其是新手)经常会遇到两个让人头疼的问题:不管怎么点,小程序就是反复弹窗要求开启位置权限;以及明明配好了插件,控制台却报错“插件未授权使用”。
当调用 uni.getLocation 获取用户位置时,即使已经点击过“允许”,下次使用或重新打开小程序时,依然反复弹出授权请求,或者干脆直接失败并报错。
这个问题通常由以下三个原因中的某一个或几个共同导致:
manifest.json 中显式声明。manifest.json 配置(最关键)打开项目根目录下的 manifest.json 文件,切换到源码视图,在 "mp-weixin" 节点下添加以下配置:
{
"mp-weixin": {
"appid": "你的小程序AppID",
// 【必须】声明你要使用的隐私接口
"requiredPrivateInfos": ["getLocation", "chooseLocation"],
// 【强烈建议】配置调用接口前的授权弹窗说明文字
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于提供附近服务或路线规划"
}
}
}
}配置项 | 作用 | 是否必须 |
|---|---|---|
| 声明小程序将使用的隐私接口,这是微信官方的硬性要求。 | 必须 |
| 配置调用接口前向用户展示的弹窗说明,需清晰描述获取位置的目的。 | 强烈建议 |
注意:
requiredPrivateInfos数组中只应包含地理位置相关的接口,如getLocation、chooseLocation等,不要混入getPhoneNumber等其他接口。
配置好文件后,需要在前端代码中实现一个健壮的授权流程。下面是一个封装好的通用方法,它会自动处理“已授权”、“未授权”、“拒绝后重新授权”等多种情况。
// utils/location.js
// 获取当前位置的完整方法
export function getLocation() {
return new Promise((resolve, reject) => {
// 1. 先检查当前授权状态
uni.getSetting({
success: (settingRes) => {
const authStatus = settingRes.authSetting['scope.userLocation'];
// 状态1:用户已经授权,直接获取位置
if (authStatus === true) {
uni.getLocation({
type: 'gcj02',
success: resolve,
fail: reject
});
}
// 状态2:用户尚未授权或拒绝过,需要发起授权请求
else {
uni.authorize({
scope: 'scope.userLocation',
success: () => { // 用户点击了“允许”
uni.getLocation({
type: 'gcj02',
success: resolve,
fail: reject
});
},
fail: () => { // 用户点击了“拒绝”
// 引导用户去设置页手动开启
uni.showModal({
title: '提示',
content: '我们需要获取您的位置信息来提供相关服务,请前往设置开启。',
confirmText: '去设置',
success: (modalRes) => {
if (modalRes.confirm) {
uni.openSetting({
success: (openRes) => {
if (openRes.authSetting['scope.userLocation']) {
// 重新获取
getLocation().then(resolve).catch(reject);
} else {
reject(new Error('用户未开启位置权限'));
}
}
});
} else {
reject(new Error('用户拒绝授权'));
}
}
});
}
});
}
},
fail: reject
});
});
}
// 使用示例
getLocation().then(res => {
console.log('获取成功', res.latitude, res.longitude);
}).catch(err => {
console.log('获取失败', err.message);
});如果代码和配置都正确,但授权弹窗始终不出现或直接报错,请检查以下两项系统设置:
wx50b5593e81dd937a)在控制台看到类似以下的报错信息:
VM2201:2 wx50b5593e81dd937a 插件未授权使用 添加插件
wx50b5593e81dd937a 是什么?wx50b5593e81dd937a 是腾讯位置服务官方提供的“路线规划”微信小程序插件的AppID。
它是一个封装好的功能包,能让你的小程序快速拥有地图路线规划能力(如驾车、公交、步行路线),而无需从零开发。它的主要功能包括:
这个问题的根本原因是:你只在代码中配置了插件,但没有在微信公众平台后台添加该插件的使用权限。
解决步骤如下:
mp.weixin.qq.com)。wx50b5593e81dd937a。确保你的 manifest.json 中插件配置正确,建议使用较新的稳定版本号。
"mp-weixin" : {
// ... 其他配置
"plugins" : {
"routePlan" : {
"version" : "2.2.0", // 建议使用最新稳定版
"provider" : "wx50b5593e81dd937a"
}
}
}完成后台添加后,在微信开发者工具中点击 工具 → 清缓存 → 全部清除,然后重新编译项目,错误提示就会消失。
请务必注意,“腾讯位置服务路线规划”插件的服务类目是“出行与交通-路况”,个人主体的小程序无法申请接入。
如果你的小程序是个人类型,可以选择以下替代方案:
map 组件,并调用第三方地图API(如腾讯地图API或高德地图API)来手动实现路线规划功能。解决UniApp微信小程序开发中的位置权限和插件授权问题,核心思路如下:
问题 | 核心解决步骤 |
|---|---|
反复提示位置权限 |
|
路线规划插件未授权 |
|
按照以上步骤排查和修改,你的UniApp微信小程序应该能够顺利获取位置权限,并正常使用第三方插件了。希望这篇文章能帮助你少走弯路,提高开发效率!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。