Como solicitar escopos adicionais

.

Para a melhor experiência do usuário, solicite o menor número possível de escopos ao que estão fazendo login dos usuários. Se a funcionalidade principal do seu app não estiver vinculada a uma serviço do Google, a configuração GoogleSignInOptions.DEFAULT_SIGN_IN costuma ser tudo de que você precisa para fazer login.

Se seu aplicativo tem recursos que podem usar dados da API do Google, mas não são como parte da funcionalidade principal do seu app, ele deve ser projetado de acordo com processar adequadamente os 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 acesso.

Solicite outros escopos necessários para acessar apenas as APIs do Google quando o usuário realiza uma ação que requer acesso a uma API específica. Para exemplo, você pode solicitar permissão para acessar o Drive do usuário apenas quando o o usuário toca em "Salvar no Google Drive" pela primeira vez.

Com essa técnica, é possível evitar sobrecarregar novos usuários ou confundir aos usuários sobre o motivo da solicitação de determinadas permissões.

Solicitar permissões exigidas pelas ações do usuário

Sempre que um usuário realiza uma ação que exige um escopo que não é solicitado em login, chame GoogleSignIn.hasPermissions para verificar se o usuário já receberam as permissões necessárias. Caso contrário, chame GoogleSignIn.requestPermissions. iniciar uma atividade que solicita os escopos adicionais necessários do usuário.

Por exemplo, se um usuário realizar uma ação que exige acesso ao Drive. armazenamento do app, 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, é possível verificar se a solicitação as permissões 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 mais um conjunto de permissões convenientemente.