Selektor kontaktów Androida to 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ń.
Dzięki selektorowi kontaktów aplikacje mogą prosić o dostęp do konkretnych danych kontaktowych, takich jak numery telefonów czy 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 interfejsu selektora: ten komponent służy jako interfejs użytkownika do wybierania kontaktów.
- Dostawca sesji: ten komponent działa jako usługa backendowa zarządzająca tymczasową sesją dostępu.

Rysunek 1. Schemat sekwencji
Interfejs selektora
Interfejs selektora 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 to 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, interfejs selektora 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. Zanim selektor zwróci identyfikator URI do aplikacji klienckiej, stosuje odpowiednie flagi odczytu. Ten identyfikator URI przyznaje tymczasowy, szczegółowy dostęp do odczytu konkretnych pól danych wybranych przez użytkownika bez ujawniania wszystkich danych kontaktu. - Dostęp uprzywilejowany: sygnatura
android.permission.MANAGE_CONTACTS_PICKER_SESSIONi 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 Androida w kompilacjach z Androidem 17 i nowszym.
Obsługiwane intencje
Intent.ACTION_PICK_CONTACTS: zalecana intencja w przypadku aplikacji kierowanych na Androida 17 i nowszego.Intent.ACTION_PICK: zachowana ze względu na zgodność wsteczną. System automatycznie kieruje 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 usuwa 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 dokumentu CDD Androida dotyczącą selektora kontaktów systemowych.
Weryfikacja
Partnerzy muszą zweryfikować swoją implementację za pomocą pakietu Compatibility Test Suite (CTS) i pakietu Google Mobile Services Test Suite (GTS).