Android 13 中的通知使用选择加入模型,这与以前使用选择退出模型的 Android 版本不同。在 Android 13 中,所有应用在发送通知提示之前都必须征求用户的许可。此模型有助于减少通知中断,最大限度地减少信息过载,并帮助用户根据对他们来说重要的内容来控制显示哪些通知。为了支持选择加入模型,OEM 必须对通知和运行时权限系统进行更改。
本页介绍了 OEM 必须实施哪些内容才能支持此更改以及如何验证实施。
实施选择加入通知的更改
从 Android 13 开始,应用必须在发送通知之前通过向系统请求android.permission.POST_NOTIFICATION
运行时权限来声明发送通知的意图。
在 Android 13 及更高版本中,确定应用是否可以向用户发送通知的设置存储在权限系统中。在 Android 13 之前,此设置存储在通知系统中。因此,OEM 必须将有关应用程序是否允许发送通知的现有通知数据从通知系统迁移到运行时权限系统。原始设备制造商还必须在通知系统中维护现有的 API,以向应用程序开发人员显示该数据。
通知和权限系统的更改基于用户通知行为的选择加入模型,并在实施指南部分进行了描述。
选择加入模型中的用户通知行为
下表说明了运行 Android 13 的设备上各种应用版本的通知行为:
搭载 Android 13 的设备 | 以 Android 13 或更高版本为目标平台的应用 | 针对低于 Android 13 的版本的应用 |
---|---|---|
新安装 | 在应用程序提示之前,通知会被阻止。 应用程序控制何时请求许可。 | 在操作系统提示之前,通知会被阻止。 首次运行应用程序时会询问权限。 |
现有应用程序(升级) | 在应用程序提示之前,允许通知。 授予临时许可,直到应用程序在第一次符合条件的运行时询问。 | 在操作系统提示之前允许通知。 在应用程序首次运行之前授予临时权限。 |
实施指南
参考实现参考通知服务、权限服务和策略服务。要为默认权限处理程序实现异常,请参阅运行时权限。
在实施过程中,针对面向 Android 13 或更低版本 SDK 的应用,使用以下用户通知行为准则:
- 未经用户批准权限提示,Android 13 设备上新安装的应用不得发送通知。
- 如果应用程序针对 Android 13 及更高版本,则必须阻止通知,直到应用程序提示,因为应用程序控制何时以及是否请求用户许可。
- 如果应用程序的目标版本低于 Android 13,则必须阻止通知,直到操作系统提示为止。操作系统必须在应用程序首次运行时显示权限提示。
在升级到 Android 13 之前设备上存在的任何应用程序,或通过备份和恢复恢复的任何应用程序,必须允许发送通知,直到用户第一次从该应用程序启动活动。
对于面向Android 13及以上版本SDK的应用,如果用户之前没有在应用或
NotificationChannel
级别为该应用自定义通知设置,则撤销临时权限授予。然后,应用程序必须先征求用户的许可,然后才能继续发送通知。如果针对 Android 13 的升级应用当前没有通过临时升级授权获得通知权限,并且用户至少启动过一次,则该应用必须显示通知权限提示才能运行任何进一步的前台服务。
对于目标SDK低于Android 13版本的应用,拦截应用创建至少一个
NotificationChannel
后的第一个Activity启动,显示权限提示,询问用户是否要接收来自应用的通知。如果用户之前在应用程序或
NotificationChannel
级别为升级设备或正在恢复到设备的备份中的应用程序自定义通知设置,则必须使用FLAG_PERMISSION_USER_SET
标志将应用程序级别设置迁移到权限系统中。除非应用明确要求,否则不得向用户显示进一步的通知权限提示。
备份和恢复必须在 Android 13 设备和早期操作系统版本的设备之间向后和向前兼容。 Android 13 设备生成的备份数据必须恢复到较早的操作系统版本,而来自较早操作系统版本的备份数据必须恢复到 Android 13 设备。
与正在进行的媒体播放相关联的媒体通知必须免于通知权限。
验证对通知和权限系统的更改
要验证实施,请运行以下测试:
PreferencesHelperTest
和NotificationManagerServiceTest
中指定的单元测试。任何测试升级、备份和恢复的手动测试。
发送通知的任何 CTS 权限和通知系统测试。其中一些测试位于cts/tests/tests/permission/ 、 NotificationManagerTest.java和cts/tests/tests/notificationlegacy/中。