Android应用集成Google Places API遇9008错误求助
这个错误码9008本质上就是你的API密钥的Android应用限制和当前运行的App不匹配导致的——我帮你梳理几个最容易踩坑的排查点,结合你已经做的操作,应该能快速解决:
把SHA-1指纹的核对做到极致
很多人栽在debug和release指纹搞混,或者忽略了Google Play应用签名的特殊情况:- 如果你用Android Studio默认的debug签名,用这个命令生成绝对准确的SHA-1:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - 发布版的话,用你自己的签名文件生成:
keytool -list -v -keystore /path/to/your/release.keystore -alias your-alias - 要是你开启了Google Play应用签名,必须去Google Play控制台的「应用签名」页面,复制「应用签名密钥」的SHA-1,而不是你本地的上传密钥——这是超级容易被忽略的点!
- 如果你用Android Studio默认的debug签名,用这个命令生成绝对准确的SHA-1:
包名必须完全丝毫不差
检查AndroidManifest.xml里的package属性(比如com.yourcompany.yourapp),和Google开发者控制台里填写的包名要完全一致:大小写、连字符、后缀一个都不能错。如果你的App有多个productFlavors,每个变种的包名可能不同,要分别添加对应的包名+SHA-1组合。给Google服务器一点同步时间
每次在开发者控制台修改密钥限制后,Google的服务器需要5-10分钟才能同步生效,刚改完就立刻测试大概率还是会报错,耐心等一会儿再试。Manifest的API密钥配置别写错
确认Manifest里的元数据标签是正确的,别用旧的Maps API密钥配置:<meta-data android:name="com.google.android.geo.API_KEY" android:value="你的实际API密钥"/>重点是
name属性必须是com.google.android.geo.API_KEY,这是Places API的专用配置项。再确认Places API真的启用了
虽然你可能已经做了,但还是去开发者控制台的「API和服务」里检查一下,确保Places API(不是Places SDK for Android)已经被启用——有时候会不小心开成其他相关API但没开对的。
另外,你可以在代码里加一段异常捕获,方便后续排查:
// 在你的EmploymentDetailsActivity或GooglePlacesAdapter的API调用处 try { // 执行Places API请求的代码 } catch (ApiException e) { Log.e("PlacesDebug", "错误码: " + e.getStatusCode() + ", 详情: " + e.getMessage()); }
根据你说的「去掉限制密钥就正常」,说明你的代码逻辑和API调用是没问题的,核心就是限制配置的匹配问题,把上面几点逐一排查,应该就能解决了。
内容的提问来源于stack exchange,提问作者Maulik Dodia

