Android 연락처 선택 도구

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.sessions URI를 선택 도구에 반환합니다. 선택 도구는 클라이언트 앱에 URI를 반환하기 전에 적절한 읽기 플래그를 적용합니다. 이 URI는 연락처의 모든 데이터를 노출하지 않고 사용자가 선택한 특정 데이터 필드에 대한 세분화된 임시 읽기 액세스 권한을 부여합니다.
  • 권한 있는 액세스: android.permission.MANAGE_CONTACTS_PICKER_SESSION 서명 및 권한 있는 권한은 세션 제공자에 대한 쓰기 액세스를 보호하여 신뢰할 수 있는 시스템 선택 도구만 세션을 만들 수 있도록 합니다.

통합

하드웨어 제조업체 및 파트너는 Android 17 이상이 포함된 빌드에 Android 연락처 선택 도구를 포함해야 합니다.

지원되는 인텐트

  • Intent.ACTION_PICK_CONTACTS: Android 17 이상을 타겟팅하는 앱에 권장되는 인텐트입니다.
  • Intent.ACTION_PICK: 이전 버전과의 호환성을 위해 유지됩니다. 시스템은 지원되는 MIME 유형(이메일, 전화 또는 연락처)에 대해 이러한 요청을 새 선택 도구로 자동 라우팅합니다.

세션 관리

기기 상태 및 개인 정보 보호를 유지하기 위해 세션 제공자는 엄격한 데이터 정리 정책을 시행합니다.

  • 정리 작업: 시스템 작업 (CleanupJobService)이 주기적으로 실행되어 24시간이 지난 세션 데이터를 삭제합니다.
  • 행 한도: 과도한 저장소 사용을 방지하기 위해 세션 제공자 테이블은 최대 5, 000개의 행으로 제한됩니다. 테이블이 이 크기에 도달하면 시스템은 새 세션 데이터를 삽입하기 전에 가장 오래된 행을 자동으로 삭제합니다.
  • 지속성: 세션 데이터는 일시적입니다. 클라이언트 앱은 수신 즉시 반환된 연락처 데이터를 유지해야 합니다.

권한

세션 제공자에 대한 쓰기 액세스에는 Android 연락처 선택 도구 패키지로 제한되는 android.permission.MANAGE_CONTACTS_PICKER_SESSION 권한이 필요합니다.

맞춤설정 및 규정 준수

파트너는 글꼴 및 색상과 같은 시각적 요소를 맞춤설정할 수 있지만 구현은 Android CDD 섹션 3.18.2 시스템 연락처 선택 도구를 준수해야 합니다.

유효성 검사

파트너는 호환성 테스트 모음 (CTS)과 Google 모바일 서비스 테스트 모음 (GTS)을 모두 사용하여 구현을 확인해야 합니다.