Provedor de contatos e informações de afinidades

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

Antes do Android 10, os aplicativos usavam o Provedor de Contatos para acessar dados e transferi-los entre um dispositivo e serviços online. O Android 10 apresenta alterações em relação à acessibilidade de dados para garantir maior privacidade do usuário em todos os dispositivos Android 10 que usam o Provedor de Contatos. Por um lado, o banco de dados subjacente não contém dados de afinidades de contato. Portanto, os aplicativos não podem gravar ou ler nele. As alterações incluem o seguinte:

  • O Provedor de Contatos não registra dados relacionados à afinidade de contatos, como o número de vezes que um usuário foi contatado, o último contato, o aplicativo usado, a pessoa contatada ou quaisquer dados históricos relacionados.
  • A classe MultiAutoCompleteTextView na API de preenchimento automático do Provedor de Contatos não classifica os resultados da consulta por contador de interação.
  • A estrutura do Android não fornece classificação implícita de contatos. (No entanto, a classificação de contatos explícitos e controlada pelo usuário (como contatos marcados com estrela ) permanece).

Para implementar essas alterações, siga um destes procedimentos:

  • Use o provedor de contatos mais recente.
  • Atualize sua versão (se você estiver usando uma versão bifurcada).

Além disso, atualize todos os aplicativos que dependem dos recursos obsoletos do Provedor de Contatos . Versões de API projetadas para serem soluções alternativas para funções obsoletas não são permitidas.

Para 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 de contato 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 de API

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

  • O Provedor de Contatos não armazenará as preferências ou interações de um usuário com o contato nas colunas da tabela ContactsContract.Contacts .
  • A API de preenchimento automático não classificará 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.
    • Eles são limpos (como null ou definidos como 0, dependendo das colunas afetadas) na atualização 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.

Geralmente, se algum dos elementos obsoletos da API do provedor de contatos usar contadores, esses contadores (quando usados ​​no Android 10) conterão 0 e retornarão 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 impactam APIs

Estes campos mudaram no Android 10:

Os campos afetados no Android 10 podem estar presentes em diferentes APIs, conforme indicado na tabela abaixo. Os campos de API obsoletos retornam comportamentos conforme listado. Como um desses campos obsoletos pode ser usado em diversas APIs, verifique seus casos de uso.

Aula Campos de 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á-los são ignoradas.
Contacts markAsContacted() Nenhuma operação.
ContactsContract.DataUsageFeedback

update
delete

Nenhuma operação.
ContactsContract.Contacts Estrequente ( com estrela + frequente)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Retorna apenas contatos marcados com estrela . Nenhum contato frequente retornou.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Filtrar APIs (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 estrela e nome .

Alternativas

Não há alternativas para os campos de API obsoletos. Soluções alternativas projetadas para contornar essas restrições, seja na forma de novas APIs ou de 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 Android OS. No entanto, se seus aplicativos dependem de recursos obsoletos, você pode querer atualizá-los para compensar quaisquer alterações. Além disso, se você usar uma versão bifurcada do Provedor de Contatos, deverá atualizar seu Provedor de Contatos.

Sem personalização

Não personalize nem contorne as alterações nas informações de afinidade dos contatos. Eles estão integrados à estrutura e qualquer alteração tira você da conformidade. Nunca altere as configurações padrão ou forneça alternativas de backdoor.