selektor kontaktów na Androidzie

Selektor kontaktów na Androidzie udostępnia standardowy interfejs chroniący prywatność, który umożliwia użytkownikom udostępnianie określonych kontaktów aplikacjom. Ta funkcja, wprowadzona w Androidzie 17, jest alternatywą dla szerokiego uprawnienia READ_CONTACTS, która nie wymaga uprawnień.

Korzystając z selektora kontaktów, aplikacje mogą prosić o dostęp do konkretnych danych kontaktowych, takich jak numery telefonów lub adresy e-mail. Użytkownik wybiera kontakty, które chce udostępnić, a system przyznaje aplikacji tymczasowy dostęp do odczytu tylko tych informacji.

Architektura

Selektor kontaktów składa się z 2 głównych komponentów:

  • Aplikacja Picker UI: ten komponent służy jako interfejs użytkownika do wybierania kontaktów.
  • Dostawca sesji: ten komponent działa jako usługa backendu zarządzająca tymczasową sesją dostępu.

Schemat sekwencji selektora kontaktów

Rysunek 1. Schemat sekwencji

Picker UI

Picker UI obsługuje interfejs użytkownika do wybierania kontaktów i wysyła zapytania bezpośrednio do dostawcy kontaktów, aby wypełnić widoki na podstawie żądanych typów danych. Obsługiwane widoki:

  • Tylko numery telefonów: interfejs wyświetla kontakty zawierające numery telefonów.
  • Tylko e-maile: interfejs wyświetla kontakty zawierające adresy e-mail.
  • Niestandardowe informacje kontaktowe: interfejs wyświetla kontakty pasujące do określonych żądanych pól danych.

Interfejs obsługuje też te funkcje:

  • Lista posortowana alfabetycznie: kontakty są sortowane alfabetycznie z deduplikacją.
  • Awatar kontaktu: interfejs wyświetla zdjęcia lub awatary kontaktów.
  • Ulubione: u góry listy kontaktów wyświetla się kategoria Ulubione.
  • Przełącznik profili: ta funkcja umożliwia użytkownikom wybieranie kontaktów z różnych profili (np. służbowego i prywatnego).
  • Wybór pojedynczy i wielokrotny: system obsługuje tryby wyboru pojedynczego i wielokrotnego (domyślny limit to 50, a maksymalny – 100).
  • Podgląd wyboru: użytkownicy mogą wyświetlać podgląd wybranych kontaktów i zarządzać nimi przed potwierdzeniem.
  • Szybkie przewijanie: ta funkcja umożliwia szybkie poruszanie się po liście kontaktów.
  • Szukanie: pasek wyszukiwania umożliwia znajdowanie konkretnych kontaktów.
  • Baner i strona z informacjami o prywatności: obowiązkowe powiadomienie informuje użytkowników, o które pola danych (np. numery telefonów, adresy e-mail) prosi aplikacja.

Dostawca sesji

Dostawca sesji (packages/providers/ContactsProvider) działa jako bezpieczny pośrednik między aplikacją kliencką a dostawcą kontaktów.

  • Rola: używaj dostawcy sesji tylko wtedy, gdy uruchamiasz selektor za pomocą Intent.ACTION_PICK_CONTACTS.
  • Zarządzanie sesją: gdy użytkownik wybierze kontakty, Picker UI zapisuje dane wyboru (zmapowane na UID klienta) u dostawcy sesji.
  • Dostęp do danych: dostawca zwraca do selektora identyfikator URI content://com.android.providers.contacts.picker.sessions. Selektor stosuje odpowiednie flagi odczytu przed zwróceniem identyfikatora URI do aplikacji klienckiej. Ten identyfikator URI przyznaje tymczasowy, szczegółowy dostęp do odczytu do konkretnych pól danych wybranych przez użytkownika, bez ujawniania wszystkich danych kontaktu.
  • Dostęp uprzywilejowany: sygnatura android.permission.MANAGE_CONTACTS_PICKER_SESSION i uprawnienia uprzywilejowane chronią dostęp do zapisu u dostawcy sesji, dzięki czemu tylko zaufany selektor systemowy może tworzyć sesje.

Integracja

Producenci sprzętu i partnerzy muszą uwzględnić selektor kontaktów na Androidzie w kompilacjach z Androidem 17 lub nowszym.

Obsługiwane intencje

  • Intent.ACTION_PICK_CONTACTS: zalecana intencja w przypadku aplikacji kierowanych na Androida 17 lub nowszego.
  • Intent.ACTION_PICK: zachowana ze względu na zgodność wsteczną. System automatycznie przekierowuje te żądania do nowego selektora w przypadku obsługiwanych typów MIME (e-mail, telefon lub kontakt).

Zarządzanie sesją

Aby zachować dobrą kondycję urządzenia i prywatność, dostawca sesji stosuje ścisłe zasady czyszczenia danych:

  • Zadanie czyszczenia: zadanie systemowe (CleanupJobService) jest uruchamiane okresowo, aby usuwać dane sesji starsze niż 24 godziny.
  • Limit wierszy: aby zapobiec nadmiernemu wykorzystaniu miejsca na dane, tabela dostawcy sesji jest ograniczona do maksymalnie 5000 wierszy. Jeśli tabela osiągnie ten rozmiar, system automatycznie usunie najstarsze wiersze przed wstawieniem nowych danych sesji.
  • Trwałość: dane sesji są tymczasowe. Aplikacje klienckie powinny natychmiast po otrzymaniu utrwalać zwrócone dane kontaktowe.

Uprawnienia

Dostęp do zapisu u dostawcy sesji wymaga uprawnienia android.permission.MANAGE_CONTACTS_PICKER_SESSION, które jest ograniczone do pakietu selektora kontaktów Androida.

Dostosowywanie i zgodność

Partnerzy mogą dostosowywać elementy wizualne, takie jak czcionki i kolory, ale implementacje muszą być zgodne z sekcją 3.18.2 (TBD) dokumentu CDD Androida.

Weryfikacja

Partnerzy muszą zweryfikować swoją implementację za pomocą pakietu Compatibility Test Suite (CTS) i pakietu Usługi mobilne Google Test Suite (GTS).