Выбор контактов Android

Окно выбора контактов Android – это стандартный интерфейс, который позволяет пользователям делиться определенными контактами с приложениями, не нарушая конфиденциальности. Эта функция, появившаяся в Android 17, представляет собой альтернативу разрешению READ_CONTACTS, не требующую предоставления доступа.

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

Архитектура

Инструмент выбора контактов состоит из двух основных компонентов:

  • Приложение "Выбор контактов". Этот компонент представляет собой пользовательский интерфейс для выбора контактов.
  • Поставщик сеансов. Этот компонент действует как бэкенд-служба, управляющая сеансом временного доступа.

Схема последовательности для инструмента выбора контактов

Рисунок 1. Диаграмма последовательности

Интерфейс выбора файлов

Интерфейс инструмента выбора контактов обрабатывает пользовательский интерфейс для выбора контактов и напрямую запрашивает у поставщика контактов данные для заполнения представлений на основе запрошенных типов данных. Поддерживаются следующие представления:

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

Кроме того, в интерфейсе поддерживаются следующие функции:

  • Список в алфавитном порядке. Контакты сортируются по алфавиту, а дубликаты удаляются.
  • Аватары контактов. В интерфейсе показываются фотографии или аватары контактов.
  • Избранное. Категория "Избранное" показывается вверху списка контактов.
  • Переключатель профилей. Пользователи могут выбирать контакты из разных профилей пользователей, например рабочего и личного.
  • Один или несколько вариантов. Система поддерживает выбор одного или нескольких вариантов (по умолчанию можно выбрать до 50 вариантов, а максимум – 100).
  • Предварительный просмотр выбранных контактов. Пользователи могут просматривать выбранные контакты и управлять ими перед подтверждением.
  • Быстрая прокрутка. Эта функция позволяет быстро перемещаться по списку контактов.
  • Поиск. Строка поиска позволяет находить нужные контакты.
  • Баннер и страница приложения с информацией о конфиденциальности. Обязательное уведомление, в котором пользователям сообщается, какие именно поля данных (например, номера телефонов, адреса электронной почты) запрашивает приложение.

Поставщик сеансов

Поставщик сеанса (packages/providers/ContactsProvider) выступает в качестве безопасного посредника между клиентским приложением и поставщиком контактов.

  • Роль. Используйте поставщика сеансов только при запуске инструмента выбора с помощью Intent.ACTION_PICK_CONTACTS.
  • Управление сеансом. Когда пользователь выбирает контакты, интерфейс выбора записывает данные о выбранных контактах (сопоставленные с UID клиента) в поставщика сеанса.
  • Доступ к данным. Поставщик возвращает URI content://com.android.providers.contacts.picker.sessions в инструмент выбора. Перед тем как вернуть URI клиентскому приложению, средство выбора применяет к нему подходящие флаги чтения. Этот URI предоставляет временный детализированный доступ на чтение к определенным полям данных, выбранным пользователем, не раскрывая все данные контакта.
  • Привилегированный доступ. Разрешения android.permission.MANAGE_CONTACTS_PICKER_SESSION и подпись защищают доступ для записи к поставщику сеансов, гарантируя, что создавать сеансы может только доверенный системный инструмент выбора.

Интеграция

Производители оборудования и партнеры должны включать выбор контактов Android в сборки с Android 17 и более поздними версиями.

Поддерживаемые намерения

  • Intent.ACTION_PICK_CONTACTS – рекомендуемое намерение для приложений, предназначенных для Android 17 и более поздних версий.
  • Intent.ACTION_PICK – поддерживается для обратной совместимости. Система автоматически перенаправляет эти запросы в новый инструмент выбора для поддерживаемых MIME-типов (электронная почта, телефон или контакт).

Управление сеансами

Чтобы обеспечить конфиденциальность и состояние устройства, поставщик сеансов применяет строгие правила очистки данных:

  • Задание на очистку. Системное задание (CleanupJobService) периодически удаляет данные сеансов, которые старше 24 часов.
  • Ограничение на количество строк. Чтобы не занимать слишком много места в хранилище, в таблице поставщиков сеансов может быть не более 5000 строк. Если таблица достигает этого размера, система автоматически удаляет самые старые строки перед вставкой новых данных сеанса.
  • Сохранение. Данные сеанса являются временными. Клиентские приложения должны сохранять возвращенные данные о контактах сразу после получения.

Разрешения

Для записи в поставщика сеансов требуется разрешение android.permission.MANAGE_CONTACTS_PICKER_SESSION, которое предоставляется только пакету инструмента выбора контактов в Android.

Настройка и соответствие требованиям

Партнеры могут настраивать визуальные элементы, такие как шрифты и цвета, но реализация должна соответствовать разделу 3.18.2 "Инструмент выбора контактов" документа CDD для Android.

Проверка

Партнеры должны проверять реализацию с помощью Compatibility Test Suite (CTS) и набора тестов Google для мобильных устройств (GTS).