本頁面由 Cloud Translation API 翻譯而成。
Switch to English

將Google登錄功能集成到您的Android應用中

要將Google登錄功能集成到您的Android應用中,請配置Google登錄,然後在您的應用佈局中添加一個按鈕,以啟動登錄流程。

在你開始之前

配置一個Google API Console項目並設置您的Android Studio項目

配置Google登錄和GoogleSignInClient對象

  1. 在登錄活動的onCreate方法中,配置Google登錄以請求您的應用所需的用戶數據。例如,要配置Google登錄以請求用戶ID和基本個人資料信息,請使用DEFAULT_SIGN_IN參數創建一個GoogleSignInOptions對象。要同時請求用戶的電子郵件地址,請使用requestEmail選項創建GoogleSignInOptions對象。

    // 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();

    如果您需要請求其他範圍來訪問Google API,請使用requestScopes指定它們。為了獲得最佳的用戶體驗,請在登錄時僅請求使應用程序正常運行所需的作用域。僅在需要時才請求其他作用域,以便用戶在其執行的操作的上下文中看到同意屏幕。請參閱請求其他範圍

  2. 然後,同樣在登錄活動的onCreate方法中,使用您指定的選項創建一個GoogleSignInClient對象。

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

檢查現有的登錄用戶

在活動的onStart方法中,檢查用戶是否已經通過Google登錄到您的應用。

// 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 ),則該用戶已經使用Google登錄到您的應用程序。相應地更新您的UI,即隱藏登錄按鈕,啟動您的主要活動或適合您的應用的任何內容。

如果GoogleSignIn.getLastSignedInAccount返回null ,則該用戶尚未使用Google登錄到您的應用。更新您的用戶界面以顯示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);
    }

    啟動該意圖會提示用戶選擇一個用於登錄的Google帳戶。如果您請求的範圍超出profileemailopenid ,則還會提示用戶授予對所請求資源的訪問權限。

  2. 用戶GoogleSignInAccount後,您可以在活動的onActivityResult方法中獲取該用戶的GoogleSignInAccount對象。

    @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令牌發送到您的後端服務器,並在服務器上驗證該令牌。