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已经公布的内容(截止日期、适用范围、公告)
三份官方页面用不同篇幅说同一件事:
- 政策截止日期里日期为2027-01-27的一行:「我们正在推出通讯录权限政策,以规范对用户通讯录的广泛访问。不需要广泛访问的应用必须使用 Android Contact Picker……公布于2026-04-15。」
- 2026年4月15日政策公告使用同样措辞,并指回政策截止日期页。Play写明自该日起你至少有30天开始更新——表上的执法日期仍是2027年1月27日。
- 访问敏感信息的权限和API重复了这项新政策,并标明自2027年1月27日起生效。更新后文章预览补上了 Android 17 规则:面向 Android 17 及更高版本(API 37+)的应用,只有在 Contact Picker 不足以提供核心功能时才可申请
READ_CONTACTS,并须提交 Play 控制台申报。
了解具有最小范围替代方案的受限权限公布了可执行时间表:
- 2026年4月15日——政策公布。
- 2026年9月——仍携带
READ_CONTACTS的应用会在 Play 控制台收到提示:提交申报以证明核心功能需要广泛访问,或去掉权限并改用 Contact Picker。帮助给出的行动项:先和团队确认该权限是否为核心功能所需;若是,要能从技术上说明为什么最小范围选择器不够。 - 2027年1月27日——面向 Android 17 及更高版本(API 37+)的应用必须合规。控制台将提供30天自动自行延期。该日期之后,范围内未合规应用将面临执法。
所有用户通讯录都属于用户数据政策下的个人敏感数据。预览政策还写明:除非得到数据主体(通讯录里的联系人本人,而不仅是设备所有者)授权,否则不得披露或公开非公开通讯录数据。
第一步:判断你是否真的需要 READ_CONTACTS
不要先打开控制台,先看产品。帮助里的判断标准是:Android Contact Picker 是否足以支撑核心功能。如果用户选出一两个联系人、把姓名/电话/邮箱交给你就够用,那是选择器的工作——不是整本通讯录权限。
帮助列举的、通常不得申请 READ_CONTACTS 的用途:
- 与某人分享文件
- 协作
- 邀请或推荐他人加入某项服务
- 选择一个联系人完成交易
帮助列举的、该权限仍常见的用途(仍须说明理由):
- 通讯录管理应用(展示、编辑或整理全部联系人)
- 必须与通讯录交互的无障碍功能
- 服务端好友匹配 /「我的哪些联系人已经在用这个平台」
- 备份通讯录,或把用户数据备份/恢复到另一台设备
- 自动更正 / 自动完成(需要全部联系人姓名的键盘)
- 拨号或短信界面、通话记录、来电拦截、覆盖全部联系人的 CRM 备注、需要通讯录数据库的个人助理指令
决定保留权限之前,有两条已公布的限制:
- 自制通讯录选择界面不能作为保留权限的理由。帮助的常见问题写明:自定义选择器「不能作为保留通讯录访问的理由」。
- 私有和企业设备管理应用不受此项要求约束。这条豁免写给那类应用——不是给消费级「邀请好友」按钮的。
核对真实二进制,不要只看商店文案:
- 功能需要每一个联系人,还是用户选出的子集?
- 访问是持续的(同步、备份、匹配、来电拦截),还是一次性的(分享、邀请、选接收人)?
- 用户拒绝
READ_CONTACTS后,同一功能能否改走选择器或手动输入?受限权限政策已经要求:对拒绝授权的用户,须做出合理努力以提供替代路径。 - 该功能是否出现在 Play 商店列表里?敏感权限政策写明:只能为当前、已在列表中宣传的功能申请访问——不能为未实现或未披露的功能申请。
如果诚实的答案是「我们只要用户亲手选出的那几个联系人」,到此停住并迁移。为了省事而保留 READ_CONTACTS,过不了申报里的第二问。
第二步:迁移到 Android Contact Picker
Play 的受限权限帮助和 Android Contact Picker 文档描述的是同一套系统界面:用户浏览联系人,应用只申请所需字段(电话、邮箱、地址),你获得的是所选数据的读取权限——不是整本通讯录。
已公布的接入事实(不要自行发明额外 API):
- Play 帮助写明用
Intent.ACTION_PICK_CONTACTS拉起选择器。Android 功能页把同一动作写作ContactsPickerSessionContract.ACTION_PICK_CONTACTS。 - 与旧的
ACTION_PICK不同,新选择器允许一次请求多个数据字段(Play 帮助)。Android 文档把这写成EXTRA_REQUESTED_DATA_FIELDS/EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS等 extras,MIME 类型来自ContactsContract.CommonDataKinds(电话、邮箱、结构化地址)。 - 选择器没有向旧版本回溯,只存在于 Android 17(API 37)及更高版本。应用target Android 17+ 时,系统会自动把现有的
Intent.ACTION_PICK升级为新界面。帮助仍建议改用ACTION_PICK_CONTACTS,以便使用多字段选择、工作资料切换及其他新 extras。 - 即使应用仍 target 较低 SDK,只要在 Android 17 设备上给
ACTION_PICK加上布尔 extrasEXTRA_USE_SYSTEM_CONTACTS_PICKER,也可以测试新界面(Android 文档)。 - 成功时系统返回
RESULT_OK和一个会话 URI(Session URI),读取权限是临时的。Android 的最佳实践:如果进程结束后还要用这些数据,须立即持久化。不要把会话 URI 当成通讯录的长期句柄。 - 只申请真正需要的字段。如果只发短信,就申请电话 MIME 类型,选择器可以隐藏没有号码的联系人。
然后在 Android 17+ 的清单(以及残留的库合并结果)里去掉 READ_CONTACTS。邀请/分享/选接收人这类流程既上选择器又留权限,正好与帮助要求相反。
如果已经在用 ACTION_PICK,target 17+ 就能看到新界面,不必立刻重写。需要会话 URI、个人/工作资料切换或多字段 extras 时,再改到 ACTION_PICK_CONTACTS。这是已公布的兼容路径,不是 KappS 发明的捷径。
第三步:更新 Play 控制台申报
两篇帮助描述了控制台操作。以你账号里实际出现的标签为准;如果控制台没有单独的「通讯录」开关,不要自己发明第二个。
通讯录专项提示(受限权限帮助)。2026年9月,仍携带 READ_CONTACTS 的应用会在 Play 控制台收到提示:提交申报,或去掉权限并改用 Contact Picker。帮助写明该申报会问:
- 哪些面向用户的功能需要
READ_CONTACTS?从已公布的用例列表中选择(通讯录管理、拨号或发送短信、通话记录、CRM、来电拦截、无障碍、个人助理、好友匹配/搜索、备份与恢复、自动更正/自动完成、用户主动选择设备联系人,或其他)。若用例不面向用户或不在列表中,帮助写明选「其他(Other)」。 - 说明为什么 Contact Picker 不够,以及为何仍需通过
READ_CONTACTS获得广泛访问。
勾选「用户主动选择设备联系人」(邀请、分享、在游戏里拉黑某个人)是帮助举的「选择器形态」例子。这一行不是保留权限的漏洞。
权限申报表(申报应用权限帮助)。权限请求在你添加 Android App Bundle 之后、发布流程中评估。若该软件包申请了高风险或敏感权限,且 Play 尚未收到申报,控制台会显示权限申报表(Permissions Declaration Form)。官方要点如下,不额外编按钮:
- 若仍有有效软件包(包括开放、封闭或内部测试)需要申报,左侧菜单的应用内容(App content)下会出现提醒。在你创建包含申报的版本、或去掉相关权限之前,不能发布应用变更——包括商店列表、定价和分发。
- 在应用内容页,表单的可展开列表会显示此前已申报的权限(对勾)和新申请的权限(提醒)。如果「新申请」列表里出现你不打算申报的权限,帮助要求先移除该软件包,再上传权限集合正确的新包,然后继续。
- 从支持的用例中指定核心功能;如有需要,提供审核说明、视频演示(优先 YouTube 链接),以及——若功能仅限登录用户——非生产环境的测试账号。勾选确认项后,再完成准备并发布该版本。
- 提交表单并发布后,Play 会进行加长审核,「可能需要数周」。被拒结果会发到账号所有者和联系邮箱。若必须紧急上线,帮助给出的路径是:去掉敏感权限并发布新版本,只走标准政策审核。
若控制台只出现受限权限文章里描述的通讯录提示,回答那两个问题即可。若在应用内容页出现完整的权限申报表,就按该表单和「申报应用权限」帮助操作。本文不编造第三块屏幕。
使用 Publishing API 的开发者:帮助写明,若版本申请了尚未申报的高风险或敏感权限,接口会报错。先在 Play 控制台网页完成一次表单;获批后可再使用 API。之后每新增一种权限,都必须在网页界面提交修订后的表单。
第四步:什么会审不过或被执法
Play 公布了后果。不要用坊间说法替换:
- 选择器本来就够用。邀请、分享、协作或「选一个接收人」,却仍持有
READ_CONTACTS,正是帮助称为通常不得申请的例子。应用内自制选择器救不了这份申报。 - Android 17+ 的
READ_CONTACTS构建没有申报。2027年1月27日之后,范围内未合规应用将面临执法。帮助也公布了控制台里的30天自动自行延期——延期不是永久豁免。 - 忽略应用内容提醒。申报权限帮助写明:在处理有效的权限申报提醒之前,不能发布列表或版本变更,包括仍携带该权限的闲置测试轨道。停用不合规且未在使用的开放/封闭/内部测试轨道。
- 敏感数据用途偏离。通讯录属于用户数据。受限权限要求尊重拒绝、不得强迫用户同意非关键权限,并保留合理替代。敏感权限政策禁止出售这些数据,也禁止用于未披露的功能。
- 未经联系人本人授权即公开非公开通讯录。预览政策把这条单独写出,与选择器迁移并列。
若你读完本文后,控制台又出现新的通讯录问卷,以该表单链出的现行帮助为准。本文不编造额外按钮、额外 API 级别,也不在已公布的2026-04-15(公布)、2026年9月(控制台提示)和2027-01-27(政策截止日期 / Android 17+ 强制)之外再发明日期。
10分钟自检清单
- 列出所有读取通讯录的功能。把每一项标成选择器形态(邀请、分享、选接收人)或广泛访问(管理全部联系人、备份、好友匹配、来电拦截、无障碍、键盘)。
- 若全部是选择器形态,接入
ACTION_PICK_CONTACTS,立刻持久化 Session URI 结果,并从 Android 17+ 清单中去掉READ_CONTACTS。 - 若某功能确实需要整本通讯录,先写清选择器做不到的技术原因,再打开控制台。
- 打开 Play 控制台。若 9 月提示或应用内容提醒还在,完成已公布的申报,或上传不再申请该权限的软件包。
- 停用仍申请
READ_CONTACTS却没有申报的闲置测试轨道。 - 确认商店列表只宣传与你仍在申请的访问范围相符的功能。
- 在依赖 30 天自行延期之前,重新阅读当前的政策截止日期和受限权限帮助。
一句话
只要应用面向 Android 17+ 且不需要整本通讯录,Play 的通讯录权限政策——2026年4月15日公布,截止日期2027-01-27——就要求用Android Contact Picker替代 READ_CONTACTS;只有当你能申报已公布的核心用例、并说明选择器为何不够时,才可保留广泛访问。
参考来源
- 政策截止日期 — Play控制台帮助(Google)
- 政策公告:2026年4月15日 — Play控制台帮助(Google)
- 访问敏感信息的权限和API — Play控制台帮助(Google)
- 预览:访问敏感信息的权限和API — Play控制台帮助(Google)
- 了解具有最小范围替代方案的受限权限 — Play控制台帮助(Google)
- 为应用申报权限 — Play控制台帮助(Google)
- Contact picker — Android Developers
- Google Play政策与截止日期 — Android Developers
- 以更新的Play政策提升用户隐私与业务保护 — Android Developers博客