Để mang lại trải nghiệm tốt nhất cho người dùng, bạn nên yêu cầu ít phạm vi nhất có thể khi người dùng đăng nhập lần đầu. Nếu chức năng cốt lõi của ứng dụng không liên kết với một dịch vụ của Google, thì cấu hình GoogleSignInOptions.DEFAULT_SIGN_IN thường là tất cả những gì bạn cần khi đăng nhập.
Nếu ứng dụng của bạn có những tính năng có thể sử dụng dữ liệu API của Google nhưng không bắt buộc phải có trong chức năng cốt lõi của ứng dụng, thì bạn nên thiết kế ứng dụng sao cho có thể xử lý các trường hợp khi không truy cập được dữ liệu API. Ví dụ: bạn có thể ẩn danh sách các tệp đã lưu gần đây khi người dùng chưa cấp quyền truy cập vào Drive.
Bạn chỉ nên yêu cầu các phạm vi bổ sung cần thiết để truy cập vào các API của Google khi người dùng thực hiện một hành động yêu cầu quyền truy cập vào một API cụ thể. Ví dụ: bạn có thể chỉ yêu cầu quyền truy cập vào Drive của người dùng khi người dùng nhấn vào nút "Lưu vào Drive" lần đầu tiên.
Bằng cách sử dụng kỹ thuật này, bạn có thể tránh làm người dùng mới cảm thấy choáng ngợp hoặc khiến người dùng nhầm lẫn về lý do họ được yêu cầu cấp một số quyền nhất định.
Yêu cầu cấp các quyền cần thiết cho hành động của người dùng
Bất cứ khi nào người dùng thực hiện một thao tác yêu cầu một phạm vi không được yêu cầu khi đăng nhập, hãy gọi GoogleSignIn.hasPermissions để kiểm tra xem người dùng đã cấp các quyền cần thiết hay chưa. Nếu không, hãy gọi GoogleSignIn.requestPermissions để chạy một hoạt động yêu cầu các phạm vi bắt buộc bổ sung từ người dùng.
Ví dụ: nếu người dùng thực hiện một thao tác cần có quyền truy cập vào bộ nhớ ứng dụng Drive, hãy làm như sau:
if (!GoogleSignIn.hasPermissions(
GoogleSignIn.getLastSignedInAccount(getActivity()),
Drive.SCOPE_APPFOLDER)) {
GoogleSignIn.requestPermissions(
MyExampleActivity.this,
RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION,
GoogleSignIn.getLastSignedInAccount(getActivity()),
Drive.SCOPE_APPFOLDER);
} else {
saveToDriveAppFolder();
}
Trong lệnh gọi lại onActivityResult của hoạt động, bạn có thể kiểm tra xem các quyền bắt buộc đã được cấp thành công hay chưa. Nếu có, hãy thực hiện hành động của người dùng.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION == requestCode) {
saveToDriveAppFolder();
}
}
}
Bạn cũng có thể truyền một GoogleSignInOptionsExtension đến hasPermissions và requestPermissions để kiểm tra và nhận một bộ quyền một cách thuận tiện hơn.