Yêu cầu phạm vi bổ sung

Để 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ó các 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 của mình để có thể xử lý linh hoạt các trường hợp 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 mà bạn cần để truy cập vào API của Google khi người dùng thực hiện một hành động cần 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 choáng ngợp hoặc gây nhầm lẫn cho người dùng 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 quyền theo yêu cầu của 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 hành động yêu cầu 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 để khởi chạy một hoạt động yêu cầu người dùng cấp các phạm vi bắt buộc bổ sung.

Ví dụ: nếu người dùng thực hiện một hành động cần 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 cần thiết có được cấp hay không. 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 GoogleSignInOptionsExtension đến hasPermissionsrequestPermissions để kiểm tra và thu thập một bộ quyền thuận tiện hơn.