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 cho người dùng. 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 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 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 bị choáng ngợp hoặc 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 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 mà yêu cầu ở một phạm vi chưa đượ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 để chạy một hoạt động yêu cầu thêm phạm vi bắt buộc từ người dùng.

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. 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à nhận một nhóm quyền thuận tiện hơn.