我们停止了谷歌登录在JavaScript平台的图书馆网络。对于认证和用户登录,使用新的谷歌身份服务的SDK两种网络Android的替代

将 Google Sign-In 集成到您的 Android 应用程序中

要将 Google Sign-In 集成到您的 Android 应用程序中,请配置 Google Sign-In 并在您的应用程序布局中添加一个按钮以启动登录流程。

在你开始之前

配置谷歌API控制台项目,并成立了自己的Android Studio项目

配置 Google Sign-in 和 GoogleSignInClient 对象

  1. 在您登入活动的onCreate方法,配置谷歌登录的帐户来请求您的应用程序所需的用户数据。例如,以配置谷歌登录到请求用户的ID和基本简档信息,创建一个GoogleSignInOptions与对象DEFAULT_SIGN_IN参数。要请求用户的电子邮件地址,以及,创建GoogleSignInOptions与对象requestEmail选项。

    // Configure sign-in to request the user's ID, email address, and basic
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    如果您需要请求额外的范围来访问谷歌的API,以指定它们requestScopes 。为了获得最佳用户体验,在登录时,仅请求您的应用程序所需的范围以最小化运行。仅在您需要时请求任何其他范围,以便您的用户在他们执行的操作的上下文中看到同意屏幕。见请求附加的范围

  2. 然后,同样在你登录活动的onCreate方法,创建一个GoogleSignInClient与你指定的选项对象。

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

检查现有的登录用户

在您的活动的onStart方法,检查如果用户已经登录到您与谷歌应用程序。

// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);

如果GoogleSignIn.getLastSignedInAccount返回GoogleSignInAccount对象(而不是null ),用户已经登录到您与谷歌应用程序。相应地更新您的用户界面——即隐藏登录按钮、启动您的主要活动或任何适合您的应用程序的内容。

如果GoogleSignIn.getLastSignedInAccount返回null ,用户尚未登录到谷歌与您的应用程序。更新您的用户界面以显示 Google 登录按钮。

将 Google 登录按钮添加到您的应用

  1. 标准的 Google 登录按钮添加SignInButton在应用程序的布局:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. 可选:如果您使用的是默认的登录按钮图形,而不是提供自己的登录按钮的资产,您可以使用自定义按钮的尺寸setSize方法。

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. 在Android活动(例如,在onCreate方法),注册按钮的OnClickListener点击时在用户登录:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

启动登录流程

  1. 登录帐户选择器的图像在活动的onClick方法,手柄登录按钮水龙头通过创建一个登录意图与getSignInIntent方法,并开始与意向startActivityForResult

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
            // ...
        }
    }
    
    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    启动 Intent 会提示用户选择要登录的 Google 帐户。如果你要求的范围超出了profileemail ,和openid ,用户也被提示授权访问所请求的资源。

  2. 在用户登录后,你可以得到一个GoogleSignInAccount在活动的用户对象onActivityResult方法。

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    GoogleSignInAccount对象包含有关信息的登录用户,比如用户名。

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
    
            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }

    您还可以得到用户的电子邮件地址getEmail ,用户的谷歌标识(客户端使用)用getId和令牌与用户的ID getIdToken 。如果你需要传递当前登录的用户到后端服务器,发送令牌后台服务器的ID和验证令牌在服务器上。