# 地图 API Key 配置文档 > 创建时间:2026-06-04 > 更新说明:2026-06-04 新建文档,记录各平台地图配置机制及 H5 鉴权失败问题排查 --- ## 一、概述 本项目 vr-shopxo-uniapp 支持多端部署(APP、H5、微信小程序等),不同平台使用不同的地图 SDK,对应的 API Key 配置方式也不同。 **问题背景**:在 H5 本地预览模式下,打开地图时报错 "鉴权失败,请传入正确的 key",经排查是腾讯地图 JS SDK 的 Key 配置问题。 --- ## 二、各平台地图配置对比 | 平台 | 地图SDK | Key 配置位置 | Key 来源 | 是否需要服务端配置 | |------|---------|-------------|----------|------------------| | **APP (Android)** | 高德地图原生 SDK | `manifest.json` → `app-plus.distribute.sdkConfigs.maps.amap.appkey_android` | 固定写死 | ❌ 不需要 | | **APP (iOS)** | 高德地图原生 SDK | `manifest.json` → `app-plus.distribute.sdkConfigs.maps.amap.appkey_ios` | 固定写死 | ❌ 不需要 | | **H5** | 腾讯地图 JS SDK | `manifest.json` → `h5.sdkConfigs.maps.tencent.key` | 固定写死 | ❌ 不需要 | | **微信小程序** | 微信内置地图 (`uni.openLocation`) | 无需配置 | 无需 Key | ❌ 不需要 | | **微信小程序** (插件模式) | 腾讯位置服务插件 | 服务端 `config.common_tencent_map_ak` | 动态读取 | ✅ 需要 | --- ## 三、各平台详细配置 ### 3.1 APP 高德地图配置 **配置文件**:`manifest.json` ```json "app-plus": { "distribute": { "sdkConfigs": { "maps": { "amap": { "name": "amapu9VF72Gg", "appkey_ios": "f55e9099897821681f5c74051e4527bd", "appkey_android": "ebe9f1d84f8ceb8b3c4ba6ead2bfa78b" } } } } } ``` **说明**: - `name`:高德地图应用名称 - `appkey_android`:Android 平台 Key - `appkey_ios`:iOS 平台 Key **申请地址**:[高德开放平台](https://lbs.amap.com/) --- ### 3.2 H5 腾讯地图配置 **配置文件**:`manifest.json` ```json "h5": { "sdkConfigs": { "maps": { "tencent": { "key": "XZHBZ-4OUKA-SMSKV-CXXHB-OKOGQ-FSF6U" } } } } ``` **说明**: - 使用腾讯位置服务 WebServiceAPI Key - Key 需在腾讯位置服务控制台申请 - 支持 Web JS API 调用 **申请地址**:[腾讯位置服务控制台](https://lbs.qq.com/) **常见问题**: - "鉴权失败,请传入正确的 key" → Key 无效或未申请 - Key 的服务权限需包含 WebServiceAPI - 生产环境需在控制台配置安全域名(可选) --- ### 3.3 微信小程序配置 #### 3.3.1 默认模式(推荐) 微信小程序默认使用 `uni.openLocation()` → 调用微信内置地图,**无需配置任何地图 API Key**。 ```javascript // App.vue open_location 函数中的默认逻辑 uni.openLocation({ name: name, address: address, scale: scale, longitude: lng, latitude: lat, }); ``` **优点**: - 无需申请地图 Key - 用户体验流畅(调用微信原生地图) - 无额外配置 **缺点**: - 功能受限(无路线规划等高级功能) #### 3.3.2 插件模式(可选) 如果需要使用腾讯位置服务的路线规划功能,可在微信小程序后台添加插件: **配置步骤**: 1. 登录 [微信小程序后台](https://mp.weixin.qq.com/) 2. 设置 → 第三方设置 → 插件管理 → 添加插件 3. 搜索「腾讯位置服务路线规划」并添加 **manifest.json 配置**: ```json "mp-weixin": { "plugins": { "routePlan": { "version": "1.0.19", "provider": "wx50b5593e81dd937a" } } } ``` **代码调用**(需开启 `is_weixin_open_location_use_plugins = 1`): ```javascript // App.vue L1737-1750 if (this.data.is_weixin_open_location_use_plugins == 1) { var key = this.get_config('config.common_tencent_map_ak') || null; if (key != null) { var plugin = requirePlugin('routePlan'); var end_point = JSON.stringify({ name: name, longitude: lng, latitude: lat, }); uni.navigateTo({ url: 'plugin://routePlan/route-plan?key=' + key + '&referer=' + appName + '&endPoint=' + end_point, }); } } ``` **Key 来源**:服务端配置 `config.common_tencent_map_ak` --- ## 四、open_location 函数解析 **文件**:`App.vue` L1721-1760 ```javascript open_location(lng, lat, name, address, scale) { // 参数校验 if (lng == undefined || lat == undefined || lng == '' || lat == '') { this.showToast('位置信息不正确'); return false; } lat = parseFloat(lat); lng = parseFloat(lng); // #ifdef MP-WEIXIN // 微信小程序插件模式 if (this.data.is_weixin_open_location_use_plugins == 1) { var key = this.get_config('config.common_tencent_map_ak') || null; // 使用腾讯位置服务插件... } // #endif // 默认:调用 uni.openLocation uni.openLocation({ name: name, address: address, scale: scale || 18, longitude: lng, latitude: lat, }); } ``` **调用链路**: 1. `app.globalData.open_location(lng, lat, name, address)` 2. 平台条件编译(`#ifdef MP-WEIXIN`) 3. 判断是否使用插件模式 4. 调用地图原生 API --- ## 五、服务端配置读取机制 **配置数据流**: ``` 服务端 API /api/common/base ↓ 响应写入缓存 key: 'cache_config_info_key' ↓ App.vue this.get_config('config.xxx') 读取 ``` **关键代码**(`App.vue`): ```javascript // 获取配置(从缓存读取) get_config(key, default_value) { var config = uni.getStorageSync(this.data.cache_config_info_key) || null; // 解析 key.xxx.yyy 格式 var arr = key.split('.'); // ... } // 初始化配置(从服务端拉取) init_config(num = 0, object, method, params) { uni.request({ url: this.get_request_url('common', 'base'), method: 'POST', data: { is_key: 1 }, success: (res) => { if (res.data.code == 0) { var data = res.data.data; uni.setStorageSync(this.data.cache_config_info_key, data); } } }); } ``` --- ## 六、常见问题排查 ### Q1: H5 预览报错 "鉴权失败,请传入正确的 key" **原因**:H5 的腾讯地图 Key 无效或未配置 **排查步骤**: 1. 检查 `manifest.json` 中 `h5.sdkConfigs.maps.tencent.key` 是否存在 2. 登录 [腾讯位置服务控制台](https://lbs.qq.com/) 验证 Key 状态 3. 确认 Key 已开通 WebServiceAPI 服务 4. 如 Key 无效,重新申请并更新 `manifest.json` ### Q2: 微信小程序地图无法打开 **原因**:可能是权限问题或未正确声明位置权限 **排查步骤**: 1. 检查 `manifest.json` 中 `mp-weixin.requiredPrivateInfos` 是否包含 `chooseLocation` / `getLocation` 2. 检查 `mp-weixin.permission.scope.userLocation.desc` 是否配置 3. 用户首次使用时需授权位置权限 ### Q3: APP 地图无法定位 **原因**:高德地图 Key 配置错误或未申请原生定位模块 **排查步骤**: 1. 检查 `manifest.json` 中 `app-plus.modules.Geolocation` 是否启用 2. 检查 `app-plus.distribute.sdkConfigs.maps.amap.appkey_android` 是否正确 3. 检查 `AndroidManifest.xml` 是否配置定位权限(通常由云打包自动处理) ### Q4: 服务端配置 `config.common_tencent_map_ak` 未生效 **原因**:配置未同步或缓存问题 **排查步骤**: 1. 确认服务端 `common/base` API 返回了 `config.common_tencent_map_ak` 字段 2. 清除小程序缓存,重新加载配置 3. 检查 `is_weixin_open_location_use_plugins` 是否设置为 1 --- ## 七、配置检查清单 | 项目 | 检查点 | 状态 | |------|--------|------| | **H5 腾讯地图** | `manifest.json` 中 `h5.sdkConfigs.maps.tencent.key` 是否有效 | ✅ 已更新 | | **APP 高德地图 Android** | `manifest.json` 中 `appkey_android` 是否有效 | ✅ 正常 | | **APP 高德地图 iOS** | `manifest.json` 中 `appkey_ios` 是否有效 | ✅ 正常 | | **微信小程序** | `manifest.json` 中 `requiredPrivateInfos` 包含位置权限 | ✅ 正常 | | **微信小程序插件模式** | 服务端配置 `config.common_tencent_map_ak` | 可选功能 | --- ## 八、参考链接 | 资源 | 地址 | |------|------| | 腾讯位置服务控制台 | https://lbs.qq.com/ | | 高德开放平台 | https://lbs.amap.com/ | | uni.openLocation 文档 | https://uniapp.dcloud.net.cn/api/location/open-location.html | | uni.getLocation 文档 | https://uniapp.dcloud.net.cn/api/location/get-location.html | | 微信小程序地图组件 | https://developers.weixin.qq.com/miniprogram/dev/component/map.html | --- ## 九、更新记录 | 日期 | 更新内容 | |------|---------| | 2026-06-04 | 新建文档,记录各平台地图配置机制及 H5 鉴权失败问题排查 | | 2026-06-04 | 更新 `manifest.json` 中的 H5 腾讯地图 Key(`XZHBZ-4OUKA-SMSKV-CXXHB-OKOGQ-FSF6U`) |