Android 联系人选择工具

Android 联系人选择器提供了一个标准的隐私保护界面,可让用户与应用分享特定联系人。此功能在 Android 17 中引入,可作为无需权限的替代方案来替代广泛的 READ_CONTACTS 权限。

通过使用联系人选择工具,应用可以请求访问特定的联系人数据,例如电话号码或电子邮件地址。用户选择要分享的联系人,系统仅向应用授予对这些详细信息的临时读取权限。

架构

联系人选择工具包含两个主要组件:

  • 选择器界面应用:此组件充当面向用户的联系人选择界面。
  • 会话提供程序:此组件充当管理临时访问会话的后端服务。

联系人选择工具序列图

图 1. 序列图

选择器界面

选择器界面负责处理联系人选择的用户界面,并直接查询联系人提供程序,以根据请求的数据类型填充视图。支持的视图包括:

  • 仅限电话号码:界面会显示包含电话号码的联系人。
  • 仅显示电子邮件地址:界面会显示包含电子邮件地址的联系人。
  • 自定义联系信息:界面会显示与特定请求的数据字段匹配的联系人。

此外,该界面还支持以下功能:

  • 按字母顺序排序的列表:联系人按字母顺序排序,并会进行去重处理。
  • 联系人头像:界面会显示联系人照片或头像。
  • 收藏夹:“收藏夹”类别显示在联系人列表的顶部。
  • 资料切换器:借助此功能,用户可以选择来自不同用户资料(例如工作资料与私人资料)的联系人。
  • 单选和多选:系统支持单选和多选模式(默认限制为 50,最大限制为 100)。
  • 选择预览:用户可以在确认之前预览和管理所选联系人。
  • 快速滚动:此功能可让您快速浏览联系人列表。
  • 搜索:系统提供了一个搜索栏,用于查找特定联系人。
  • 隐私权横幅和隐私权详情页面:强制性通知会准确告知用户应用正在请求哪些数据字段(例如电话号码、电子邮件地址)。

会话提供方

会话提供程序 (packages/providers/ContactsProvider) 充当客户端应用与联系人提供程序之间的安全中介。

  • 角色:仅当您使用 Intent.ACTION_PICK_CONTACTS 启动选择器时,才使用会话提供程序。
  • 会话管理:当用户选择联系人时,选择器界面会将选择数据(映射到客户端的 UID)写入会话提供程序。
  • 数据访问:提供程序向选择器返回 content://com.android.providers.contacts.picker.sessions URI。 选择器会在将 URI 返回给客户端应用之前应用适当的读取标记。此 URI 会授予对用户所选特定数据字段的临时、精细读取访问权限,而不会公开所有联系人的数据。
  • 特权访问android.permission.MANAGE_CONTACTS_PICKER_SESSION 签名和特权权限可保护对会话提供程序的写入访问权限,确保只有受信任的系统选择器才能创建会话。

集成

硬件制造商和合作伙伴必须在搭载 Android 17 及更高版本的 build 中包含 Android 联系人选择工具。

支持的 intent

  • Intent.ACTION_PICK_CONTACTS:建议以 Android 17 及更高版本为目标平台的应用使用此 intent。
  • Intent.ACTION_PICK:为保持向后兼容性而维护。系统会自动将这些请求路由到新的选择器,以选择支持的 MIME 类型(电子邮件、电话或联系人)。

会话管理

为了维护设备健康状况和隐私,会话提供程序会强制执行严格的数据清理政策:

  • 清理作业:系统作业 (CleanupJobService) 会定期运行,以移除超过 24 小时的会话数据。
  • 行数限制:为防止存储空间使用量过大,会话提供程序表的上限为 5, 000 行。如果表达到此大小,系统会在插入新的会话数据之前自动剪除最旧的行。
  • 持久保留:会话数据是瞬时数据。客户端应用应在收到返回的联系人数据后立即将其持久保留。

权限

对会话提供程序的写入访问权限需要 android.permission.MANAGE_CONTACTS_PICKER_SESSION 权限,该权限仅限于 Android 联系人选择工具软件包。

自定义和合规性

合作伙伴可以自定义字体和颜色等视觉元素,但实现必须遵守 Android CDD 第 3.18.2 节(待定)。

验证

合作伙伴必须使用兼容性测试套件 (CTS) 和 Google 移动服务测试套件 (GTS) 来验证其实现。