Places SDK for Android:API密钥应用限制后触发授权错误求助
针对你遇到的「设置API密钥Android应用限制后,Places Autocomplete功能失效,提示IP未授权、空referer」的问题,给你几个具体排查方向:
核对SHA-1指纹与构建类型匹配
很多人会混淆debug和release版本的SHA-1指纹:debug版用的是Android Studio默认的debug.keystore,release版用的是你自己的签名keystore。确保你在Google Cloud控制台填写的SHA-1,和当前测试的应用构建版本的指纹完全一致。可以通过Android Studio的「Gradle -> 你的项目 -> Tasks -> android -> signingReport」查看准确的SHA-1,或者用命令行:keytool -list -v -keystore <你的keystore文件路径> -alias <密钥别名>确认API密钥限制类型与调用方式匹配
如果你用的是Places SDK for Android官方客户端库(比如Autocomplete Widget或者PlacesClient API),必须选择「Android应用」类型的密钥,并且填写正确的applicationId(注意是build.gradle里的applicationId,不是AndroidManifest里的包名,两者可能不一致)。
但如果是直接通过HTTP请求调用Places Web API(比如用Retrofit、OkHttp发请求到https://maps.googleapis.com/maps/api/place/autocomplete/json),这种情况下Android应用的包名+SHA-1限制是不生效的,因为Web API只识别IP或HTTP referer限制,这时候你需要用「服务器密钥」(并限制后端服务器IP),或者让客户端直接用Android密钥但改用官方SDK调用,不要直接调用Web API。检查API启用状态
确认Google Cloud控制台里,你使用的服务对应的API已经启用:- 用Places SDK for Android的话,要启用「Places SDK for Android」
- 用Web API的话,要启用「Places API」
两者是不同的服务,启用错了也会导致权限问题。
等待限制规则生效并清理缓存
Google Cloud的API密钥限制规则不是实时生效的,可能需要5-15分钟才能同步到所有服务器。设置完限制后,不要立刻测试,等一段时间再试。同时,卸载重装测试应用,清除应用缓存,避免旧的密钥配置被缓存。排查是否存在请求转发
如果你的应用是通过自己的后端服务器转发Places API请求,那么后端发出的请求会使用服务器的公网IP,这时候后端需要使用「服务器密钥」并设置IP限制(填写后端服务器的公网IP),而客户端的Android密钥只用于客户端直接调用的场景。
内容的提问来源于stack exchange,提问作者mathAndCats

