2026年4月15日,Google Play公布了新的通讯录权限(Contacts Permissions)政策。政策截止日期表把它列在访问敏感信息的权限和API一行,截止日期是2027-01-27。已公布的句子很短:不需要广泛访问的应用必须使用Android Contact Picker。如果面向 Android 17(API 37)及更高版本的构建仍携带 READ_CONTACTS,Play要求你在控制台申报「为什么选择器不够用」——或者在执法前去掉该权限。KappS 这篇是控制台与政策操作说明,不能代替线上帮助页。

今天要解决的问题:判断产品是否真的需要整本通讯录。如果不需要,就迁移到 Contact Picker,去掉 READ_CONTACTS,并处理 Play 控制台提示。如果选择器无法支撑核心功能,就在2027-01-27前准备通讯录申报——哪些面向用户的功能需要广泛访问,以及选择器为何不够。请核对当前 Play 控制台帮助里的表单标签和后续说明——本文只复述这些帮助页已经公布的内容。


Play已经公布的内容(截止日期、适用范围、公告)

三份官方页面用不同篇幅说同一件事:

了解具有最小范围替代方案的受限权限公布了可执行时间表:

  1. 2026年4月15日——政策公布。
  2. 2026年9月——仍携带 READ_CONTACTS 的应用会在 Play 控制台收到提示:提交申报以证明核心功能需要广泛访问,或去掉权限并改用 Contact Picker。帮助给出的行动项:先和团队确认该权限是否为核心功能所需;若是,要能从技术上说明为什么最小范围选择器不够。
  3. 2027年1月27日——面向 Android 17 及更高版本(API 37+)的应用必须合规。控制台将提供30天自动自行延期。该日期之后,范围内未合规应用将面临执法。

所有用户通讯录都属于用户数据政策下的个人敏感数据。预览政策还写明:除非得到数据主体(通讯录里的联系人本人,而不仅是设备所有者)授权,否则不得披露或公开非公开通讯录数据。


第一步:判断你是否真的需要 READ_CONTACTS

不要先打开控制台,先看产品。帮助里的判断标准是:Android Contact Picker 是否足以支撑核心功能。如果用户选出一两个联系人、把姓名/电话/邮箱交给你就够用,那是选择器的工作——不是整本通讯录权限。

帮助列举的、通常不得申请 READ_CONTACTS 的用途:

帮助列举的、该权限仍常见的用途(仍须说明理由):

决定保留权限之前,有两条已公布的限制:

  1. 自制通讯录选择界面不能作为保留权限的理由。帮助的常见问题写明:自定义选择器「不能作为保留通讯录访问的理由」。
  2. 私有和企业设备管理应用不受此项要求约束。这条豁免写给那类应用——不是给消费级「邀请好友」按钮的。

核对真实二进制,不要只看商店文案:

  1. 功能需要每一个联系人,还是用户选出的子集?
  2. 访问是持续的(同步、备份、匹配、来电拦截),还是一次性的(分享、邀请、选接收人)?
  3. 用户拒绝 READ_CONTACTS 后,同一功能能否改走选择器或手动输入?受限权限政策已经要求:对拒绝授权的用户,须做出合理努力以提供替代路径。
  4. 该功能是否出现在 Play 商店列表里?敏感权限政策写明:只能为当前、已在列表中宣传的功能申请访问——不能为未实现或未披露的功能申请。

如果诚实的答案是「我们只要用户亲手选出的那几个联系人」,到此停住并迁移。为了省事而保留 READ_CONTACTS,过不了申报里的第二问。


第二步:迁移到 Android Contact Picker

Play 的受限权限帮助和 Android Contact Picker 文档描述的是同一套系统界面:用户浏览联系人,应用只申请所需字段(电话、邮箱、地址),你获得的是所选数据的读取权限——不是整本通讯录。

已公布的接入事实(不要自行发明额外 API):

  1. Play 帮助写明用 Intent.ACTION_PICK_CONTACTS 拉起选择器。Android 功能页把同一动作写作 ContactsPickerSessionContract.ACTION_PICK_CONTACTS
  2. 与旧的 ACTION_PICK 不同,新选择器允许一次请求多个数据字段(Play 帮助)。Android 文档把这写成 EXTRA_REQUESTED_DATA_FIELDS / EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS 等 extras,MIME 类型来自 ContactsContract.CommonDataKinds(电话、邮箱、结构化地址)。
  3. 选择器没有向旧版本回溯,只存在于 Android 17(API 37)及更高版本。应用target Android 17+ 时,系统会自动把现有的 Intent.ACTION_PICK 升级为新界面。帮助仍建议改用 ACTION_PICK_CONTACTS,以便使用多字段选择、工作资料切换及其他新 extras。
  4. 即使应用仍 target 较低 SDK,只要在 Android 17 设备上给 ACTION_PICK 加上布尔 extras EXTRA_USE_SYSTEM_CONTACTS_PICKER,也可以测试新界面(Android 文档)。
  5. 成功时系统返回 RESULT_OK 和一个会话 URI(Session URI),读取权限是临时的。Android 的最佳实践:如果进程结束后还要用这些数据,须立即持久化。不要把会话 URI 当成通讯录的长期句柄。
  6. 只申请真正需要的字段。如果只发短信,就申请电话 MIME 类型,选择器可以隐藏没有号码的联系人。

