Como solicitar escopos adicionais

Para oferecer a melhor experiência do usuário, solicite o menor número possível de escopos ao fazer login inicial dos usuários. Se a funcionalidade principal do app não estiver vinculada a um serviço do Google, a configuração GoogleSignInOptions.DEFAULT_SIGN_IN geralmente será suficiente para fazer login.

Se o app tiver recursos que podem usar dados da API Google, mas que não são necessários como parte da funcionalidade principal, ele precisa ser projetado para processar com eficiência os casos em que os dados da API não estão acessíveis. Por exemplo, é possível ocultar uma lista de arquivos salvos recentemente quando o usuário não concedeu acesso ao Drive.

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

Com essa técnica, você evita sobrecarregar novos usuários ou confundir os usuários sobre por que eles estão sendo solicitados para determinadas permissões.

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

Sempre que um usuário realizar uma ação que exija um escopo que não foi 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 necessários adicionais 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 atividade, é possível verificar se as permissões necessárias foram adquiridas 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();
        }
    }
}

Também é possível transmitir um GoogleSignInOptionsExtension para hasPermissions e requestPermissions para verificar e adquirir um conjunto de permissões de forma mais conveniente.