Como solicitar outros escopos

Para oferecer a melhor experiência do usuário, solicite o menor número possível de escopos ao fazer o login dos usuários. 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á necessária para você fazer login.

Caso seu app tenha recursos que possam usar os dados da API do Google, mas não sejam necessários como parte da funcionalidade principal do app, você precisa projetar o app para lidar com casos em que os dados da API não estejam acessíveis. Por exemplo, você poderá ocultar uma lista de arquivos salvos recentemente quando o usuário não tiver concedido acesso ao Drive.

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

Com essa técnica, é possível evitar a sobrecarga de novos usuários ou confundir os usuários sobre o motivo de solicitarem permissões específicas.

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

Sempre que um usuário executar uma ação que requer um escopo que 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 necessários adicionais do usuário.

Por exemplo, se um usuário realizar 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, verifique se as permissões necessárias foram adquiridas e, em caso afirmativo, execute 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 modo mais conveniente.