Android 연락처 선택 도구는 사용자가 앱과 특정 연락처를 공유할 수 있는 표준 개인 정보 보호 인터페이스를 제공합니다.
Android 17에서 도입된 이 기능은 광범위한 READ_CONTACTS 권한을 대체하는 권한 없는 옵션으로 사용됩니다.
연락처 선택 도구를 사용하면 앱이 전화번호나 이메일 주소와 같은 특정 연락처 데이터에 대한 액세스를 요청할 수 있습니다. 사용자가 공유할 연락처를 선택하면 시스템에서 앱에 해당 세부정보에 대한 임시 읽기 액세스 권한만 부여합니다.
아키텍처
연락처 선택 도구는 두 가지 주요 구성요소로 구성됩니다.
- 선택기 UI 앱: 이 구성요소는 연락처 선택을 위한 사용자 대상 인터페이스 역할을 합니다.
- 세션 제공자: 이 구성요소는 임시 액세스 세션을 관리하는 백엔드 서비스 역할을 합니다.

그림 1. 순차적 다이어그램
선택기 UI
선택기 UI는 연락처 선택을 위한 사용자 인터페이스를 처리하고 요청된 데이터 유형에 따라 뷰를 채우기 위해 연락처 제공자를 직접 쿼리합니다. 지원되는 뷰는 다음과 같습니다.
- 전화번호만: UI에 전화번호가 포함된 연락처가 표시됩니다.
- 이메일만: UI에 이메일 주소가 포함된 연락처가 표시됩니다.
- 맞춤 연락처 정보: UI에 요청된 특정 데이터 필드와 일치하는 연락처가 표시됩니다.
또한 UI는 다음 기능을 지원합니다.
- 알파벳순으로 정렬된 목록: 연락처가 중복 제거되어 알파벳순으로 정렬됩니다.
- 연락처 아바타: UI에 연락처 사진 또는 아바타가 표시됩니다.
- 즐겨찾기: 즐겨찾기 카테고리가 연락처 목록 상단에 표시됩니다.
- 프로필 전환기: 이 기능을 사용하면 사용자가 다양한 사용자 프로필 (예: 직장과 개인)에서 연락처를 선택할 수 있습니다.
- 단일 및 다중 선택: 시스템은 단일 및 다중 선택 모드를 모두 지원합니다 (기본 한도는 50이고 최대 한도는 100임).
- 선택 미리보기: 사용자는 확인하기 전에 선택한 연락처를 미리 보고 관리할 수 있습니다.
- 빠른 스크롤: 이 기능을 사용하면 연락처 목록을 빠르게 탐색할 수 있습니다.
- 검색: 특정 연락처를 찾을 수 있는 검색창이 제공됩니다.
- 개인 정보 보호 배너 및 개인 정보 보호 세부정보 페이지: 필수 알림을 통해 앱에서 요청하는 데이터 필드 (예: 전화번호, 이메일)를 정확하게 사용자에게 알립니다.
세션 제공자
세션 제공자 (packages/providers/ContactsProvider)는 클라이언트 앱과 연락처 제공자 간의 보안 중개자 역할을 합니다.
- 역할:
Intent.ACTION_PICK_CONTACTS를 사용하여 선택기를 실행하는 경우에만 세션 제공자를 사용합니다. - 세션 관리: 사용자가 연락처를 선택하면 선택기 UI가 선택 데이터 (클라이언트의 UID에 매핑됨)를 세션 제공자에 씁니다.
- 데이터 액세스: 제공자는
content://com.android.providers.contacts.picker.sessionsURI를 선택기에 반환합니다. 선택기는 클라이언트 앱에 URI를 반환하기 전에 적절한 읽기 플래그를 적용합니다. 이 URI는 모든 연락처 데이터를 노출하지 않고 사용자가 선택한 특정 데이터 필드에 대한 임시 세분화된 읽기 액세스 권한을 부여합니다. - 권한 있는 액세스:
android.permission.MANAGE_CONTACTS_PICKER_SESSION서명과 권한 있는 권한은 세션 프로바이더에 대한 쓰기 액세스 권한을 보호하여 신뢰할 수 있는 시스템 선택 도구만 세션을 만들 수 있도록 합니다.
통합
하드웨어 제조업체와 파트너는 Android 17 이상의 빌드에 Android 연락처 선택 도구를 포함해야 합니다.
지원되는 인텐트
Intent.ACTION_PICK_CONTACTS: Android 17 이상을 타겟팅하는 앱에 권장되는 인텐트입니다.Intent.ACTION_PICK: 이전 버전과의 호환성을 위해 유지됩니다. 시스템은 지원되는 MIME 유형(이메일, 전화 또는 연락처)의 새 선택기로 이러한 요청을 자동으로 라우팅합니다.
세션 관리
기기 상태와 개인 정보를 유지하기 위해 세션 제공자는 엄격한 데이터 정리 정책을 적용합니다.
- 정리 작업: 24시간이 지난 세션 데이터를 삭제하기 위해 시스템 작업 (
CleanupJobService)이 주기적으로 실행됩니다. - 행 제한: 과도한 저장용량 사용을 방지하기 위해 세션 제공자 테이블은 최대 5, 000행으로 제한됩니다. 표가 이 크기에 도달하면 시스템은 새 세션 데이터를 삽입하기 전에 가장 오래된 행을 자동으로 삭제합니다.
- 지속성: 세션 데이터는 일시적입니다. 클라이언트 앱은 수신 즉시 반환된 연락처 데이터를 유지해야 합니다.
권한
세션 제공자에 대한 쓰기 액세스에는 android.permission.MANAGE_CONTACTS_PICKER_SESSION 권한이 필요하며 이 권한은 Android 연락처 선택 도구 패키지로 제한됩니다.
맞춤설정 및 규정 준수
파트너는 글꼴, 색상과 같은 시각적 요소를 맞춤설정할 수 있지만 구현은 Android CDD 섹션 3.18.2 (미정)를 준수해야 합니다.
유효성 검사
파트너는 호환성 테스트 모음 (CTS)과 Google 모바일 서비스 테스트 모음 (GTS)을 모두 사용하여 구현을 확인해야 합니다.