Para a melhor experiência do usuário, solicite o menor escopo possível ao
fazer o login dos usuários inicialmente. Se a funcionalidade principal do app não estiver vinculada a um
serviço do Google, geralmente você só vai precisar da configuração de GoogleSignInOptions.DEFAULT_SIGN_IN
no login.
Se o app tiver recursos que usem dados da API do Google, mas não sejam necessários como parte da funcionalidade principal dele, crie um app que possa processar os casos em que os dados da API não estiverem 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 executar 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.
Usando essa técnica, você pode evitar sobrecarregar 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 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 outros escopos necessários do
usuário.
Por exemplo, se um usuário executar 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();
}
}
}
Você também pode transmitir um GoogleSignInOptionsExtension
para hasPermissions
e requestPermissions
para verificar e adquirir um conjunto de permissões de maneira mais conveniente.