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

React Native安卓应用受限Google API Key下Autocomplete服务异常问题

React Native Android受限密钥下Place Autocomplete失效但地图正常的原因及解决办法

核心原因

1. 请求来源的验证逻辑不同

地图组件(如MapView)通过Google Maps SDK for Android发起本地请求,会自动携带应用的包名和SHA-1签名信息,完全符合Android密钥限制的验证规则,因此能正常访问。而Place Autocomplete服务在多数React Native实现中,是通过HTTP API直接调用发起请求,这类请求不会自动附加安卓应用的签名和包名,导致受限密钥无法验证请求合法性,直接拦截。

2. API服务的限制范围不匹配

部分React Native的Autocomplete库依赖Web端的Place API端点,而Android密钥限制仅对安卓SDK发起的请求生效,对Web/HTTP API请求不兼容,所以启用限制后这类请求会被拒绝。

解决步骤

  • 确保Autocomplete请求携带验证参数
    如果是直接调用HTTP API,必须在请求中手动添加packageName和signature参数,参数值要和密钥限制中配置的包名、SHA-1签名完全一致。示例参数:

    https://maps.googleapis.com/maps/api/place/autocomplete/json?input=上海&key=YOUR_RESTRICTED_KEY&packageName=com.your.app.id&signature=AA:BB:CC:...(你的SHA-1签名)
    

    如果使用的是原生Places SDK封装的RN库,检查安卓端是否正确初始化SDK,确保请求自动携带验证信息。

  • 检查密钥的API权限配置
    登录Google Cloud控制台,确认受限密钥已经启用了Place Autocomplete API和Places API,避免只开启了Maps SDK for Android而漏开Places相关服务。

  • 核对签名与包名的一致性
    确认密钥限制中配置的包名、SHA-1签名和当前构建应用使用的签名完全匹配(注意debug和release签名的区别:debug签名默认由Android Studio生成,release签名是你自己的密钥文件)。可以用keytool命令查看签名:

    keytool -list -v -keystore ./your-keystore.jks -alias your-alias-name
    
  • 替换为原生封装的Places库
    放弃HTTP API调用,改用基于Google Places SDK for Android封装的React Native库(如react-native-google-places),这类库会自动遵循安卓密钥的限制规则,无需手动处理验证参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:07:09