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 trong phạm vi ít nhất có thể khi đăng nhập người dùng lần đầu. Nếu chức năng cốt lõi của ứng dụng không gắn với 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 như một phần 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 dữ liệu API không thể truy cập được. 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 chỉ cần 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ể yêu cầu quyền truy cập vào Drive của người dùng chỉ 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 về lý do tại sao họ được yêu cầu cấp một số quyền nhất định.

Yêu cầu quyền theo 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 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 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 yêu cầu 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 hay không, và nếu có, hãy thực hiện thao tác 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 nạp một tập hợp các quyền một cách thuận tiện hơn.