谷歌登录创建新账号时onActivityResult()未触发回调问题排查
看起来你遇到的问题很典型,我来帮你一步步排查和解决:
1. 首先修复signOut()的异步调用问题
你的signIn()方法里先调用了googleSignInClient.signOut(),但这个操作是异步的(返回Task<Void>),如果不等它完成就直接启动登录Intent,会导致账号状态混乱,尤其是创建新账号的场景下,很可能打断回调流程。
修改你的signIn()方法,等待signOut完成后再启动登录Intent:
private void signIn() { googleSignInClient.signOut().addOnCompleteListener(this, task -> { Intent signInIntent = googleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, 123); }); }
2. 升级老旧的依赖版本
你使用的12.0.1版本是非常早期的Google Play Services/Firebase版本,这个版本存在不少已知的回调相关bug。建议升级到最新的稳定版本(注意Firebase和Play Services版本要保持一致):
// 替换为最新稳定版,版本号可根据官方文档调整 implementation 'com.google.firebase:firebase-core:21.1.1' implementation 'com.google.firebase:firebase-auth:22.3.1' implementation 'com.google.firebase:firebase-messaging:23.4.1' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.android.support:design:28.0.0' implementation 'com.google.android.gms:play-services-auth:20.7.0'
如果你的项目已经迁移到AndroidX,记得把support库换成对应的AndroidX依赖。
3. 检查Activity启动模式
如果你的登录Activity设置了singleInstance或singleTask启动模式,会导致startActivityForResult的回调无法正常传递到当前Activity。打开AndroidManifest.xml,确保你的Activity是默认的standard模式:
<activity android:name=".YourLoginActivity" android:launchMode="standard"> <!-- 其他配置 --> </activity>
4. 优化回调处理逻辑,排查错误码
你的onActivityResult判断里加了data != null,但有些错误场景下data可能为null,建议去掉这个判断,同时在handleSignInResult里打印ApiException的错误码,方便定位具体问题:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 123) { handleSignInResult(data); } } private void handleSignInResult(Intent data) { Task<GoogleSignInAccount> signInTask = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount googleSignInAccount = signInTask.getResult(ApiException.class); if (googleSignInAccount != null) { updateUI(googleSignInAccount); } } catch (ApiException e) { // 打印错误码,对应Google官方的错误列表排查问题 Log.e("GoogleSignInError", "Sign-in failed, error code: " + e.getStatusCode()); e.printStackTrace(); } }
常见错误码比如10表示开发控制台配置错误,12500表示网络问题,7表示Play Services版本过低等。
5. 检查AndroidManifest配置
确保你在AndroidManifest.xml中添加了Google Play Services版本的meta标签:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
按照以上步骤逐一排查,应该能解决创建新账号后无法收到回调的问题。
内容的提问来源于stack exchange,提问作者Rohan Patel

