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

Начиная с 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 устарел, поэтому вызовы update и delete для этого класса игнорируются.

Поля, влияющие на 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 Строгий ( помеченный звездочкой + частый)
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. Однако, если ваши приложения используют устаревшие функции, вы можете обновить свои приложения, чтобы компенсировать любые изменения. Кроме того, если вы используете разветвленную версию поставщика контактов, вы должны обновить поставщика контактов.

Нет настройки

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