Para ter a melhor experiência do usuário, solicite o mínimo de escopos possível ao
fazer o login dos usuários pela primeira vez. 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á
apenas o necessário para o login.
Se o app tiver recursos que podem usar dados da API do Google, mas que não sejam necessários como parte da funcionalidade principal, crie seu app para processar 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.
Solicite outros escopos 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 Google Drive" pela primeira vez.
Ao usar essa técnica, você pode evitar sobrecarregar novos usuários ou confundir os usuários quanto ao motivo da solicitação de determinadas permissões.
Como solicitar permissões exigidas pelas 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 escopos extras necessários do
usuário.
Por exemplo, se um usuário executar 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, é 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
forma mais conveniente.