“选择启用”通知的通知权限

Android 13 中的通知采用“选择启用”模式,这与旧版 Android 不同,旧版 Android 采用的是“选择停用”模式。在 Android 13 中,所有应用必须先请求用户授予权限,然后才能发送通知提示。此模式有助于减少通知打扰,尽可能避免发生信息过多的情况,并帮助用户根据重要程度控制显示通知。为了支持“选择启用”模式,OEM 必须在通知和运行时权限系统中实现变更。

本页将介绍 OEM 必须进行哪些实现才能支持这项变更,以及如何验证该实现。

实现“选择启用”通知功能所需的变更

从 Android 13 开始,应用必须先向系统请求 android.permission.POST_NOTIFICATION 运行时权限,以声明发送通知的意图,然后才能发送通知。

在 Android 13 及更高版本中,决定应用能否向用户发送通知的设置存储在权限系统中。在 Android 13 之前,此设置存储在通知系统中。因此,OEM 必须将关于是否允许应用发送通知的现有通知数据从通知系统迁移到运行时权限系统。此外,OEM 还必须维护通知系统中的现有 API,以向应用开发者提供上述数据。

对通知系统和权限系统做出的变更基于用户通知行为的“选择启用”模式实现指南部分对此进行了说明。

“选择启用”模式中用户通知的行为

下表说明了搭载 Android 13 的设备上的各种应用版本的通知行为:

搭载 Android 13 的设备 以 Android 13 或更高版本为目标平台的应用 以低于 Android 13 的版本为目标平台的应用
新安装 系统会屏蔽通知,直至应用发出提示。

应用控制何时请求权限。

系统会屏蔽通知,直至操作系统发出提示。

首次运行应用时,系统会请求权限。

现有应用(升级) 系统会屏蔽通知,直至应用发出提示。

系统将授予临时权限,直至应用在首次符合条件地运行时发出请求。

系统会屏蔽通知,直至操作系统发出提示。

系统会授予临时权限,直至应用首次运行。

实现指南

有关参考实现,请参阅通知服务权限服务政策服务。如需为默认权限处理程序实现异常,请参阅运行时权限

在实现过程中,对于以 Android 13 或更低版本的 SDK 为目标平台的应用,请遵循以下关于用户通知行为的准则:

  • Android 13 设备上新安装的应用不得在未经用户批准权限提示的情况下发送通知。
    • 如果应用以 Android 13 及更高版本为目标平台,则系统必须屏蔽通知,直至应用发出提示,因为应用控制着何时请求以及是否请求用户授予权限。
    • 如果应用以低于 Android 13 的版本为目标平台,则系统必须屏蔽通知,直至操作系统发出提示。操作系统必须在应用首次运行时显示权限提示。
  • 对于在设备升级到 Android 13 之前存在的任何应用,或通过“备份和恢复”功能恢复的任何应用,系统都必须允许发送通知,直至用户首次通过该应用启动一个 activity。

    • 对于以 Android 13 及更高版本的 SDK 为目标平台的应用,如果用户之前未在应用或 NotificationChannel 级别自定义此应用的通知设置,请撤消授予临时权限。然后,系统必须请求用户授予权限,才能继续发送通知。

      如果以 Android 13 为目标平台的升级后的应用目前未获得通过升级临时权限授权提供的通知权限,并且用户已启动该应用至少一次,则该应用必须先显示通知权限提示,才能运行任何其他前台服务。

    • 对于以低于 Android 13 的版本的 SDK 为目标平台的应用,在应用创建至少一个 NotificationChannel 后,拦截首次 activity 启动以显示权限提示,询问用户是否想要接收来自应用的通知。

      如果某用户之前在应用或 NotificationChannel 级别为升级设备上或要恢复到设备的备份中的应用的自定义了通知设置,应用级别的相应设置必须迁移到具有 FLAG_PERMISSION_USER_SET 标志的权限系统。除非应用明确要求,否则不得向用户显示其他通知权限提示。

  • 在搭载 Android 13 的设备和使用较低操作系统版本的设备之间,备份和恢复必须向前和向后兼容。从搭载 Android 13 的设备生成的备份数据必须恢复到搭载早期操作系统版本的设备上,反之亦然。

  • 与正在进行的媒体播放相关联的媒体通知不得受到通知权限的限制。

验证对通知和权限系统做出的变更

如需验证实现,请运行以下测试: