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

如何使用Google一键登录UI替代已废弃的startIntentSenderForResult API

问题背景

从谷歌一键登录Android官方文档复制的代码中,使用了已废弃的startIntentSenderForResult方法,已注册了ActivityResultLauncher但不知道如何替换该废弃方法。

解决方案

你需要将ActivityResultContracts.StartActivityForResult替换为ActivityResultContracts.StartIntentSenderForResult,因为我们要处理的是IntentSender(来自PendingIntent)而非直接的Intent。具体步骤如下:

  1. 修正ActivityResultLauncher的注册
final ActivityResultLauncher<IntentSenderRequest> oneTapLauncher = registerForActivityResult(
    new ActivityResultContracts.StartIntentSenderForResult(),
    result -> {
        // 处理登录结果,比如解析返回的数据
        if (result.getResultCode() == Activity.RESULT_OK) {
            try {
                SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(result.getData());
                String idToken = credential.getGoogleIdToken();
                String username = credential.getId();
                String password = credential.getPassword();
                // 根据获取到的凭证做后续处理
            } catch (ApiException e) {
                Log.e(TAG, "Sign-in failed: " + e.getLocalizedMessage());
            }
        }
    }
);
  1. 替换原代码中的startIntentSenderForResult调用
    在beginSignIn的OnSuccessListener中,用oneTapLauncher.launch()替代原来的startIntentSenderForResult:
oneTapClient.beginSignIn(signUpRequest)
    .addOnSuccessListener(this, result -> {
        try {
            IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(result.getPendingIntent())
                .build();
            oneTapLauncher.launch(intentSenderRequest);
        } catch (Exception e) {
            Log.e(TAG, "Couldn't start One Tap UI: " + e.getLocalizedMessage());
        }
    })
    .addOnFailureListener(this, e -> {
        Log.d(TAG, e.getLocalizedMessage());
    });

关键说明

  • StartIntentSenderForResult是专门用于处理IntentSender的Activity Result契约,完全替代旧的startIntentSenderForResult方法。
  • 通过IntentSenderRequest.Builder将PendingIntent包装成请求对象,传递给Launcher的launch方法。
  • 在回调中可以通过oneTapClient.getSignInCredentialFromIntent()解析返回的登录凭证,完成后续登录逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:51