Solicitar escopos adicionais

Para oferecer a melhor experiência, solicite o menor número possível de escopos ao fazer login dos usuários pela primeira vez. Se a funcionalidade principal do app não estiver vinculada a um serviço do Google, a configuração GoogleSignInOptions.DEFAULT_SIGN_IN geralmente é tudo o que você precisa no momento do login.

Se o app tiver recursos que podem usar dados da API do Google, mas não forem necessários como parte da funcionalidade principal, crie o app para lidar com casos em que os dados da API não estão acessíveis. Por exemplo, você pode ocultar uma lista de arquivos salvos recentemente quando o usuário não concedeu acesso ao Drive.

Solicite escopos adicionais necessários para acessar as APIs do Google somente quando o usuário realizar uma ação que exija acesso a uma API específica. Por exemplo, você pode pedir permissão para acessar o Drive do usuário apenas quando ele tocar no botão "Salvar no Drive" pela primeira vez.

Ao usar essa técnica, você evita sobrecarregar novos usuários ou confundir usuários sobre o motivo de determinadas permissões serem solicitadas.

Solicitar permissões necessárias para ações do usuário

Sempre que um usuário realizar uma ação que exija um escopo não solicitado no login, chame GoogleSignIn.hasPermissions para verificar se o usuário já concedeu as permissões necessárias. Caso contrário, chame GoogleSignIn.requestPermissions para iniciar uma atividade que solicite os escopos adicionais necessários do usuário.

Por exemplo, se um usuário realizar uma ação que exija acesso ao armazenamento do app Drive, faça o seguinte:

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();
}

No callback onActivityResult da sua atividade, você pode verificar se as permissões necessárias foram adquiridas com sucesso e, em caso afirmativo, realizar a ação do usuário.

@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();
        }
    }
}

Você também pode transmitir um GoogleSignInOptionsExtension para hasPermissions e requestPermissions para verificar e adquirir um conjunto de permissões de maneira mais conveniente.