Práticas recomendadas para permissões do aplicativo

As solicitações de permissão protegem informações sensíveis disponíveis em um dispositivo e só devem ser usadas quando o acesso às informações é necessário para o funcionamento do app. Este documento fornece dicas de como usar os mesmos recursos (ou melhores) sem exigir acesso a essas informações. Esta não é uma discussão completa sobre o funcionamento das permissões 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 e ACCESS_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 na linha de comando:
    • Listar permissões e 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> ...
  • Analise o aplicativo para descobrir os serviços que usam permissões.

Outros recursos