Como solicitar escopos adicionais

Para ter a melhor experiência do usuário, solicite o mínimo de escopos possível ao fazer o 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 do GoogleSignInOptions.DEFAULT_SIGN_IN geralmente será apenas o necessário para o login.

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

Solicite outros escopos 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 solicitar permissão para acessar o Drive do usuário apenas quando ele tocar no botão "Salvar no Google Drive" pela primeira vez.

Ao usar essa técnica, você pode evitar sobrecarregar novos usuários ou confundir os usuários quanto ao motivo da solicitação de determinadas permissões.

Como solicitar permissões exigidas pelas ações do usuário

Sempre que um usuário executar 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 extras necessários do usuário.

Por exemplo, se um usuário executar uma ação que requer 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();
        }
    }
}

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