You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

受限Google API密钥仅移除包限制后部分服务可用的问题求助

Flutter Google API密钥包SHA1限制导致部分服务失效的解决方案

现状梳理

已启用的Google API服务:

  • Directions API
  • Geocoding API
  • Geolocation API
  • Identity API
  • Toolkit API
  • Maps SDK for Android
  • Maps Static API
  • Places API

各功能可用性:

  • google_maps_flutter 地图功能:始终可用
  • flutter_google_places 地点自动补全:仅移除包SHA1限制后可用
  • geolocator 用户定位:始终可用
  • google_place 地点评论:仅移除包SHA1限制后可用
  • flutter_polyline_points 两点路径规划:仅移除包SHA1限制后可用

问题根源

核心原因是不同Flutter插件调用Google API的方式存在差异,包SHA1限制仅对Android SDK原生调用生效,而部分插件依赖的是Web服务类API,这类API不识别Android包SHA1限制:

  • google_maps_flutter 直接调用Maps SDK for Android,完全匹配包SHA1限制规则,所以不受影响
  • geolocator 依赖设备系统定位或Geolocation API的设备端调用,也符合包限制要求
  • 失效的三个插件,调用的是Places Web Service、Directions Web Service这类纯HTTP接口,这类接口的访问限制逻辑和Android包无关,包SHA1限制会直接拦截它们的请求

解决步骤

  1. 拆分API密钥
    在Google Cloud控制台创建两个独立的API密钥:
    • 密钥1(Android专属):配置包名+SHA1指纹限制,关联Maps SDK for Android、Geolocation API等Android原生服务
    • 密钥2(Web服务专属):配置IP地址限制(测试阶段用本地公网IP,生产环境如果是后端代理则用服务器IP),关联Directions API、Places API(Web服务)、Geocoding API等Web服务类API
  2. 分插件配置密钥
    在Flutter项目中给不同插件指定对应密钥:
    • google_maps_flutter 使用密钥1
    • flutter_google_places、google_place、flutter_polyline_points 使用密钥2
  3. 验证权限关联
    检查每个密钥的API关联列表,确保没有漏开对应服务的权限,避免因权限缺失导致的请求失败

额外提醒

  • Web服务类API不要配置Android包SHA1限制,这类限制对纯HTTP请求无效
  • 生产环境建议通过后端代理Web服务API请求,既可以避免客户端暴露密钥,也能更安全地管控IP访问范围

内容的提问来源于stack exchange,提问作者Matteo Antolini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:13:22