Android 10부터 연락처 제공자 구성요소(기기 연락처 앱에서 확인된 데이터 소스)에 의해 관리되는 관심 연락처 관련 데이터는 Android 9 이하와 다른 방식으로 액세스됩니다.
Android 10 이전에는 앱이 연락처 제공자를 사용하여 데이터에 액세스한 후 이를 기기 및 온라인 서비스 간에 전송했습니다. Android 10에서는 연락처 제공자를 사용하는 모든 Android 10 기기의 사용자 개인정보 보호를 강화하기 위해 데이터 접근성 기능을 변경했습니다. 예를 들어 기본 데이터베이스에는 관심 연락처 데이터가 포함되지 않습니다. 따라서 앱이 여기서 데이터를 쓰고 읽을 수 없습니다. 변경사항은 다음과 같습니다.
- 연락처 제공자가 관심 연락처 관련 데이터(사용자에게 연락한 횟수, 마지막 연락 시점, 사용된 앱, 연락한 대상 또는 모든 관련 이전 데이터 등)를 기록하지 않습니다.
- 연락처 제공자 자동 완성 API의
MultiAutoCompleteTextView
클래스가 쿼리 결과를 상호작용 카운터 기준으로 정렬하지 않습니다. - Android 프레임워크가 암시적인 연락처 순위를 제공하지 않습니다. 하지만 사용자가 제어하는 명시적 연락처 순위(예: 별표표시된 연락처)는 유지됩니다.
이러한 변경사항을 구현하려면 다음 중 하나를 수행합니다.
- 최신 연락처 제공자를 사용합니다.
- 버전을 업데이트합니다(포크 버전을 사용 중인 경우).
또한 지원 중단된 연락처 제공자 기능을 사용하는 모든 앱을 업데이트합니다. 지원 중단된 함수의 해결 방법으로 설계된 API 버전은 허용되지 않습니다.
Android 9 이하에서는 연락처 제공자의 연락처 상호작용 데이터가 삭제되지 않았습니다. 대신 Android 10의 상응 대상이 시뮬레이션되도록 연락처 상호작용 데이터가 주기적으로(대략적으로 매일) 정리됩니다. 연락처 제공자는 이 정보를 일시적으로만 저장합니다.
API 변경사항
이러한 변경사항은 API에 커다란 영향을 미칠 것으로 예상됩니다. 예를 들어 자동 완성 순위가 제대로 성능을 발휘하지 못할 수 있습니다. API 동작에 미치는 잠재적인 영향에는 다음이 포함됩니다.
- 연락처 제공자가
ContactsContract.Contacts
테이블 열의 연락처와 관련된 사용자의 환경설정이나 상호작용을 저장하지 않습니다. - 자동완성 API가 상호작용 카운터를 기준으로 결과를 정렬하지 않습니다.
TIMES_CONTACTED
/TIMES_USED
및LAST_TIME_CONTACTED
/LAST_TIME_USED
열이 업데이트되지 않습니다.- Android 10으로 업그레이드되면 정리됩니다(영향받은 열에 따라
null
로 정리되거나 0으로 설정됨). - 자동 완성 쿼리 API의 순위는 관심분야 정보가 아닌 알파벳순으로 정렬된 결과를 반환합니다.
- 자주 사용하는 연락처와 관련된 API 호출(예: 필터 문자열
CONTENT_FREQUENT_URI
사용)이 결과를 반환하지 않습니다.
일반적으로 지원 중단된 연락처 제공자 API 요소가 카운터를 사용하면 이러한 카운터(Android 10에서 사용될 때)는 0을 포함하며 쿼리 시 0을 반환합니다. 영향을 받은 API의 업데이트 요청은 무시됩니다. 예를 들어 ContactsContract.DataUsageFeedback
클래스는 지원 중단되었으므로 이 클래스의 업데이트 및 삭제 호출이 무시됩니다.
API에 영향을 미치는 필드
Android 10에서는 다음과 같은 필드가 변경되었습니다.
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
ContactsContract.DataUsageStatColumns#TIMES_USED
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
ContactsContract#CONTENT_STREQUENT_FILTER_URI
ContactsContract.Contacts#CONTENT_STREQUENT_URI
ContactsContract.Contacts#CONTENT_FREQUENT_URI
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
ContactsContract.Contacts#CONTENT_FILTER_URI
Android 10에서 영향을 받은 필드에는 아래 표에 나온 것처럼 다양한 API가 존재할 수 있습니다. 지원 중단된 API 필드에서 아래 나열된 동작을 반환합니다. 이렇게 지원 중단된 필드 중 하나는 여러 API에 사용될 수 있으므로 사용 사례를 확인해야 합니다.
클래스 | API 필드 | 10 반환 |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
이 열에는 사용된 방식과 상관없이 항상 0이 포함됩니다. 이를 수정하기 위한 시도는 무시됩니다. |
Contacts
|
markAsContacted() |
연산 없음 |
ContactsContract.DataUsageFeedback
|
|
연산 없음 |
ContactsContract.Contacts
|
Strequent(별표표시됨 + 자주 사용됨)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI |
별표표시된 연락처만 반환합니다. 자주 사용하는 연락처가 반환되지 않습니다. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
필터(자동완성이라고도 부름) API
|
결과가 관심분야를 기준으로 정렬되지 않습니다. 별표표시 및 이름으로 정렬됩니다. |
대안
지원 중단된 API 필드에 대한 대안은 없습니다. 이러한 제한을 우회하기 위한 해결 방법은 새로운 API 형식이든 새 필드이든 허용되지 않습니다.
구현
이러한 변경사항을 위해 별도의 작업을 수행할 필요는 없습니다. 이는 Android OS 플랫폼의 사용자 개인 정보 보호 개선을 위한 이니셔티브의 일부입니다. 하지만 앱이 지원 중단된 기능에 의존하는 경우 모든 변경사항을 상쇄하도록 앱을 업데이트하는 것이 좋습니다. 연락처 제공자의 포크 버전을 사용하는 경우에는 연락처 제공자를 업데이트해야 합니다.
맞춤설정 없음
관심 연락처 정보와 관련된 변경사항을 맞춤설정하거나 우회하려고 하지 마세요. 이는 프레임워크 내에 빌드되며 변경할 경우 정책 위반으로 이어질 수 있습니다. 기본 설정을 변경하거나 대체 방안을 제공하면 안 됩니다.