Android Credential Manager的 Google Sign-In因开发者错误而失败,错误信息为“Unknown calling package name 'com.google.android.gms'”
我已经使用Credential Manager几个月了,但最近在三月,我应用中的登录功能停止工作。应用冻结,无法完成登录过程。
环境:
- Android 16
- Samsung Galaxy S25 Edge
- Kotlin
- Jetpack Compose
- Firebase Authentication
- Credential Manager API
- Google Play Services 26.18.33
包名:
com.nordisapps.nordisradiojournal
我开始进行登录时使用:
val googleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(BuildConfig.GOOGLE_CLIENT_ID)
.setNonce(generateSecureRandomNonce())
.build()
请求正确开始,但随后Google Play Services抛出:
java.lang.SecurityException: Unknown calling package name 'com.google.android.gms'
并且:
ConnectionResult{statusCode=DEVELOPER_ERROR, resolution=null, message=null}
随后Credential Manager返回:
androidx.credentials.exceptions.NoCredentialException: No credentials available
相关日志(logcat):
GoogleApiManager Failed to get service from broker.
java.lang.SecurityException: Unknown calling package name 'com.google.android.gms'
我已经检查的事项:
- SHA-1已添加到Firebase
- SHA-256已添加到Firebase
- 已下载最新版google-services.json
- Firebase中已启用Google Sign-In提供商
- 使用WEB客户端ID(而非Android客户端ID)
- 已添加:
<queries>
<package android:name="com.google.android.gms" />
</queries>
* implementation("com.google.android.gms:play-services-base")
* 尝试删除Firebase Authentication用户
* 尝试 .setFilterByAuthorizedAccounts(false)
问题仍然存在。
这是一个已知的Android 16 / Credential Manager / Google Play Services问题,还是我遗漏了某些必需的配置?
更新:我在Android 11和 13上测试应用。底部弹出层显示,登录成功。就我而言,这个Bug仅在Android 16上发生。
附加信息:
- Android 11:Google Sign-In正常工作。
- Android 13:Google Sign-In正常工作。
- Android 16:点击登录按钮后应用会立即冻结。
- Android 16上从不显示Google账号选择器 / 底部弹出层。
- 调试版和发布版都受影响。
- 应用的较旧版本在Android 16上也失败。
- 在同一台Android 16设备上,其他使用Google Sign-In的应用工作正常。
更新:已向Google Issue Tracker报告: https://issuetracker.google.com/issues/521434895 如果你也受影响,请为该问题打星以帮助优先修复。
解决方案
这似乎是Android 16 + Google Play Services的问题,而不是配置问题。
我也能复现相同的行为:
- Android 11 / 13上工作正常
-
Android 16上失败,原因: DEVELOPER_ERROR与 "Unknown calling package name 'com.google.android.gms'"
-
未显示账户选择器(Credential Manager静默失败)
我核对的内容(同OP):
- 配置了SHA-1 / SHA-256
- 使用Web Client ID
- 最新的google-services.json
- 启用了Google Sign-In提供商
解决方法(可用修复):
使用较旧的Google Sign-In API取代Credential Manager即可解决问题:
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(WEB_CLIENT_ID)
.build()
val client = GoogleSignIn.getClient(context, gso)