API Đăng nhập bằng Google mới

Dịch vụ nhận dạng của Google (GIS) là một bộ API mới giúp người dùng đăng nhập và đăng ký dễ dàng và an toàn, trong một gói dễ triển khai dành cho nhà phát triển. Tài liệu này trình bày chi tiết về một API đăng nhập bằng Google mới (một phần của GIS) có thể dùng để bắt đầu quy trình đăng nhập hoặc đăng ký khi người dùng nhấn vào nút "Đăng nhập bằng Google". API này có thể được dùng thay cho các API Đăng nhập bằng Google hiện có cho quy trình đăng nhập.

Bạn chỉ nên sử dụng API này khi người dùng thể hiện rõ ý định đăng nhập bằng Google. Ví dụ: sử dụng API này khi họ nhấp vào nút "Đăng nhập bằng Google" trong ứng dụng của bạn.

Bạn không nên sử dụng API này để nhắc người dùng đăng nhập khi khởi chạy ứng dụng hoặc để phản hồi một điều kiện kích hoạt khác, chẳng hạn như thêm mặt hàng vào giỏ hàng. Đối với những trường hợp sử dụng này, hãy sử dụng tính năng Đăng nhập và đăng ký bằng một lần chạm.

Khi bạn bắt đầu quy trình Đăng nhập bằng Google bằng API mới, giao diện người dùng này sẽ hiển thị như sau:

Đăng nhập bằng Google

Trước khi bắt đầu

Định cấu hình dự án Google API Console và thiết lập dự án Android Studio.

Tạo yêu cầu đăng nhập

Để chạy quy trình Đăng nhập bằng Google bằng cách sử dụng Identity API, hãy tạo đối tượng GetSignInRequest. Sau đó, trên đối tượng SignInClient, hãy gọi getSignInIntent. Lệnh gọi này không đồng bộ và khi thành công, lệnh gọi sẽ cung cấp một PendingIntent để khởi chạy hộp thoại.

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

Xử lý kết quả đăng nhập

Trong onActivityResult, hãy truy xuất SignInCredential. Đối tượng SignInCredential được trả về từ getSignInCredentialFromIntent chứa thông tin về thông tin đăng nhập hợp lệ. Nếu người dùng không đăng nhập được vì lý do nào đó, hệ thống sẽ gửi 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
});

Kết quả đăng nhập thành công sẽ luôn trả về họ tên đầy đủ, email và url ảnh hồ sơ của người dùng. Nếu cần thêm thông tin, bạn có thể chuyển người dùng đến một luồng thông tin hồ sơ hoàn chỉnh.