Android调用Google Maps触发SecurityException问题求助
这个SecurityException是Google Play Services验证应用身份失败导致的——核心原因是应用的release签名SHA256与Google Cloud Console中注册的API密钥/OAuth Client ID绑定配置不匹配,或是配置变更未完全生效。
重新核对签名与Cloud Console配置
- 用命令重新导出release签名的SHA256指纹,确保和崩溃日志里的完全一致:
keytool -list -v -keystore your-release-keystore.jks -alias your-key-alias - 登录Google Cloud Console,检查两项关键配置:
- Maps SDK for Android的API密钥:在"应用限制"中确认已添加
Android应用,包含你的应用IDcom.my.app和正确的SHA256指纹,无错误配置。 - OAuth 2.0 Client ID:分别检查debug和release版本的Client ID,各自绑定对应环境的SHA256和应用ID,不要交叉混配。
- Maps SDK for Android的API密钥:在"应用限制"中确认已添加
- 用命令重新导出release签名的SHA256指纹,确保和崩溃日志里的完全一致:
指导用户清除Google Play Services缓存
让受影响用户执行:设置 → 应用 → Google Play Services → 存储 → 清除缓存 + 清除数据,重启设备后再测试。单纯清除你的应用缓存不足以解决Google服务端的身份验证缓存问题。等待Cloud Console配置生效
Google Cloud的配置变更通常需要15-30分钟甚至更久才能全量生效,你之前删除重新添加Client ID后,需要等待足够时间再验证用户反馈,不要立刻判定无效。更新应用内的配置文件
从Cloud Console重新下载最新的google-services.json,替换到项目中,确保debug和release构建使用的配置文件对应正确的环境(如果分环境配置的话)。确认API启用状态
在Cloud Console中检查Maps SDK for Android是否处于启用状态,避免因API被禁用导致的验证失败。排查构建签名配置
确认release构建确实使用了你在Cloud Console注册的签名密钥,检查项目build.gradle(或app/build.gradle)中release变体的签名配置是否正确指向了你的release keystore,避免CI/CD环境中出现签名配置错误。
内容的提问来源于stack exchange,提问作者Vasiliy

