Android应用开发:Google Places API仅开发者本人可运行问题求助
解决Google Places API仅开发者本人能运行的问题
这问题我太熟了!结合你之前Google Maps API的解决经验,显然这次Google Places API的问题根源也是API密钥的权限配置,而且大概率是密钥绑定了开发者个人的设备SHA-1指纹。
问题原因拆解
只有编写者能正常运行的核心原因:
- 编写者在Google Cloud控制台配置Places API密钥时,仅添加了自己设备的SHA-1指纹+应用包名的绑定规则;
- 其他团队成员的设备指纹不在密钥的允许访问列表中,导致Places API请求被Google服务器拒绝,最终引发Activity崩溃。
分步解决方案
1. 每个成员获取自己设备的SHA-1指纹
两种简单方式:
- Android Studio可视化操作:打开右上角Gradle面板 → 找到你的app模块 → 展开
Tasks→android→ 双击运行signingReport,在控制台输出中找到SHA1字段; - 命令行方式(默认debug密钥库):
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
2. 更新Google Cloud控制台的密钥配置
登录Google Cloud控制台,按以下步骤操作:
- 进入「API和服务」→「凭据」,找到你的Places API密钥;
- 在「应用限制」区域,选择「Android应用」,然后点击「添加项目」,输入每个成员的SHA-1指纹 + 应用包名(包名必须和
AndroidManifest.xml中的package字段一致); - 切换到「API限制」区域,确保已勾选「Places API」(别漏选!很多时候会只开了Maps API而忽略Places)。
3. 本地密钥隔离(避免硬编码冲突)
为了避免团队成员共用密钥,建议用本地配置文件存储个人密钥:
- 在项目根目录的
local.properties文件中添加:GOOGLE_PLACES_API_KEY=你的个人Places API密钥 - 在
app/build.gradle中读取该配置并注入到BuildConfig:android { // 其他配置... buildTypes { debug { buildConfigField "String", "PLACES_API_KEY", "\"${properties.getProperty("GOOGLE_PLACES_API_KEY")}\"" } release { buildConfigField "String", "PLACES_API_KEY", "\"${properties.getProperty("GOOGLE_PLACES_API_KEY")}\"" } } } - 代码中通过
BuildConfig.PLACES_API_KEY引用密钥,比如在refreshPlacesData方法里替换硬编码的密钥。
崩溃点验证
你提到的public void refreshPlacesData...方法中,大概率是调用Places API的请求(比如地点搜索、详情获取)触发了权限拒绝。让团队成员运行时查看Logcat,搜索Places或403关键词,会看到类似API key not valid. Please pass a valid API key.的错误日志,这就能确认是密钥权限问题。
内容的提问来源于stack exchange,提问作者DsCpp
相关产品推荐
相关产品推荐

