Informações sobre afinidades e sobre o Provedor de contatos

No Android 10 e versões mais recentes, os dados relacionados à afinidade de contatos, gerenciados pelo componente Provedor de contatos (a fonte de dados vista no app de contatos de um dispositivo), são acessados de maneira diferente do Android 9 e versões anteriores.

Antes do Android 10, os apps usavam o Provedor de Contatos para acessar e transferir dados entre um dispositivo e serviços on-line. O Android 10 tem mudanças relacionadas à acessibilidade de dados para garantir mais privacidade do usuário em todos os dispositivos Android 10 que usam o provedor de contatos. Por exemplo, o banco de dados subjacente não contém dados de afinidades de contato. Portanto, os apps não podem gravar ou ler a partir deles. Confira algumas das mudanças:

  • O provedor de contatos não registra dados relacionados à afinidade de contatos, como o número de vezes que um usuário foi contatado, a última vez que ele foi contatado, o app usado, a pessoa contatada ou qualquer dado histórico relacionado.
  • A classe MultiAutoCompleteTextView na API de autopreenchimento do provedor de contatos não classifica os resultados da consulta por contador de interação.
  • O framework do Android não oferece classificação de contatos implícita. No entanto, a classificação de contatos explícita controlada pelo usuário (como contatos com estrela) permanece.

Para implementar essas mudanças, faça o seguinte:

  • Use o Provedor de Contatos mais recente.
  • Atualize a versão (se você estiver usando uma versão bifurcada).

Além disso, atualize todos os apps que dependem dos recursos descontinuados do Provedor de contatos. Versões de API projetadas para contornar as funções descontinuadas não são permitidas.

No Android 9 e versões anteriores, os dados de interação de contato do provedor de contatos não foram removidos. Em vez disso, os dados de interação com contatos são limpos periodicamente (aproximadamente uma vez por dia) para simular o equivalente no Android 10. O Provedor de Contatos armazena essas informações, mas apenas temporariamente.

Mudanças na API

Espera-se que essas mudanças tenham um grande impacto nas APIs. Por exemplo, a classificação de preenchimento automático não vai funcionar tão bem. Os possíveis impactos no comportamento da API incluem o seguinte:

  • O Provedor de contatos não armazena as preferências de um usuário ou as interações com o contato nas colunas da tabela ContactsContract.Contacts.
  • A API Autocomplete não classifica os resultados por contador de interação.
  • As colunas TIMES_CONTACTED / TIMES_USED e LAST_TIME_CONTACTED / LAST_TIME_USED não serão atualizadas.
    • Elas são limpas (para null ou definidas como 0, dependendo das colunas afetadas) após o upgrade para o Android 10.
    • A classificação nas APIs de consulta de preenchimento automático retorna resultados classificados em ordem alfabética, nunca por informações de afinidade.
    • As chamadas de API para contatos frequentes (por exemplo, usando a string de filtro CONTENT_FREQUENT_URI) não retornam resultados.

Em geral, se qualquer um dos elementos descontinuados da API Contacts Provider usar contadores, esses contadores (quando usados no Android 10) vão conter 0 e retornar 0 quando consultados. As solicitações de atualização das APIs afetadas são ignoradas. Por exemplo, a classe ContactsContract.DataUsageFeedback foi descontinuada. Portanto, as chamadas de atualização e exclusão para essa classe são ignoradas.

Campos que afetam as APIs

Estes campos foram alterados no Android 10:

Os campos afetados no Android 10 podem estar presentes em APIs diferentes, conforme indicado na tabela abaixo. Os campos da API descontinuados retornam comportamentos conforme listados. Como um desses campos descontinuados pode ser usado em várias APIs, verifique seus casos de uso.

Classe Campos da API 10 devoluções
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Essas colunas sempre contêm 0, independentemente de como são usadas. As tentativas de modificá-las são ignoradas.
Contacts markAsContacted() Nenhuma operação.
ContactsContract.DataUsageFeedback

update
delete

Nenhuma operação.
ContactsContract.Contacts Strequent (estrelado + frequente)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Retorna apenas os contatos marcados com estrela. Nenhum contato frequente foi retornado.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
APIs de filtro (também chamadas de preenchimento automático)

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Resultados não classificados por afinidade. Eles são classificados por com estrela e nome.

Alternativas

Não há alternativas para os campos de API descontinuados. Soluções alternativas projetadas para contornar essas restrições, seja na forma de novas APIs ou novos campos, não são permitidas.

Implementação

Você não precisa fazer nada para implementar essas mudanças. Eles fazem parte da iniciativa para aumentar a privacidade do usuário na plataforma do SO Android. No entanto, se seus apps dependem de recursos descontinuados, você pode atualizá-los para compensar as mudanças. Além disso, se você usa uma versão ramificada do Provedor de contatos, é necessário atualizá-lo.

Sem personalização

Não personalize nem contorne as mudanças nas informações de afinidade dos contatos. Eles são integrados ao framework, e qualquer mudança que você fizer vai afetar a conformidade. Nunca altere as configurações padrão ou forneça alternativas de backdoor.