React Native配置Google API Key限制后接口报未授权错误
问题原因与解决方案
你遇到的授权报错本质是配置了移动端应用访问限制的Google API密钥,仅支持通过对应平台的官方Google SDK发起调用,直接构造原生HTTP请求无法自动携带应用身份校验信息,服务端无法验证来源合法性就会拦截请求,不需要你手动拼接特殊请求头,手动伪造的身份头也不会被服务端认可。
核心排查&修复点
- 禁止直接用通用HTTP客户端(fetch、axios、OkHttp、URLSession等)手动拼接API URL发起请求
这类纯HTTP请求不会携带你的Android包名+签名SHA-1、iOS Bundle ID的校验凭证,服务端收到的请求就会出现你日志里的empty referer标记,哪怕你在Google Cloud后台填的配置信息100%正确也会被拦截。 - Android端校验规则
必须接入对应Google服务的官方SDK,同时确认两点:- 运行的安装包是用你在后台配置过SHA-1的签名证书打包的,debug调试时要额外把本地debug keystore的SHA-1也加到密钥的允许列表里,不要只配置发布证书的SHA-1
- 测试设备已安装正常运行的Google Play服务,SDK会自动和Play服务交互完成应用签名校验,自动生成合法的身份凭证附在请求中,无需手动配置任何请求头
- iOS端校验规则
同样必须接入对应服务的官方Google SDK,SDK会自动读取应用的Bundle ID,通过系统校验逻辑生成合法身份凭证传递给服务端,手动给请求加Referer或自定义包名头都无法通过校验。 - 限制规则互斥排查
不要给同一个API密钥同时配置移动端应用限制+IP限制/网页端HTTP referer限制,不同类型的访问限制互斥,同时开启时服务端会优先按IP/网页规则校验,必然会拦截移动端合法请求。
验证逻辑
你移除所有访问限制后接口可以正常调用,已经可以排除密钥错误、接口路径错误、网络连通性问题,故障100%来自调用方式不符合移动端密钥的校验要求,或者运行环境的签名/Bundle ID和后台配置不匹配。
内容的提问来源于stack exchange,提问作者Fapi
相关产品推荐
相关产品推荐

