Como parte da melhoria da qualidade do app e da proteção da privacidade do usuário, recomendamos minimizar o uso de permissões nos apps. Isso ajuda os usuários a descobrir e usar apps de alta qualidade que oferecem um ambiente seguro.
Solicitar permissões dos usuários interrompe o fluxo do usuário, e eles podem negar sua solicitação. Além disso, sempre que você declarar uma nova permissão, será necessário analisar como o app solicita e compartilha dados do usuário. Algumas permissões e APIs muito sensíveis exigem que você declare, no app, o acesso aos dados, a coleta, o uso e o compartilhamento deles.
Há várias outras maneiras de minimizar o uso de permissões:
- Use alternativas de fidelidade mais baixa para acesso à permissão de dados do usuário, quando aplicável, como solicitar dados de localização aproximados em vez de precisos quando não for necessário.
- Use seletores e alternativas de permissão que concedam acesso a permissões sensíveis em circunstâncias limitadas, como o seletor de fotos, o seletor de contatos e o botão de localização
- Chame APIs que permitem que o app execute a funcionalidade escolhida sem declarar permissões.
- Invoque intents ou manipuladores de eventos específicos para executar a funcionalidade, em vez de declarar permissões.
- O sistema fornece contratos integrados para diferentes operações de arquivos e também oferece suporte a contratos personalizados.
Se for necessário declarar uma permissão, sempre respeite a decisão do usuário e possibilite a degradação suave da experiência do app.
Esta página descreve vários casos de uso que seu app pode atender sem declarar a necessidade de permissões.
Mostrar lugares próximos
Seu app pode precisar saber a localização aproximada do usuário. Isso é útil para mostrar informações que reconhecem a localização, como restaurantes nas proximidades. Cada caso de uso de localização tem um conjunto exclusivo de requisitos de precisão e duração do acesso, e a maioria só precisa de uma aproximação aproximada do paradeiro do usuário. Se você estiver implementando uma funcionalidade no app que depende da localização do usuário, considere as opções a seguir para ajudar a selecionar a abordagem de acesso certa.
- Se a funcionalidade do app exigir uma localização precisa, mas apenas em um determinado momento durante o uso do app, como "Pesquisar perto de mim" ou preencher automaticamente um endereço para comércio eletrônico, o uso do botão de localização provavelmente será a melhor opção para reduzir o atrito do usuário e a dependência da permissão de escopo mais amplo.
- Se o app precisa da localização com frequência, declare a
ACCESS_COARSE_LOCATIONpermissão. Ela fornece uma estimativa de local do dispositivo com base nos serviços de localização, conforme descrito na documentação sobre precisão do local aproximado. - Caso o app precise da localização com menos frequência ou apenas uma vez, peça para o usuário inserir um endereço ou código postal.
Outros casos de uso podem exigir uma estimativa mais precisa da localização de um dispositivo.
Essas situações são as únicas em que é possível declarar a
ACCESS_FINE_LOCATION permissão.
Criar e acessar arquivos
O Android permite criar e acessar arquivos sem precisar declarar nenhuma permissão relacionada ao armazenamento ou aos sensores.
Abrir arquivos de mídia
O app pode permitir que os usuários escolham fotos e vídeos, por exemplo, para anexos de mensagens ou fotos de perfil.
Para oferecer suporte a essa funcionalidade, use o seletor de fotos. O seletor de fotos não exige nenhuma permissão de execução. Quando um usuário interage com o seletor de fotos para escolher fotos ou vídeos e compartilhar com seu app, o sistema concede acesso de leitura temporário ao URI associado aos arquivos de mídia selecionados.
Se o app precisar acessar arquivos de mídia sem usar o seletor de fotos, não será necessário declarar nenhuma permissão de armazenamento:
- Se você acessar arquivos de mídia criados pelo app, ele já terá acesso a eles no armazenamento de mídia.
- Se você acessar arquivos de mídia criados por outros apps, use o framework de acesso ao armazenamento.
Abrir documentos
Seu app pode mostrar documentos que o usuário criou no seu app ou em outro. Um exemplo comum é um arquivo de texto.
Nessa situação, declare o READ_EXTERNAL_STORAGE apenas para
compatibilidade com dispositivos mais antigos. Defina android:maxSdkVersion como 28.
Dependendo do app que criou o documento, siga um destes procedimentos:
- Se o usuário criou o documento no seu app, acesse-o diretamente.
- Se o usuário criou o documento em outro app, use o Framework de acesso ao armazenamento.
Tirar uma foto
Os usuários podem tirar fotos no seu app usando o app de câmera pré-instalado do sistema.
Nessa situação, não declare a permissão CAMERA. Em vez disso, invoque a
ACTION_IMAGE_CAPTURE ação da intent.
Gravar um vídeo
Os usuários podem gravar vídeos no seu app usando o app de câmera pré-instalado do sistema.
Nessa situação, não declare a permissão CAMERA. Em vez disso, invoque a
ACTION_VIDEO_CAPTURE ação da intent.
Identificar o dispositivo que está executando uma instância do seu app
Uma instância específica do seu app pode precisar saber em qual dispositivo ela está sendo executada. Isso é útil para apps que têm preferências ou mensagens específicas do dispositivo, como playlists diferentes para dispositivos de TV e wearables.
Nessa situação, não acesse o IMEI do dispositivo diretamente. Na verdade, não é possível fazer isso no Android 10 em diante. Em vez disso, escolha uma das opções a seguir:
- Consiga um identificador de dispositivo exclusivo para a instância do seu app usando a biblioteca de Instance ID.
- Crie seu próprio identificador com escopo do armazenamento do seu aplicativo. Use funções básicas do
sistema, como
randomUUID().
Parear com um dispositivo por Bluetooth
Seu app pode oferecer uma experiência aprimorada transferindo dados para outro dispositivo por Bluetooth.
Para aceitar essa funcionalidade, não declare as permissões ACCESS_FINE_LOCATION,
ACCESS_COARSE_LOCATIION ou BLUETOOTH_ADMIN. Em vez disso, use
o pareamento de dispositivo complementar.
Inserir automaticamente o número de um cartão de pagamento
O Google Play Services oferece uma biblioteca que permite inserir automaticamente um número de cartão de pagamento. Em vez de declarar a permissão CAMERA, use
a biblioteca de reconhecimento de cartão de débito e crédito.
Gerenciar ligações e mensagens de texto
O Android e o Google Play Services oferecem bibliotecas que permitem gerenciar ligações e mensagens de texto sem precisar declarar nenhuma permissão relacionada a chamadas ou mensagens SMS.
Inserir uma senha única automaticamente
Para otimizar um fluxo de trabalho de autenticação de dois fatores, seu app pode inserir automaticamente a senha de uso único enviada para o dispositivo de um usuário para verificar a identidade.
Para oferecer suporte a essa funcionalidade em dispositivos com o Google Play Services, não declare a permissão READ_SMS. Em vez disso, use a API SMS Retriever.
Em outros dispositivos, se o app for direcionado ao Android 8.0 (nível 26 da API) ou versões mais recentes,
gere um token específico para o app usando createAppSpecificSmsToken(). Transmita esse token para outro app ou serviço que possa enviar uma mensagem SMS de verificação.
Verificar o número de telefone de um usuário
Para permitir que seu app verifique com segurança o número de telefone de um usuário, a solução recomendada é a API Digital Credentials. Usar essa API diretamente ou por uma ampla variedade de agregadores compatíveis permite verificar de forma confiável as informações da conta do usuário sem solicitar permissões sensíveis do dispositivo. Para uma solução do Firebase, consulte a verificação de número de telefone do Firebase.
Como alternativa, você pode verificar o número de telefone de um usuário usando uma senha única, usando a API SMS Retriever.
Inserir o número de telefone do usuário automaticamente
Para oferecer vendas ou suporte mais eficientes, o app pode permitir que o usuário insira o número de telefone do dispositivo automaticamente.
Para oferecer suporte a essa funcionalidade em dispositivos com o Google Play Services, não
declare a permissão READ_PHONE_STATE. Em vez disso, use a biblioteca Phone Number
Hint.
Filtrar ligações telefônicas
Para que interrupções desnecessárias não atrapalhem o usuário, seu app pode filtrar ligações como spam.
Para aceitar essa funcionalidade, não declare a permissão READ_PHONE_STATE.
Em vez disso, use a CallScreeningService API.
Fazer ligações telefônicas
Seu app pode oferecer a possibilidade de fazer uma ligação telefônica tocando nas informações de um contato.
Para oferecer suporte a essa funcionalidade, use a ação da intent ACTION_DIAL em vez da ação ACTION_CALL. ACTION_CALL requer a permissão de instalação CALL_PHONE para impedir que dispositivos que não podem fazer ligações, como alguns tablets, instalem seu aplicativo.
Pausar mídia quando o app for interrompido
Se o usuário receber uma ligação ou se um alarme configurado pelo usuário tocar, seu app irá pausar qualquer reprodução de mídia até recuperar a seleção de áudio.
Para aceitar essa funcionalidade, não declare a permissão READ_PHONE_STATE.
Em vez disso, implemente o onAudioFocusChange() manipulador de eventos, que é executado
automaticamente quando o sistema muda a seleção de áudio. Saiba mais sobre como
implementar a seleção de áudio.
Ler códigos de barras
O Android oferece suporte para a API Google Code Scanner, com tecnologia do Google Play Services, que permite decodificar códigos de barras sem declarar nenhuma permissão de câmera. Essa API ajuda a preservar a privacidade do usuário e diminui a probabilidade de você precisar criar uma interface personalizada para seu caso de uso de leitura de código de barras.
A API lê o código de barras e retorna apenas os resultados da leitura para o app. As imagens são processadas no dispositivo, e o Google não armazena dados nem verifica os resultados.
Se o app precisar oferecer suporte para casos de uso complexos ou formatos de código de barras ou se ele exigir uma interface personalizada, use a API de leitura de código de barras do kit de ML em vez disso.
Redefinir permissões não usadas
O Android oferece várias maneiras de redefinir as permissões de execução que não foram usadas para o estado padrão e negado:
Leia as orientações de design.
Solicitar permissões de execução
Depois de avaliar que seu app precisa declarar e solicitar permissões de execução, siga um fluxo de trabalho específico para fazer isso.
Leia as orientações de design.
Explicar por que o app precisa de permissões
O uso de requestPermissions() mostra uma caixa de diálogo indicando quais permissões o
app quer usar, mas não explica o motivo, o que pode ser confuso para o usuário.
Para mais detalhes e recomendações sobre como e quando mostrar essa caixa de diálogo, leia as orientações de design.
Processar recusas de permissão
Seu app precisa ajudar os usuários a entender as implicações de recusar uma permissão antes e depois de decidirem fazer isso.
Leia as orientações de design.