You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

谷歌登录创建新账号时onActivityResult()未触发回调问题排查

解决Google Sign-In创建新账号后无法收到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:31:44