聯絡人供應程式和關聯資訊

自 Android 10 起,由 Contacts Provider 元件 (裝置聯絡人應用程式中顯示的資料來源) 管理的聯絡人親和性相關資料,其存取方式與 Android 9 以下版本不同。

在 Android 10 之前,應用程式會使用聯絡人提供者來存取資料,並在裝置和線上服務之間傳輸資料。Android 10 的功能針對資料存取權進行異動,可確保使用聯絡人供應器的所有 Android 10 裝置,都能享有更高的使用者隱私權。首先,基礎資料庫不含聯絡人親和性資料。因此應用程式無法寫入或讀取該資料夾。變更項目包括:

  • 聯絡人供應器不會記錄聯絡人親和性相關資料,例如使用者聯絡次數、上次聯絡時間、使用的應用程式、聯絡對象,或任何相關的歷來資料。
  • Contacts Provider 自動完成 API 中的 MultiAutoCompleteTextView 類別不會依互動計數器排序查詢結果。
  • Android 架構不會提供隱含的聯絡人排名。(不過,使用者控管的「明確」聯絡人排名 (例如「已加星號」聯絡人) 仍會保留)。

如要實施這些變更,請採取下列任一做法:

  • 使用最新的聯絡人提供者。
  • 更新版本 (如果您使用的是分支版本)。

此外,請更新所有依賴已淘汰的聯絡資訊提供者功能的應用程式。不允許 API 版本做為已淘汰函式的解決方法。

對於 Android 9 以下版本,聯絡資訊提供者的聯絡互動資料並未移除。相反地,系統會定期 (約為每天一次) 清除聯絡互動資料,模擬 Android 10 中的等效機制。聯絡人供應器會儲存這項資訊,但僅限於暫時性儲存。

API 變更

這些變更預計會對 API 造成重大影響。舉例來說,自動完成功能的排名就會受到影響。對 API 行為的潛在影響包括:

  • 聯絡資訊提供者不會在 ContactsContract.Contacts 資料表欄中儲存使用者對聯絡人的偏好設定或互動情形。
  • 自動完成 API 不會依互動計數器排序結果。
  • TIMES_CONTACTED / TIMES_USEDLAST_TIME_CONTACTED / LAST_TIME_USED 欄不會更新。
    • 升級至 Android 10 後,這些值會清除 (視受影響的資料欄而定,可能是清除為 null 或設為 0)。
    • 自動完成查詢 API 中的排名會傳回以字母順序排序的結果,絕不會依據關聯資訊排序。
    • 針對常用聯絡人的 API 呼叫 (例如使用篩選字串 CONTENT_FREQUENT_URI) 不會傳回任何結果。

一般來說,如果任何已淘汰的 Contacts Provider API 元素使用計數器,這些計數器 (在 Android 10 中使用時) 會包含 0,並在查詢時傳回 0。系統會忽略來自受影響 API 的更新要求。舉例來說,ContactsContract.DataUsageFeedback 類別已淘汰,因此系統會忽略對此類別的更新和刪除呼叫。

影響 API 的欄位

在 Android 10 中,這些欄位已遭變更:

如下表所示,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

update
delete

沒有任何作業。
ContactsContract.Contacts Strequent (已加星號 + 頻繁)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
僅傳回已加星號的聯絡人。未傳回常用聯絡人。
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
篩選器 (又稱為自動完成) API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

結果並未依關聯性排序。這些項目會依「已加星號」和「名稱」排序。

替代選項

已淘汰的 API 欄位沒有替代方案。無論是新 API 或新欄位的形式,都禁止設計用來規避這些限制的解決方法。

實作

您不必採取任何行動就能導入這些變更。這項計畫旨在提升 Android 作業系統平台的使用者隱私。不過,如果您的應用程式依賴已淘汰的功能,建議您更新應用程式,以便因應任何變更。此外,如果您使用分支版本的聯絡資訊供應器,則必須更新聯絡資訊供應器。

不提供自訂

請勿自訂或規避聯絡人親密度資訊的變更。這些值已內建於架構中,如果您進行任何變更,就會違反規定。請勿變更預設設定或提供後門替代方案。