新版 Google Sign-In API

Google Identity Services (GIS) 是一组新的 API,可为用户提供简便、 为开发者提供易于实现的软件包。 本文档详细介绍了一种新的 Google 登录 API(GIS 的一部分),可用于 当用户点按“使用 Google 账号登录”按钮时,启动登录或注册流程 按钮。此 API 可代替现有的 Google Sign-In API 用于 登录流程

仅当用户明确表明登录意图时,您才应使用此 API 。例如,当他们点击“使用 Google 账号登录” 按钮。

您不应使用此 API 在应用启动或登录时提示用户登录 对另一个触发器(例如将商品添加到购物车)做出响应。对于 这些用例,使用 一键登录和注册

当您使用新 API 启动 Google 登录流程时,它会显示以下内容: 界面:

Google 登录

准备工作

配置 Google API 控制台项目并设置您的 Android Studio 项目

发出登录请求

如需使用 Identity API 启动 Google 登录流程,请构建 GetSignInRequest 对象。然后,在 SignInClient 对象调用上 getSignInIntent。此调用是异步的,成功后将提供一个 PendingIntent 可启动对话框。

    private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */

    private void signIn() {
        GetSignInIntentRequest request =
            GetSignInIntentRequest.builder()
                .setServerClientId(getString(R.string.server_client_id))
                .build();

        Identity.getSignInClient(activity)
            .getSignInIntent(request)
            .addOnSuccessListener(
                    result -> {
                        try {
                            startIntentSenderForResult(
                                    result.getIntentSender(),
                                    REQUEST_CODE_GOOGLE_SIGN_IN,
                                    /* fillInIntent= */ null,
                                    /* flagsMask= */ 0,
                                    /* flagsValue= */ 0,
                                    /* extraFlags= */ 0,
                                    /* options= */ null);
                        } catch (IntentSender.SendIntentException e) {
                            Log.e(TAG, "Google Sign-in failed");
                        }
                    })
            .addOnFailureListener(
                    e -> {
                        Log.e(TAG, "Google Sign-in failed", e);
                    });
    }

处理登录结果

onActivityResult 中,检索 SignInCredentialSignInCredentialgetSignInCredentialFromIntent 返回的对象包含 有效登录。如果用户由于某种原因登录失败, 抛出 ApiException

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
                try {
                    SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
                    // Signed in successfully - show authenticated UI
                    updateUI(credential);
                } catch (ApiException e) {
                    // The ApiException status code indicates the detailed failure reason.
                }
            }
        }
    }
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
    // handle intent result here
});

成功登录的结果始终返回用户的全名、电子邮件地址、 和个人资料照片网址如果您需要更多信息,可以引导用户 形成一个完整的个人资料信息流程