Información de afinidades y Proveedor de contactos

A partir de Android 10, el acceso a los datos relacionados con la afinidad de contactos, administrados por el componente Proveedor de contactos (la fuente de datos que se ve en la app de contactos de un dispositivo), es diferente que en Android 9 y versiones anteriores.

Antes de Android 10, las apps usaban el proveedor de contactos para acceder a los datos y transferirlos entre un dispositivo y servicios en línea. Android 10 incluye cambios relacionados con la accesibilidad de los datos para garantizar una mayor privacidad del usuario en todos los dispositivos con Android 10 que usan el proveedor de contactos. En primer lugar, la base de datos subyacente no contiene datos de afinidades de contacto. Por lo tanto, las apps no pueden escribir en ella ni leerla. Entre los cambios, se incluyen los siguientes:

  • El proveedor de contactos no registra datos relacionados con la afinidad de los contactos, como la cantidad de veces que se contactó a un usuario, la última vez que se lo contactó, la app que se usó, la persona con la que se contactó o cualquier dato histórico relacionado.
  • La clase MultiAutoCompleteTextView de la API de autocompletado del proveedor de contactos no ordena los resultados de la consulta por contador de interacción.
  • El framework de Android no proporciona una clasificación de contactos implícita. (Sin embargo, permanece la clasificación de contactos explícita controlada por el usuario, como los contactos destacados).

Para implementar estos cambios, realiza una de las siguientes acciones:

  • Usa la versión más reciente del Proveedor de contactos.
  • Actualiza tu versión (si usas una versión bifurcada).

Además, actualiza las apps que dependen de las funciones obsoletas del Proveedor de contactos. No se permiten las versiones de API diseñadas para ser soluciones alternativas a las funciones obsoletas.

En Android 9 y versiones anteriores, no se quitaron los datos de interacción con los contactos del proveedor de contactos. En su lugar, los datos de interacción con los contactos se borran periódicamente (aproximadamente una vez al día) para simular el equivalente en Android 10. El proveedor de contactos almacena esta información, pero solo de forma temporal.

Cambios en la API

Se espera que estos cambios tengan un gran impacto en las APIs. Por ejemplo, la clasificación de autocompletar no funcionará igual de bien. Entre los posibles impactos en el comportamiento de la API, se incluyen los siguientes:

  • El Proveedor de contactos no almacenará las preferencias de un usuario para el contacto ni sus interacciones en las columnas ContactsContract.Contacts de la tabla.
  • La API de Autocomplete no ordenará los resultados por contador de interacción.
  • No se actualizarán las columnas TIMES_CONTACTED / TIMES_USED ni LAST_TIME_CONTACTED / LAST_TIME_USED.
    • Se borran (a null o se establecen en 0, según las columnas afectadas) cuando se actualiza a Android 10.
    • La clasificación en las APIs de consulta de autocompletado muestra resultados ordenados alfabéticamente, nunca por información de afinidad.
    • Las llamadas a la API para contactos frecuentes (por ejemplo, con la cadena de filtro CONTENT_FREQUENT_URI) no muestran resultados.

Por lo general, si alguno de los elementos de la API del proveedor de contactos obsoletos usa contadores, esos contadores (cuando se usan en Android 10) contienen 0 y muestran 0 cuando se consultan. Se ignoran las solicitudes de actualización de las APIs afectadas. Por ejemplo, la clase ContactsContract.DataUsageFeedback dejó de estar disponible, por lo que se ignoran las llamadas de actualización y eliminación a esta clase.

Campos que afectan a las APIs

Estos campos cambiaron en Android 10:

Los campos afectados en Android 10 pueden estar presentes en diferentes APIs, como se indica en la siguiente tabla. Los campos de la API obsoletos muestran los comportamientos que se indican. Debido a que es posible que uno de estos campos obsoletos se use en varias de tus APIs, verifica tus casos de uso.

Clase Campos de la API 10 devoluciones
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Estas columnas siempre contienen 0, independientemente de cómo se usen. Se ignoran los intentos de modificarlos.
Contacts markAsContacted() No se realiza ninguna operación.
ContactsContract.DataUsageFeedback

update
delete

No se realiza ninguna operación.
ContactsContract.Contacts Frecuente (destacado + frecuente)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Muestra solo contactos starred. No se muestran contactos frecuentes.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
APIs de filtro (también llamadas de autocompletado)

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Los resultados no se ordenan por afinidad. Se ordenan por starred y name.

Alternativas

No hay alternativas para los campos de API obsoletos. No se permiten las soluciones diseñadas para evitar estas restricciones, ya sea en forma de APIs o campos nuevos.

Implementación

No necesitas hacer nada para implementar estos cambios. Forman parte de la iniciativa para mejorar la privacidad del usuario en la plataforma del SO Android. Sin embargo, si tus apps dependen de funciones obsoletas, te recomendamos que las actualices para compensar los cambios. Además, si usas una versión bifurcada del Proveedor de contactos, debes actualizarlo.

Sin personalización

No personalices ni soluciones los cambios en la información de afinidad de los contactos. Están integrados en el framework, y si realizas cambios, se anulará la cumplimiento. Nunca modifiques la configuración predeterminada ni ofrezcas alternativas de puertas traseras.