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

Để mang đến 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 gắn liền với một Dịch vụ của Google, cấu hình GoogleSignInOptions.DEFAULT_SIGN_IN thường 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 của API của Google, nhưng không cần thiết như một phần chức năng cốt lõi của ứng dụng, 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 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 Drive truy cập.

Bạn nên yêu cầu những phạm vi bổ sung mà bạn chỉ cần dùng để truy cập vào các API của Google khi người dùng thực hiện một thao tác cần quyền truy cập vào một API cụ thể. Cho 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 mộ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 quá tải người dùng mới hoặc gây nhầm lẫn lý do yêu cầu người dùng cấp một số quyền nhất định.

Yêu cầu cấp quyền do 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 cần đến phạm vi không được yêu cầu tại đăng nhập, hãy gọi GoogleSignIn.hasPermissions để kiểm tra xem người dùng đã đăng nhập hay chưa được cấp các quyền cần thiết. Nếu không, hãy gọi GoogleSignIn.requestPermissions để khởi chạy một hoạt động yêu cầu thêm các 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 và cần quyền truy cập vào Drive của họ bộ nhớ của ứng dụng, 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ấp quyền thành công và nếu có thì 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à lấy một nhóm quyền khác một cách thuận tiện.