必须分平台配置高德key:android校验packagename+sha1,ios校验bundleidentifier;h5需web sdk key并配置securityjscode;逆地理编码须用web服务key;uni.getlocation需指定type:'gcj02'(app-plus)或改用amap.geolocation(h5)。

manifest.json 里必须分平台填 Android/iOS Key,不能共用一个字符串
Android 和 iOS 的高德 Key 是两套独立校验机制:Android 校验 packageName + SHA1,iOS 校验 bundleIdentifier。哪怕你把同一个字符串复制粘贴到两边,任一平台都会定位失败,uni.getLocation 返回 errCode: 10002 或静默无响应。
必须在 manifest.json 的 "app-plus" 节点下显式分开配置:
"app-plus": {
"distribute": {
"android": {
"maps": {"AMap": "your-android-key-here"},
"packageName": "com.example.app"
},
"ios": {
"maps": {"AMap": "your-ios-key-here"},
"bundleIdentifier": "com.example.app"
}
}
}
- Android Key 申请时,
keytool -list -v -keystore your-release-key.keystore得到的 SHA1 必须和高德控制台填写的一致;调试用的debug.keystore默认路径是~/.android/debug.keystore - iOS Key 申请时,
bundleIdentifier必须和 Xcode 工程中设置的完全一致(大小写敏感),且高德控制台要勾选「iOS 平台」 - HBuilderX 云打包若用了自定义证书,务必用该证书重新生成 SHA1 填到高德控制台,否则真机调试通过、云打包后失效
H5 端要用 Web SDK Key,且必须配 securityJsCode
H5 不走原生 SDK,而是加载高德 JSAPI,所以 Key 类型完全不同:必须申请「Web 端(JS API)」类型密钥,并在 manifest.json 的 "h5" 节点下配置,漏掉 securityJsCode 会导致地图白屏或定位失败。
高德地图 API 调用工具,返回原始 JSON 数据。Use when users ask about 天气、地址、坐标、周边、路线、导航、打车、行程 in China. Commands: weather, geo, regeo, search, around, detail, route, distance,...
"h5": {
"sdkConfigs": {
"maps": {
"amap": {
"key": "your-web-key",
"securityJsCode": "your-security-js-code",
"serviceHost": "https://your-domain.com"
}
}
}
}
-
securityJsCode是高德新版 JSAPI 的强制安全字段,不填或填错会直接报Invalid key - Web Key 的「安全设置」里必须添加当前 H5 域名(支持通配符,如
https://*.example.com),本地开发用http://localhost:8080也要手动加进去 - 注意:H5 端不支持
type: 'gcj02',uni.getLocation返回的是 WGS84 坐标,需用高德 JSAPI 的AMap.Geolocation实例重新获取 GCJ-02 坐标
逆地理编码要用 Web 服务 Key,不是地图展示 Key
调用 https://restapi.amap.com/v3/geocode/regeo 这类 HTTP 接口,必须用「Web 服务」类型密钥,和前面所有 Key 都不通用。常见错误是拿 Android Key 或 Web SDK Key 直接拼进 URL,结果返回 {"status":"0","info":"INVALID_USER_KEY","infocode":"10002"}。
- Web 服务 Key 申请时,「服务平台」选「Web 服务」,白名单 IP 可填
0.0.0.0/0(开发阶段)或具体服务器出口 IP - 接口参数中
location是经度,纬度(注意顺序!不是纬度在前),且坐标系必须是 GCJ-02 - 不要在前端直接暴露 Web 服务 Key——应由后端代理请求,或用高德「安全密钥」做签名(
sig参数),否则 Key 可被爬取
uni.getLocation 必须指定 type: 'gcj02' 才能和地图标记对齐
高德地图 SDK 内部使用国测局加密坐标系(GCJ-02),而 uni.getLocation 默认返回 WGS84(GPS 原始坐标)。如果你用 type: 'wgs84' 拿到的经纬度直接传给 <map></map> 组件,标记点会偏移 500 米以上——这不是精度问题,是坐标系错配。
正确写法:
uni.getLocation({
type: 'gcj02',
success(res) {
console.log(res.latitude, res.longitude); // 这组值可直接喂给 <map> 的 latitude/longitude
}
});</map>
-
type: 'gcj02'仅在app-plus环境下有效,H5 端需改用高德 JSAPI 的AMap.Geolocation - 运行时判断可用
uni.getSystemInfoSync().platform === 'app-plus',避免 H5 报错 - 如果用
<map></map>组件的show-location属性,它内部已自动处理 GCJ-02,但你自己传入的markers坐标仍需手动转
type: 'gcj02' 在多端条件下的兼容写法——这两处出错,地图要么不显示,要么标记全飘在海里。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










