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

使用registerForActivityResult实现谷歌登录失败,返回RESULT_CANCELED求助

解决谷歌登录使用registerForActivityResult返回RESULT_CANCELED的问题

以下是几个常见的排查方向和解决方案:

1. 确保ActivityResultLauncher的注册时机正确

registerForActivityResult必须在Activity/Fragment的onCreate生命周期方法内(或更早的时机,比如onAttach)完成注册,不能在点击事件、onStart等晚于onCreate的时机执行。如果注册时机过晚,启动的登录Activity无法正确回调结果,会直接返回RESULT_CANCELED。

检查你的代码,确保activityResultLauncher的初始化代码放在onCreate方法中,不要延迟到点击事件触发时才创建。

2. 修正上下文与GoogleSignInClient的初始化

确保GoogleSignIn.getClient(this, gso)中的this是当前Activity的实例,不要使用Application上下文,否则可能导致权限或回调流程异常。

3. 不要忽略RESULT_CANCELED情况下的错误信息

即使返回RESULT_CANCELED,谷歌登录的Intent中也可能包含错误细节,你可以修改回调逻辑,不管结果码是什么,都尝试解析Intent数据,以此定位问题:

private ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                Intent data = result.getData();
                if (data != null) {
                    try {
                        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                        GoogleSignInAccount account = task.getResult(ApiException.class);
                        if (account != null) {
                            firebaseAuthWithGoogle(account);
                        }
                    } catch (ApiException e) {
                        // 打印错误码,帮助排查具体问题
                        Log.e("GoogleSignInError", "登录失败,错误码:" + e.getStatusCode());
                        e.printStackTrace();
                    }
                }
            }
        });

常见错误码对应问题:

  • 12500:Google Play服务版本过低或设备不支持
  • 10:Google Cloud Console中的SHA-1指纹或包名配置错误
  • 16:用户取消了登录操作

4. 核对谷歌登录的配置信息

  • 确认R.string.REQUEST_ID_TOKEN对应的是Web客户端ID,不是Android客户端ID,这个ID需要在Google Cloud Console中正确配置,关联你的应用包名和SHA-1指纹。
  • 检查项目依赖的com.google.android.gms:play-services-auth与Firebase相关依赖的版本是否一致,避免版本冲突导致的异常。

5. 测试环境验证

  • 如果使用模拟器,确保模拟器已登录有效的谷歌账号,且Google Play服务处于正常状态。
  • 真实设备上测试时,确认设备的谷歌账号没有异常限制,网络连接正常。

内容的提问来源于stack exchange,提问作者RonTLV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:43:09