Seletor de contatos do Android

O seletor de contatos do Android oferece uma interface padrão que preserva a privacidade e permite que os usuários compartilhem contatos específicos com apps. Introduzido no Android 17, esse recurso serve como uma alternativa sem permissão à permissão ampla READ_CONTACTS.

Ao usar o seletor de contatos, os apps podem pedir acesso a dados específicos de contatos, como números de telefone ou endereços de e-mail. O usuário seleciona os contatos que quer compartilhar, e o sistema concede ao app acesso de leitura temporário apenas a esses detalhes.

Arquitetura

O seletor de contatos consiste em dois componentes principais:

  • App de interface do usuário do seletor:esse componente serve como a interface voltada ao usuário para selecionar contatos.
  • Provedor de sessão:esse componente atua como o serviço de back-end que gerencia a sessão de acesso temporário.

Diagrama de sequência do seletor de contatos

Figura 1. Diagrama sequencial

Interface do seletor

A interface do usuário do seletor processa a interface de seleção de contatos e consulta o provedor de contatos diretamente para preencher visualizações com base nos tipos de dados solicitados. As visualizações compatíveis incluem:

  • Somente números de telefone:a interface mostra contatos com números de telefone.
  • Somente e-mails:a interface mostra contatos que têm endereços de e-mail.
  • Dados de contato personalizados:a interface mostra contatos que correspondem a campos de dados específicos solicitados.

Além disso, a interface é compatível com os seguintes recursos:

  • Lista em ordem alfabética:os contatos são classificados em ordem alfabética com remoção de duplicidade.
  • Avatares de contato:a interface mostra fotos ou avatares de contatos.
  • Favoritos:uma categoria "Favoritos" aparece na parte de cima da lista de contatos.
  • Troca de perfil:com esse recurso, os usuários podem selecionar contatos de diferentes perfis (por exemplo, trabalho x particular).
  • Seleção única e múltipla:o sistema oferece suporte aos modos de seleção única e múltipla. O limite padrão é 50 e o máximo é 100.
  • Prévia da seleção:os usuários podem visualizar e gerenciar os contatos selecionados antes de confirmar.
  • Rolagem rápida:esse recurso permite navegar rapidamente pela lista de contatos.
  • Pesquisa:uma barra de pesquisa é fornecida para encontrar contatos específicos.
  • Banner e página de detalhes de privacidade:um aviso obrigatório informa aos usuários exatamente quais campos de dados (por exemplo, números de telefone, e-mails) o app está solicitando.

Provedor de sessão

O provedor de sessão (packages/providers/ContactsProvider) atua como um intermediário seguro entre o app cliente e o provedor de contatos.

  • Função:use o provedor de sessão apenas ao iniciar o seletor usando Intent.ACTION_PICK_CONTACTS.
  • Gerenciamento de sessão:quando um usuário seleciona contatos, a interface do seletor grava os dados de seleção (mapeados para o UID do cliente) no provedor de sessão.
  • Acesso aos dados:o provedor retorna um URI content://com.android.providers.contacts.picker.sessions ao seletor. O seletor aplica flags de leitura adequadas antes de retornar o URI ao app cliente. Esse URI concede acesso de leitura granular e temporário aos campos de dados específicos selecionados pelo usuário, sem expor todos os dados do contato.
  • Acesso privilegiado:a assinatura android.permission.MANAGE_CONTACTS_PICKER_SESSION e as permissões privilegiadas protegem o acesso de gravação ao provedor de sessão, garantindo que apenas o seletor de sistema confiável possa criar sessões.

Integração

Os fabricantes de hardware e parceiros precisam incluir o seletor de contatos do Android em builds com Android 17 e versões mais recentes.

Intents compatíveis

  • Intent.ACTION_PICK_CONTACTS: a intent recomendada para apps destinados ao Android 17 e versões mais recentes.
  • Intent.ACTION_PICK: mantido para compatibilidade com versões anteriores. O sistema encaminha automaticamente essas solicitações para o novo seletor de tipos MIME compatíveis (e-mail, telefone ou contato).

Gerenciamento de sessões

Para manter a integridade e a privacidade do dispositivo, o provedor de sessão aplica uma política estrita de limpeza de dados:

  • Job de limpeza:um job do sistema (CleanupJobService) é executado periodicamente para remover dados de sessão com mais de 24 horas.
  • Limite de linhas:para evitar o uso do armazenamento excessivo, a tabela do provedor de sessão tem um limite máximo de 5.000 linhas. Se a tabela atingir esse tamanho, o sistema vai remover automaticamente as linhas mais antigas antes de inserir novos dados de sessão.
  • Persistência:os dados da sessão são temporários. Os apps cliente precisam persistir os dados de contato retornados imediatamente após o recebimento.

Permissões

O acesso de gravação ao provedor de sessão requer a permissão android.permission.MANAGE_CONTACTS_PICKER_SESSION, que é restrita ao pacote do seletor de contatos do Android.

Personalização e compliance

Os parceiros podem personalizar elementos visuais, como fontes e cores, mas as implementações precisam obedecer à seção 3.18.2 (TBD) do CDD do Android.

Validação

Os parceiros precisam verificar a implementação usando o conjunto de teste de compatibilidade (CTS) e o conjunto de teste dos Serviços do Google Mobile (GTS).