Начиная с 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:
-
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
-
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
-
ContactsContract.DataUsageStatColumns#TIMES_USED
-
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
-
ContactsContract#CONTENT_STREQUENT_FILTER_URI
-
ContactsContract.Contacts#CONTENT_STREQUENT_URI
-
ContactsContract.Contacts#CONTENT_FREQUENT_URI
-
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
-
ContactsContract.Contacts#CONTENT_FILTER_URI
Затронутые поля в 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 | | Нет операции. |
ContactsContract.Contacts | Strequent (избранные + частые)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI | Возвращаю только помеченные контакты. Частых контактов не было. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable | Фильтр (также называемый автозаполнением) API | Результаты не отсортированы по интересам. Они сортируются по звёздному и имени. |
Альтернативы
Альтернатив устаревшим полям API нет. Обходные пути, разработанные для обхода этих ограничений, будь то в форме новых API или новых полей, не допускаются.
Реализация
Для реализации этих изменений ничего делать не нужно. Они являются частью инициативы по повышению конфиденциальности пользователей на платформе ОС Android. Однако, если ваши приложения используют устаревшие функции, вы можете обновить свои приложения, чтобы компенсировать любые изменения. Кроме того, если вы используете разветвленную версию поставщика контактов, вам необходимо обновить свой поставщик контактов.
Без настройки
Не настраивайте и не работайте с изменениями информации о привязке контактов. Они встроены в структуру, и внесение любых изменений выводит вас из режима соответствия. Никогда не изменяйте настройки по умолчанию и не предоставляйте альтернативы бэкдору.