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 dễ dàng và đăng nhập và đăng ký 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 Hệ thống thông tin địa lý (GIS)) có thể được dùng để bắt đầu quy trình đăng nhập hoặc đăng ký khi người dùng nhấn vào "Đăng nhập bằng Google" . Bạn có thể sử dụng API này thay cho 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 với Google. Ví dụ: hãy 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 mình.

Bạn không được 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 khi đăng nhập để 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 mặt hàng vào giỏ hàng. Cho các trường hợp sử dụng này, hãy sử dụ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, API mới sẽ hiển thị thông tin này Giao diện người dùng:

Đă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

Để khởi chạy quy trình Đăng nhập bằng Google bằng API nhận dạng, hãy tạo một Đối tượng GetSignInRequest. Sau đó, trên lệnh gọi đối tượng SignInClient getSignInIntent Lệnh gọi này không đồng bộ và khi thành công, nó sẽ cung cấp một PendingIntent để 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. SignInCredential đối tượng được trả về từ getSignInCredentialFromIntent có chứa thông tin về thông tin đăng nhập hợp lệ. Nếu người dùng không thể đăng nhập 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 luôn trả về tên đầy đủ, email, và URL của ảnh hồ sơ. Nếu cần thêm thông tin, bạn có thể chuyển hướng người dùng thành một luồng thông tin hồ sơ hoàn chỉnh.