Android-приложение для выбора контактов

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

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

Архитектура

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

  • Приложение Picker UI: Этот компонент служит пользовательским интерфейсом для выбора контактов.
  • Поставщик сессий: Этот компонент выступает в качестве серверной службы, управляющей временной сессией доступа.

Contact Picker sequence diagram

Рисунок 1. Схема последовательности

Пользовательский интерфейс выбора

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

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

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

  • Список отсортирован по алфавиту: контакты отсортированы по алфавиту с удалением дубликатов.
  • Аватары контактов: В пользовательском интерфейсе отображаются фотографии или аватары контактов.
  • Избранное: Категория «Избранное» отображается в верхней части списка контактов.
  • Переключение профилей: Эта функция позволяет пользователям выбирать контакты из разных профилей (например, рабочий или личный).
  • Выбор одного или нескольких вариантов: Система поддерживает как режим выбора одного варианта, так и режим выбора нескольких вариантов (по умолчанию — 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 Contact Picker в сборки с Android 17 и выше.

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

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

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

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

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

Разрешения

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

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

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

Проверка

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