uni-app 不支持 Google Maps 是因官方无原生插件适配,其 map 组件仅封装腾讯、高德、百度等地图;H5 需手动集成 JS API,App 端须用 renderjs + 原生 SDK 双通道实现。

uni-app 不能直接用 Google Maps 官方 SDK,所谓“Google 地图”在海外版 uni-app 中实际是靠 Web 端 JS API + map 组件降级模拟,或彻底绕开组件、用 renderjs + echarts / 原生地图 SDK 实现。
为什么 uni-app 的 map 组件不支持 Google Maps
uni-app 的内置 map 组件本质是各端原生地图能力的抽象壳:微信走腾讯、H5 默认走高德、App 端依赖 maps-amap 或 maps-baidu 插件。Google Maps 没有官方适配 uni-app 的原生插件,也没有被 DCloud 列入默认支持列表。
- 你写
<map>标签,H5 端若没配高德 key,会静默变成灰色占位图,不是加载 Google 地图 - 试图在
manifest.json里填 Google Maps API Key —— 完全无效,uni-app 不读这个字段 - 海外 App(iOS/Android)打包时,即使集成了 Google Maps SDK,
map组件仍无法自动桥接,因为缺少对应nativePlugin封装
H5 端接入 Google Maps JS API 的实操路径
这是目前最可行、成本最低的方案,但必须放弃 map 组件,改用纯 Web 方式渲染。
Google Calendar API 快速入门:创建项目、启用 API、设置 OAuth 2.0 凭据。本指南将引导您完成下载凭据文件并将其用于访问 API 的全过程。
- 在
index.html或页面<script>中动态加载 Google Maps JS API:https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&v=3.52(注意指定 v=3.52 或稳定版本,避免 v=weekly 导致意外升级崩掉) - 用
<div id="google-map"></div>占位,配合height: 100vh等样式确保可见 - 在
onReady或mounted中初始化:new google.maps.Map(document.getElementById('google-map'), { center: { lat: 37.7749, lng: -122.4194 }, zoom: 12 }) - 标记点、点击事件、InfoWindow 都得用 Google Maps 原生 API 写,
@markertap这类 uni-app 事件完全不触发 - ⚠️ 注意 CSP:Google Maps 要求
connect-src 'self' https://maps.googleapis.com,否则控制台报错Refused to connect to 'https://maps.googleapis.com/...'
App 端(iOS/Android)真正显示 Google 地图的唯一方式
必须放弃 map 组件,走 renderjs + 原生插件双通道方案。
- iOS:需在 Xcode 工程中手动集成
GoogleMapsCocoaPods,并在AppDelegate.m中调用[GMSServices provideAPIKey:@"YOUR_KEY"] - Android:需在
android/app/build.gradle加implementation 'com.google.android.libraries.maps:maps:18.2.0',并在MainApplication.java初始化 - 前端用
renderjs加载自定义 JS,在里面调用原生模块(如通过uni.requireNativePlugin)传经纬度、触发 marker 渲染 —— 这已超出 uni-app 基础能力,属于混合开发范畴 - ⚠️ 兼容性风险:Google Maps iOS SDK 从 v6.x 开始强制要求启用 Metal 渲染,老机型或未开启 GPU 加速的设备可能白屏
替代方案:用 echarts + GeoJSON 做轻量“世界地图”
如果只是展示国家/大洲级区域、支持下钻点击,不需卫星图、路况、实时定位,echarts 是更稳的选择。
- 下载标准世界 GeoJSON(如 Natural Earth 提供的
ne_110m_admin_0_countries.geojson),丢进项目 static 目录 - 用
renderjs加载echarts@4.9.0(新版对 Web Worker 支持不一致,易出Cannot access 'echarts' before initialization错误) - 注册地图:
echarts.registerMap('world', geoJson),然后用series.type = 'map'渲染 - 点击事件通过
chart.on('click', (params) => { this.$ownerInstance.callMethod('onMapClick', params.name) })透传回 Vue 层 - 优势:无网络依赖(离线可用)、无 Key 管理、坐标系统一为 WGS84,不踩 GCJ-02 偏移坑
真正想用 Google 地图,就得接受它不是“配置一下就能用”的功能,而是要按 Web 或原生两个路径分别攻坚。最容易被忽略的,是 H5 端的 CSP 和 App 端的原生初始化时机 —— 这俩不搞定,连第一张地图都出不来。

