然后在 Android 17+ 的清单(以及残留的库合并结果)里去掉 READ_CONTACTS。邀请/分享/选接收人这类流程既上选择器又留权限,正好与帮助要求相反。

如果已经在用 ACTION_PICK,target 17+ 就能看到新界面,不必立刻重写。需要会话 URI、个人/工作资料切换或多字段 extras 时,再改到 ACTION_PICK_CONTACTS。这是已公布的兼容路径,不是 KappS 发明的捷径。


第三步:更新 Play 控制台申报

两篇帮助描述了控制台操作。以你账号里实际出现的标签为准;如果控制台没有单独的「通讯录」开关,不要自己发明第二个。

通讯录专项提示(受限权限帮助)。2026年9月,仍携带 READ_CONTACTS 的应用会在 Play 控制台收到提示:提交申报,或去掉权限并改用 Contact Picker。帮助写明该申报会问:

  1. 哪些面向用户的功能需要 READ_CONTACTS从已公布的用例列表中选择(通讯录管理、拨号或发送短信、通话记录、CRM、来电拦截、无障碍、个人助理、好友匹配/搜索、备份与恢复、自动更正/自动完成、用户主动选择设备联系人,或其他)。若用例不面向用户或不在列表中,帮助写明选「其他(Other)」。
  2. 说明为什么 Contact Picker 不够,以及为何仍需通过 READ_CONTACTS 获得广泛访问。

勾选「用户主动选择设备联系人」(邀请、分享、在游戏里拉黑某个人)是帮助举的「选择器形态」例子。这一行不是保留权限的漏洞。

权限申报表(申报应用权限帮助)。权限请求在你添加 Android App Bundle 之后、发布流程中评估。若该软件包申请了高风险或敏感权限,且 Play 尚未收到申报,控制台会显示权限申报表(Permissions Declaration Form)。官方要点如下,不额外编按钮:

  1. 若仍有有效软件包(包括开放、封闭或内部测试)需要申报,左侧菜单的应用内容(App content)下会出现提醒。在你创建包含申报的版本、或去掉相关权限之前,不能发布应用变更——包括商店列表、定价和分发。
  2. 应用内容页,表单的可展开列表会显示此前已申报的权限(对勾)和新申请的权限(提醒)。如果「新申请」列表里出现你不打算申报的权限,帮助要求先移除该软件包,再上传权限集合正确的新包,然后继续。
  3. 从支持的用例中指定核心功能;如有需要,提供审核说明、视频演示(优先 YouTube 链接),以及——若功能仅限登录用户——非生产环境的测试账号。勾选确认项后,再完成准备并发布该版本。
  4. 提交表单并发布后,Play 会进行加长审核,「可能需要数周」。被拒结果会发到账号所有者和联系邮箱。若必须紧急上线,帮助给出的路径是:去掉敏感权限并发布新版本,只走标准政策审核。

若控制台只出现受限权限文章里描述的通讯录提示,回答那两个问题即可。若在应用内容页出现完整的权限申报表,就按该表单和「申报应用权限」帮助操作。本文不编造第三块屏幕。

使用 Publishing API 的开发者:帮助写明,若版本申请了尚未申报的高风险或敏感权限,接口会报错。先在 Play 控制台网页完成一次表单;获批后可再使用 API。之后每新增一种权限,都必须在网页界面提交修订后的表单。


第四步:什么会审不过或被执法

Play 公布了后果。不要用坊间说法替换:

若你读完本文后,控制台又出现新的通讯录问卷,以该表单链出的现行帮助为准。本文不编造额外按钮、额外 API 级别,也不在已公布的2026-04-15(公布)、2026年9月(控制台提示)和2027-01-27(政策截止日期 / Android 17+ 强制)之外再发明日期。


10分钟自检清单

  1. 列出所有读取通讯录的功能。把每一项标成选择器形态(邀请、分享、选接收人)或广泛访问(管理全部联系人、备份、好友匹配、来电拦截、无障碍、键盘)。
  2. 若全部是选择器形态,接入 ACTION_PICK_CONTACTS,立刻持久化 Session URI 结果,并从 Android 17+ 清单中去掉 READ_CONTACTS
  3. 若某功能确实需要整本通讯录,先写清选择器做不到的技术原因,再打开控制台。
  4. 打开 Play 控制台。若 9 月提示或应用内容提醒还在,完成已公布的申报,或上传不再申请该权限的软件包。
  5. 停用仍申请 READ_CONTACTS 却没有申报的闲置测试轨道。
  6. 确认商店列表只宣传与你仍在申请的访问范围相符的功能。
  7. 在依赖 30 天自行延期之前,重新阅读当前的政策截止日期和受限权限帮助。

一句话

只要应用面向 Android 17+ 且不需要整本通讯录,Play 的通讯录权限政策——2026年4月15日公布,截止日期2027-01-27——就要求用Android Contact Picker替代 READ_CONTACTS;只有当你能申报已公布的核心用例、并说明选择器为何不够时,才可保留广泛访问。


参考来源