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.