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

Để có trải nghiệm người dùng tốt nhất, bạn nên yêu cầu càng ít phạm vi càng tốt khi lần đầu đăng nhập người dùng. Nếu chức năng cốt lõi của ứng dụng không gắn liền với dịch vụ nào 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 như một phần 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ó thể xử lý linh hoạt các trường hợp khi không thể truy cập vào 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 nên yêu cầu thêm những phạm vi cần thiết để truy cập vào các API của Google chỉ khi người dùng thực hiện một thao tác 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 cấp 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 bị choáng ngợp hoặc bối rối 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 thao tác 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 đòi hỏi 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 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 sử dụng thêm các phạm vi bắt buộc.

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ớ của ứ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 thu nạp thành công hay chưa và 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à nhận một tập hợp quyền thuận tiện hơn.