Chúng tôi sẽ ngừng cung cấp Thư viện nền tảng JavaScript đăng nhập bằng Google cho web. Bạn sẽ không thể tải thư viện này xuống sau ngày 31 tháng 3 năm 2023. Thay vào đó, hãy sử dụng Dịch vụ Google Identity mới cho Web.
Theo mặc định, mã ứng dụng khách mới tạo hiện bị chặn sử dụng Thư viện nền tảng cũ, các mã ứng dụng khách hiện có sẽ không bị ảnh hưởng. Những Mã ứng dụng khách mới được tạo trước ngày 29 tháng 7 năm 2022 có thể đặt `plugin_name` cho phép sử dụng Thư viện Google Platform.

Tích hợp tính năng Đăng nhập bằng Google vào Ứng dụng Android

Để tích hợp tính năng Đăng nhập bằng Google vào ứng dụng Android, hãy định cấu hình tính năng Đăng nhập bằng Google và thêm một nút vào bố cục của ứng dụng bắt đầu quy trình đăng nhập.

Trước khi bắt đầu

Định cấu hình dự án Bảng điều khiển API của Google và thiết lập dự án Android Studio của bạn.

Định cấu hình tính năng Đăng nhập bằng Google và đối tượng GoogleSignInClient

  1. Trong phương thức onCreate của hoạt động đăng nhập, hãy định cấu hình Đăng nhập bằng Google để yêu cầu dữ liệu người dùng mà ứng dụng của bạn yêu cầu. Ví dụ: để định cấu hình Đăng nhập bằng Google để yêu cầu người dùng\39; mã nhận dạng và thông tin cơ bản trong hồ sơ, hãy tạo đối tượng GoogleSignInOptions với thông số DEFAULT_SIGN_IN. Để yêu cầu người dùng\39; gửi địa chỉ email, hãy tạo đối tượng GoogleSignInOptions bằng tuỳ chọn 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();

    Nếu bạn cần yêu cầu thêm phạm vi để truy cập API Google, hãy chỉ định phạm vi đó bằng requestScopes. Để người dùng có trải nghiệm tốt nhất, khi đăng nhập, bạn chỉ cần yêu cầu các phạm vi cần thiết để ứng dụng hoạt động ở mức tối thiểu. Chỉ yêu cầu mọi phạm vi bổ sung khi bạn cần để người dùng thấy màn hình đồng ý trong bối cảnh của một hành động mà họ đã thực hiện. Xem Yêu cầu phạm vi bổ sung.

  2. Sau đó, cũng trong phương thức onCreate của hoạt động đăng nhập, hãy tạo một đối tượng GoogleSignInClient với các tuỳ chọn mà bạn đã chỉ định.

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

Kiểm tra người dùng hiện đã đăng nhập

Trong phương thức onStart của hoạt động, hãy kiểm tra xem người dùng đã đăng nhập vào ứng dụng của bạn bằng Google hay chưa.

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

Nếu GoogleSignIn.getLastSignedInAccount trả về một đối tượng GoogleSignInAccount (thay vì null), thì tức là người dùng đã đăng nhập vào ứng dụng của bạn bằng Google. Cập nhật giao diện người dùng cho phù hợp, nghĩa là ẩn nút đăng nhập, chạy hoạt động chính hoặc bất kỳ nội dung nào phù hợp với ứng dụng.

Nếu GoogleSignIn.getLastSignedInAccount trả về null, thì tức là người dùng chưa đăng nhập vào ứng dụng của bạn bằng Google. Cập nhật giao diện người dùng để hiển thị nút Đăng nhập bằng Google.

Thêm nút Đăng nhập bằng Google vào ứng dụng của bạn

  1. Nút đăng nhập tiêu chuẩn của Google Thêm SignInButton trong bố cục của ứng dụng:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. Không bắt buộc: Nếu đang sử dụng hình ảnh nút đăng nhập mặc định thay vì cung cấp tài sản nút đăng nhập của riêng mình, bạn có thể tùy chỉnh kích thước của nút bằng phương thức setSize.

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. Trong hoạt động Android (ví dụ: trong phương thức onCreate), hãy đăng ký OnClickListener của nút để đăng nhập người dùng khi nhấp vào:

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

Bắt đầu quy trình đăng nhập

  1. Hình ảnh trình chọn tài khoản Đăng nhậpTrong phương thức onClick của hoạt động onClick, hãy xử lý việc nhấn nút đăng nhập bằng cách tạo ý định đăng nhập bằng phương thức getSignInIntent và bắt đầu ý định bằng 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);
    }

    Khi bắt đầu ý định, người dùng sẽ chọn một Tài khoản Google để đăng nhập. Nếu bạn đã yêu cầu các phạm vi vượt quá profile, emailopenid, thì người dùng cũng sẽ được nhắc cấp quyền truy cập vào các tài nguyên được yêu cầu.

  2. Sau khi người dùng đăng nhập, bạn có thể nhận đối tượng GoogleSignInAccount cho người dùng trong phương thức onActivityResult của hoạt động.

    @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);
        }
    }

    Đối tượng GoogleSignInAccount chứa thông tin về người dùng đã đăng nhập, chẳng hạn như tên của người dùng.

    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);
        }
    }

    Bạn cũng có thể lấy địa chỉ email của người dùng bằng getEmail, mã Google của người dùng (để sử dụng phía máy khách) bằng getId, và mã thông báo mã nhận dạng cho người dùng bằng getIdToken. Nếu bạn cần chuyển người dùng hiện đang đăng nhập đến máy chủ phụ trợ, hãy gửi mã thông báo mã nhận dạng đến máy chủ phụ trợ và xác thực mã thông báo trên máy chủ.