Информация о поставщике контактов и родственных связях

Начиная с Android 10, контакты аффинностью связанных данных, управляемые Контакты поставщика компонента (источник данных замеченных в контактах приложения для устройства), доступ иначе , чем в Android 9 и ниже.

До Android 10 приложения использовали поставщика контактов для доступа к данным и их передачи между устройством и онлайн-сервисами. В Android 10 внесены изменения в отношении доступности данных, чтобы обеспечить повышенную конфиденциальность пользователей на всех устройствах Android 10, использующих поставщик контактов. Во-первых, основная база данных не содержит данных о контактах. Поэтому приложения не могут писать или читать с него. Изменения включают следующее:

  • Поставщик контактов не записывает данные, связанные с привязкой к контактам, такие как количество обращений к пользователю, время последнего контакта, используемое приложение, контактное лицо или любые связанные исторические данные.
  • MultiAutoCompleteTextView класс в Контакты поставщика автозаполнения API не сортирует результаты запроса счетчиком взаимодействия.
  • Платформа Android не обеспечивает неявного ранжирования контактов. (Тем не менее, это контролируемый, явные контакты ранжирование (например, помеченные контакты) остается).

Чтобы применить эти изменения, выполните одно из следующих действий:

  • Используйте последнюю версию поставщика контактов.
  • Обновите свою версию (если вы используете разветвленную версию).

Кроме того, обновить все приложения , которые полагаются на устаревших функций Контакты поставщика . Версии API , предназначенные быть обходными к устаревшим функциям не допускаются.

Для Android 9 и ниже данные о взаимодействии с контактами из поставщика контактов не были удалены. Вместо этого данные о взаимодействии контактов очищаются периодически (примерно один раз в день) для имитации эквивалента в Android 10. Поставщик контактов сохраняет эту информацию, но только временно.

Изменения API

Ожидается, что эти изменения окажут большое влияние на API. Например, рейтинг автозаполнения также не будет работать. Потенциальные воздействия на поведение API включают следующее:

  • Контакты Поставщик не будет хранить предпочтения пользователя, для, или ее взаимодействия с контактом в ContactsContract.Contacts столбцов таблицы.
  • API автозаполнения не сортирует результаты по счетчику взаимодействий.
  • TIMES_CONTACTED / TIMES_USED и LAST_TIME_CONTACTED / LAST_TIME_USED столбцы не будут обновлены.
    • Они ясно (либо null или значение 0, в зависимости от затронутых столбцов) при обновлении до Android 10.
    • Ранжирование в API запросов автозаполнения возвращает результаты, отсортированные в алфавитном порядке, а не по информации о сходстве.
    • Вызовы API для частых контактов (например, с помощью фильтра строки CONTENT_FREQUENT_URI ) не возвращать никаких результатов.

Как правило, если какой-либо из устаревших элементов API поставщика контактов использует счетчики, эти счетчики (при использовании в Android 10) содержат 0 и возвращают 0 при запросе. Запросы на обновление от затронутых API игнорируются. Например, ContactsContract.DataUsageFeedback класс был устаревшим, поэтому обновлять и удалять вызовы этого класса игнорируется.

Поля, влияющие на API

Эти поля были изменены в Android 10:

Затронутые поля в Android 10 могут присутствовать в разных API, как указано в таблице ниже. Устаревшие поля API возвращают перечисленное поведение. Поскольку одно из этих устаревших полей может использоваться в нескольких ваших API, проверьте свои варианты использования.

Класс Поля API 10 возвратов
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
Эти столбцы всегда содержат 0, независимо от того, как они используются. Попытки их изменить игнорируются.
Contacts markAsContacted() Нет операции.
ContactsContract.DataUsageFeedback

update
delete

Нет операции.
ContactsContract.Contacts Strequent (избранные + частые)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
Возвращаю только помеченные контакты. Частых контактов не было.
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
Фильтр (также называемый автозаполнением) API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

Результаты не отсортированы по интересам. Они сортируются по звёздному и имени.

Альтернативы

Альтернатив устаревшим полям API нет. Обходные пути, разработанные для обхода этих ограничений, будь то в форме новых API или новых полей, не допускаются.

Реализация

Для реализации этих изменений ничего делать не нужно. Они являются частью инициативы по повышению конфиденциальности пользователей на платформе ОС Android. Однако, если ваши приложения используют устаревшие функции, вы можете обновить свои приложения, чтобы компенсировать любые изменения. Кроме того, если вы используете разветвленную версию поставщика контактов, вам необходимо обновить свой поставщик контактов.

Без настройки

Не настраивайте и не работайте с изменениями информации о привязке контактов. Они встроены в структуру, и внесение любых изменений выводит вас из режима соответствия. Никогда не изменяйте настройки по умолчанию и не предоставляйте альтернативы бэкдору.