Como solicitar escopos adicionais

Para a melhor experiência do usuário, solicite o menor escopo possível ao fazer o login dos usuários pela primeira vez. Se o recurso principal do app não estiver vinculado a um serviço do Google, a configuração GoogleSignInOptions.DEFAULT_SIGN_IN costuma ser apenas o que você precisa no login.

Caso seu app tenha recursos que possam usar dados da API do Google, mas que não sejam necessários como parte da funcionalidade principal, desenvolva um app que possa processar corretamente os 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 solicitar 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ê pode evitar sobrecarregar os novos usuários ou confundir os usuários em relação ao motivo da solicitação de determinadas permissões.

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

Sempre que um usuário realizar uma ação que exija um escopo que não seja 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 outros escopos necessários do usuário.

Por exemplo, se um usuário executar uma ação que exige 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 procurar e adquirir um conjunto de permissões de maneira mais conveniente.