Để 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 Google API Console và thiết lập dự án Android Studio.
Định cấu hình tính năng Đăng nhập bằng Google và đối tượng GoogleSignInClient
Trong phương thức
onCreate
của hoạt động đăng nhập, hãy định cấu hình tính năng Đă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 và thông tin hồ sơ cơ bản, tạo mộtGoogleSignInOptions
có tham sốDEFAULT_SIGN_IN
. Để yêu cầu quyền truy cập của người dùng gửi email địa chỉ của bạn, hãy tạo đối tượngGoogleSignInOptions
bằng Tuỳ chọnrequestEmail
.// 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 vào các API của Google, hãy chỉ định các phạm vi đó cùng với
requestScopes
. Để mang đến trải nghiệm tốt nhất cho người dùng, khi đăng nhập, chỉ yêu cầu các phạm vi cần thiết để ứng dụng của bạn hoạt động ở mức tối thiểu. Yêu cầu bất kỳ phạm vi bổ sung nào chỉ khi bạn cần những yêu cầu đó để người dùng sẽ thấy màn hình xin phép trong bối cảnh của một hành động mà họ đã thực hiện. Hãy xem phần Yêu cầu thêm phạm vi.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ượngGoogleSignInClient
có các lựa chọn mà bạn đã chỉ định.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Kiểm tra xem có người dùng đã đăng nhập hay không
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 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ì 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 của bạn cho phù hợp—tức là ẩn nút đăng nhập, khởi chạy
hoạt động chính hoặc bất kỳ hoạt động nào phù hợp với ứng dụng của bạn.
Nếu GoogleSignIn.getLastSignedInAccount
trả về null
, 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
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" />
Không bắt buộc: Nếu bạn đang sử dụng hình ảnh của nút đăng nhập mặc định thay vì nếu bạn cung cấp thành phần nút đăng nhập của riêng mình, bạn có thể tuỳ chỉnh kích thước bằng
setSize
.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
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 được nhấp vào:findViewById(R.id.sign_in_button).setOnClickListener(this);
Bắt đầu quy trình đăng nhập
Trong phương thức
onClick
của hoạt động, hãy xử lý các thao tác nhấn vào nút đăng nhập bằng cách tạo một ý định đăng nhập bằnggetSignInIntent
và bắt đầu ý định bằngstartActivityForResult
.@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ẽ được nhắc chọn một Tài khoản Google để đăng nhập với. Nếu bạn đã yêu cầu các phạm vi ngoài
profile
,email
vàopenid
, 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.Sau khi người dùng đăng nhập, bạn có thể nhận được
GoogleSignInAccount
cho người dùng trong phương thứconActivityResult
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ề hoạt động đăng nhập người dùng, 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ã nhận dạng Google của người dùng (để sử dụng phía máy khách) bằnggetId
và mã thông báo nhận dạng cho người dùng bằnggetIdToken
. Nếu bạn cần chuyển người dùng hiện đã đăng nhập tới máy chủ phụ trợ, 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ủ.