As solicitações de permissão protegem informações sensíveis disponíveis em um dispositivo e só podem ser usadas quando o acesso a informações é necessário para o funcionamento do app. Este documento fornece dicas sobre como você pode conseguir a mesma funcionalidade (ou uma melhor) sem precisar acessar essas informações. Esta não é uma discussão completa sobre como as permissões funcionam no sistema operacional Android.
Para uma perspectiva mais geral das permissões do Android, consulte a Visão geral das permissões. Para ver detalhes sobre como trabalhar com permissões no seu código, consulte Solicitar permissões do app.
Permissões no Android 6.0 e em versões mais recentes
No Android 6.0 (API de nível 23) e versões mais recentes, os apps podem solicitar permissões do usuário no ambiente de execução, em vez de antes da instalação. Isso permite que os apps solicitem permissões quando realmente precisam dos serviços ou dados protegidos pelos serviços. Embora isso não (necessariamente) mude o comportamento geral do app, foram feitas algumas mudanças relevantes na forma de processamento dos dados confidenciais do usuário:
Aumento no contexto situacional
Os usuários recebem uma solicitação no momento da execução, no contexto do app, para concederem permissão de acesso à função incluída nesses grupos de permissões. Os usuários estão mais atentos ao contexto em que a permissão é solicitada e, em caso de incompatibilidade entre a solicitação e o propósito do app, é ainda mais importante fornecer uma explicação detalhada ao usuário sobre o motivo da solicitação. Sempre que possível, forneça uma explicação no momento da solicitação e em uma caixa de diálogo de acompanhamento se o usuário a negar.
Para aumentar a probabilidade de uma permissão ser aceita, faça a solicitação apenas quando um recurso específico for necessário. Por exemplo, só solicite acesso ao microfone quando um usuário clicar no botão desse recurso. Os usuários são mais propensos a conceder uma permissão esperada.
Mais flexibilidade para a concessão de permissões
Os usuários podem negar acesso a permissões individuais no momento em que são solicitadas e nas configurações, mas eles ainda assim podem se surpreender se um recurso for inutilizado como resultado. É recomendável monitorar quantos usuários estão negando permissões (por exemplo, usando o Google Analytics) para que você possa refatorar seu app dependendo da permissão ou fornecer uma explicação melhor sobre a necessidade da permissão para o funcionamento adequado do app. Garanta também que seu app processe as exceções criadas quando os usuários negam solicitações ou desativam as permissões nas configurações.
Aumento na carga de transações
É solicitado aos usuários que concedam acesso aos grupos de permissões individualmente, e não como um conjunto. Dessa forma, é extremamente importante minimizar o número de permissões solicitadas. Isso aumenta a sobrecarga do usuário para conceder permissões e, portanto, a probabilidade de pelo menos uma das solicitações ser negada.
Permissões que precisam se tornar um gerenciador padrão
Alguns apps dependem do acesso a informações confidenciais do usuário relacionadas a registros de chamadas e mensagens SMS. Se você quiser solicitar permissões especificamente para registros de chamadas e mensagens SMS e publicar seu app na Play Store, precisará solicitar que o usuário configure seu app como o gerenciador padrão de uma função principal do sistema antes de solicitar essas permissões de execução.
Para ver mais informações sobre gerenciadores padrão, incluindo orientações sobre como mostrar uma solicitação de gerenciador padrão para o usuário, consulte o guia sobre permissões usadas somente em gerenciadores padrão.
Conheça as bibliotecas com que está trabalhando
Às vezes, as bibliotecas usadas no seu app exigem permissões. Por
exemplo, as bibliotecas de anúncios e de análise podem exigir acesso ao
grupo de permissões LOCATION
para implementar a função
necessária. Contudo, do ponto de vista do usuário, a solicitação de permissão é enviada
do seu app, não da biblioteca.
Assim como os usuários selecionam apps que usam menos permissões para as mesmas
funções, os desenvolvedores precisam analisar as bibliotecas e selecionar
SDKs de terceiros que não usem permissões desnecessárias. Por exemplo, se
você está usando uma biblioteca que oferece a função de localização,
não solicite a permissão FINE_LOCATION
, a não ser que você esteja
usando funções de segmentação baseadas na localização.
Limite o acesso em segundo plano à localização
Quando seu app é executado em segundo plano, o acesso à localização deve ser fundamental para o recurso principal do app e mostrar um benefício claro para os usuários.
Teste ambos os modelos de permissões
No Android 6.0 (API de nível 23) e versões mais recentes, os usuários concedem e revogam permissões do app durante a execução, não no momento da instalação. Por isso, é necessário testar seu app em condições variadas. Antes do Android 6.0, você podia presumir que, se o app estivesse em execução, ele tinha todas as permissões declaradas no próprio manifesto. Agora, o usuário pode ativar ou desativar as permissões para qualquer app, independente do nível da API. Realize testes para garantir que seu app funcione de forma correta em vários cenários de permissão.
As dicas a seguir vão ajudar você a encontrar problemas de código relacionados a permissões em dispositivos com o nível de API 23 ou mais recente:
- Identifique as permissões atuais do aplicativo e os caminhos de código relacionados.
- Teste o fluxo de usuários entre serviços e dados protegidos por permissão.
- Teste várias combinações de permissões concedidas ou revogadas. Por
exemplo, um app de câmera pode listar
CAMERA
,READ_CONTACTS
eACCESS_FINE_LOCATION
no manifesto. É preciso testar o app com cada uma dessas permissões ativadas e desativadas para garantir que ele possa processar todas as configurações de permissão corretamente. - Use a ferramenta adb para gerenciar
permissões pela linha de comando:
- Liste as permissões e os status por grupo:
$ adb shell pm list permissions -d -g
- Conceda ou revogue uma ou mais permissões:
$ adb shell pm [grant|revoke] <permission-name> ...
- Liste as permissões e os status por grupo:
- Analise o aplicativo para descobrir os serviços que usam permissões.
Outros recursos
- Diretrizes do Material Design para permissões do Android
- Android Marshmallow 6.0: como solicitar permissões: esse vídeo explica o modelo de permissões de execução do Android e o jeito certo de solicitar permissões aos usuários.
- Explicar por que seu app precisa da permissão
- Práticas recomendadas para identificadores exclusivos