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