通知

当您的应用未在使用时,通知会提供与您的应用相关的简短、及时且相关的消息。

Android 操作系统控制着通知的许多方面,但您可以控制其他方面。实施通知时,请按照以下步骤操作

  1. 了解通知的结构。
  2. 为您的用例选择通知类型。
  3. 设置与您选择的通知类型相符的通知类别。

要点

  • 考虑通知的目的:您为什么要提醒用户?
  • 确定通知权限模式,考虑通知对您的应用有多重要,以及在用户的体验旅程中在何处请求权限。
  • 选择您的通知模板。
  • 创建通知内容
    • 标题文本应简洁地概括通知。
    • 内容文本应预览通知。
    • 如果适用于您的应用内容,则可以使用图像内容。
    • 媒体模板的媒体封面和元数据。
  • 通过提供基于其内容的操作(使用文本按钮、键入或媒体控件)来明确用户可以使用通知做什么。
  • 包含您的应用图标并设置应用图标背景颜色。
  • 为您的通知设置通道和类别。这允许系统和您的用户自定义他们接收的通知,并提供优先级行为。
  • 如果您的应用可能一次传递多个通知,请对通知进行分组。
  • 查看 Figma 上的 Android UI 工具包 以获取通知模板。

通知结构

通知旨在简化扫描和使用通知最重要元素的过程。这些元素是

  • 主要内容:这是通知中最突出的元素。次要信息(例如时间戳)较小,并汇总在主要内容上方。
  • 人物:如果通知涉及某个人,则头像会从其余内容中脱颖而出。
  • 操作:用户可以通过点击指示器图标来展开通知。操作以文本标签的形式显示在单独的背景颜色和位置上。
图 1: 折叠的通知

通知标题和内容

折叠时,通知会显示应用图标、标题文本、时间戳、展开指示器和内容文本。它还可以选择显示大型图标。

图 2: 通知标题区域

1 应用图标: 应用图标是应用身份的二维表示。它以单色显示在状态栏中。如果您的应用发送各种各样的通知,请考虑将您的应用图标替换为符号,以区分不同类型的通知。有关详细信息,请参阅应用图标颜色

2 标题文本: 通知或来源的简短标题,例如用户的帐户名称。内容是通知中最突出的元素。

3 时间戳: 指示通知发送的时间,例如错过的来电时间。

4 展开指示器: 指示通知处于折叠状态还是展开状态。

5 内容文本: 辅助信息。

6 大型图标(可选): 可以添加图像以有意义的方式增强通知,例如包含发送者头像的消息。

应用图标颜色

从 Android 12(API 级别 31)开始,系统会从您在应用中设置的通知颜色中导出图标颜色。如果应用未设置颜色,则它使用系统主题颜色。以前,颜色为灰色。

图 3: 最终的样式化应用图标颜色

对于大多数样式,系统仅在通知是前台服务通知时才应用此颜色。但是,对于附加了媒体会话的MediaStyleDecoratedMediaCustomViewStyle通知,则没有此类要求。

以下代码片段显示了如何应用图标颜色。

val notification = Notification.Builder()
    .setColor(Color.GREEN)
    .setColorized(true)
    .setSmallIcon(R.drawable.app_icon)
    .setStyle(Notification.DecoratedCustomViewStyle())
    .build()

通知操作

图 4: 通知操作区域

1 文本按钮操作

2 填充操作按钮

3 建议回复

4 回复文本字段

从 Android 7.0(API 级别 24)开始,系统会显示没有图标的操作,以容纳更多文本。为了适应 Android Wear 设备和运行 Android 6.0(API 级别 23)及以下版本的设备,您的应用仍然必须提供图标。

展开视图

您可以使用展开视图向用户显示更多信息,而无需离开通知。

展开后,通知最多可提供以下三种类型的操作

  • 建议回复
  • 重点操作(药丸形按钮)
  • 标准文本操作
不要包含与点击通知正文行为重复的文本操作。
让用户有机会与通知互动。Google 时钟应用显示正在运行的计时器,但允许用户直接从通知中暂停或添加一分钟。

启用在通知中输入文本

您可以通过包含“回复”操作来允许用户直接在通知中输入文本。这旨在用于输入少量文本,例如回复短信或记下简短笔记。

对于较长的文本输入,请引导用户导航到您的应用,为他们提供更多查看和编辑文本的空间。

对于消息应用,我们建议在用户发送回复后保持通知显示,并在对话暂停后再自动将其关闭。

图 5:用户在 Android Messages 中直接回复,点击“回复”后无需离开通知

根据您的用例选择通知类型

Google 在其 Android 应用中使用以下通知模板。这些模板可以在一定程度上根据您的应用进行自定义。

查看 Figma 上的 Android UI 工具包以获取通知模板。

标准模板

标准模板适用于大多数通知,允许简洁的文本、大型图标(如适用)和操作。

图 6:标准通知模板

大文本模板

大文本模板非常适合显示较长的文本块。它允许用户在展开通知后预览更多文本。

图 7:大文本模板,带有大型图标选项

大图片模板

大图片模板专为包含图片的通知而设计。折叠时,通知显示图片的大型图标缩略图。展开后,通知显示更大的预览图。

图 8:大图片模板

进度模板

进度模板专为需要时间才能完成的用户启动活动而设计。展开后,使用此模板的通知将显示进度条,还包括一个“取消”操作,允许用户终止此活动。(不可取消的活动不需要通知。)

图 9:进度模板

媒体模板

媒体模板专为允许用户控制当前从应用播放的媒体而设计。

  • 折叠时,通知最多可以显示三个操作。大型图标可以显示相关的图像,例如专辑封面。
  • 展开后,通知最多可以显示五个操作和更大的图像,或者六个操作而没有图像。通知的背景和其他元素会自动继承图像的颜色。
图 10:媒体模板

消息模板

MessagingStyle 模板专为实时通信而设计。展开后,使用此模板的通知允许用户在通知内回复消息。

图 11:消息模板

来电模板

使用 CallStyle 模板生成包含大型图像附件并指示来电或去电的大型格式通知。

图 12:来电模板

通知权限

尽管通知可以及时且相关,但大多数通知都是非豁免的,也就是说,用户必须同意接收来自您应用的通知。

有一个例外:从 Android 13(API 级别 33)开始,媒体会话和管理电话呼叫的应用豁免于请求用户同意。如果用户已启用通知,则现有应用也可能有资格。在 豁免 中查看更多详细信息。

我们强烈建议您的应用在设置中提供通知选项,以允许用户更新其通知偏好设置

提示用户选择加入非豁免通知

对于非豁免通知,请提示用户指示他们是否要选择加入接收通知。明确选择接收通知的用户可能会发现它们更有用且侵入性更小。

图 13:请求用户同意非豁免通知

等待显示通知对话框提示

  • 描述通知提供的益处以及未授予通知权限的结果。
  • 提供上下文 UI,将通知与其功能或影响范围联系起来。此 UI 可以采用任何形式以最佳方式集成到您的应用中:例如费用中的卡片、底部工作表或入门屏幕。所有这些都应该是可关闭的。
  • 如果用户已关闭 UI,请不要显示通知权限对话框。

从 Android 13 开始,可以重新提示用户进行通知权限设置。

必需通知

前台服务执行用户注意到的操作,但他们没有直接与您的应用交互。这些服务显示状态栏通知,让用户知道您的应用正在前台执行任务并正在消耗系统资源。

图 14:健身应用前台服务通知示例

由于这些进程会使用电池并可能使用数据,因此您的应用必须通过显示不可关闭的通知来让用户知道它们。用户无法关闭通知,因此您必须为用户提供停止服务的动作。

以下示例显示来自健身应用的通知。用户已启动活动锻炼会话,该会话实例化跟踪锻炼会话的前台服务。该应用显示通知以指示它正在跟踪步行,并可以选择查看锻炼情况。

何时不使用通知

不要在以下任何用例中使用通知

  • 用于交叉推广或宣传其他产品(Play 商店严格禁止此行为)
  • 如果用户从未打开过您的应用
  • 作为与用户沟通的主要方法
  • 鼓励用户返回应用,但不提供任何直接价值(例如,“好久不见!”)
  • 用于请求评价您的应用
  • 对于不需要用户参与的操作,例如同步信息
  • 用于宣布应用可能在无需用户交互的情况下恢复的错误状态
  • 用于节日或生日消息
不要以通知的形式发送节日或生日祝福。
不要仅仅为了询问您是否做得很好而中断用户正在执行的任务。

行为

请注意以下通知行为以及如何在特定情况下处理它们。

通知到达

当通知到达时,Android 会将其添加到通知抽屉。根据您设置的参数和设备的当前状态,通知可能会执行以下任何操作

  • 发出声音或引起手机振动。
  • 在状态栏中显示带图标;这通常是您的应用图标,但如果您有多种类型的通知,请使用一个能捕捉通知目的的符号。
  • 显示为抬头通知,在当前屏幕上弹出以吸引用户的注意力。

与以往一样,用户可以选择更改您设置的通知行为。

图 15:通知到达

1 状态栏中的通知指示器,指示通知抽屉中存在通知。

2 通知“弹出”到当前屏幕上,以在用户执行任务时吸引用户的注意力。

通知抽屉

Android 中的通知抽屉通常按反时间顺序显示通知,并根据以下条件进行调整

  • 应用声明的通知优先级或重要性
  • 通知是否最近使用声音或振动提醒用户
  • 附加到通知的任何人员以及他们是否是星标联系人
  • 通知是否代表重要的正在进行的活动,例如正在进行的电话呼叫或正在播放的音乐
  • Android 操作系统通过在列表顶部和底部添加强调或弱化来更改某些通知的外观,这有助于用户扫描内容

处理陈旧的通知

通知抽屉旨在向用户显示当前时间相关的相关信息。如果较早的通知已陈旧,即不再相关,请将其关闭,以免用户看到它。

图 16:刚到达的文本出现在通知抽屉顶部,添加照片的较低优先级通知出现在底部

应用图标徽章指示新通知

在运行 Android 8.0(API 级别 26)及更高版本的设备上的支持启动器中,应用图标会显示一个通知点,以指示该应用有与其关联的新通知。这些点默认情况下出现在支持它们的启动器应用中,您的应用无需执行任何操作。徽章也可以被禁用和限制。

图 17:应用图标上的通知点,指示该应用有与其关联的新通知

用户可以使用通知执行的操作

通知允许用户执行以下任何操作

  • 导航到目的地:要导航,用户可以点击通知。如果通知在锁屏上显示,则用户需要双击它,然后输入其 PIN、图案或密码。

    当用户点击通知时,您的应用必须显示与该通知直接相关的 UI,并允许用户立即采取行动。例如,如果通知说轮到他们在双人游戏中进行操作,则点击通知应直接将他们带到该游戏中。

  • 查看通知的展开视图:展开指示器会出现在标题中。用户可以点击指示器或向下滑动通知正文以展开它。

    图 18:展开的通知
  • 关闭通知(如果允许):用户可以通过向左或向右滑动将其关闭。

指示后台持续进程(例如正在播放的音乐)的持续通知可能无法通过滑动关闭。

  • 暂停抬头通知:用户可以在抬头通知上向上滑动,并且不允许来自该事件的进一步通知在一分钟内脉冲。

  • 控制将来类似的通知:用户可以通过以下方式访问通知控制

    • 触摸并按住单个通知
    • 向左或向右滑动通知,然后点击设置图标

显示的控件因 Android 版本以及应用是否具有其通知的通道(从 Android 8.0 开始)而异。

分组多个通知

对于生成多种相同类型通知的应用,Android 提供了通知分组功能,以避免让用户感到信息过载。

您的应用可以根据以下层次结构呈现多个通知。

  • 父通知显示其子通知的摘要。
  • 如果用户展开父通知,Android 会显示所有子通知。
  • 用户可以展开子通知以查看其全部内容。

Android 显示子通知时不会重复显示标题信息。例如,如果子通知与父通知具有相同的应用图标,则子通知的标题中不会包含图标。

即使单独出现,子通知也必须易于理解,因为系统可能会在它们到达时在组外显示它们。

图 19: 分组通知的折叠和展开视图。

设置

渠道

从 Android 8.0(API 级别 26)开始,所有通知都必须分配给一个渠道。对于每个渠道,您可以设置应用于该渠道中所有通知的视觉和听觉行为。用户可以更改这些设置,并决定您的应用中的哪些通知渠道可以具有干扰性或可见。

有关如何实现此功能的详细信息,请参阅 创建和管理通知渠道

选择重要性时,应考虑到用户的宝贵时间和注意力。当不重要的通知伪装成紧急通知时,可能会造成不必要的警报。

重要性 行为 用法 示例
高 (HIGH) 发出声音并在屏幕上显示 用户必须立即知道或采取行动的时间关键信息 文本消息、闹钟、电话
默认 (DEFAULT) 发出声音 应在用户方便时查看的信息,但不应中断他们正在执行的操作 交通警报、任务提醒
低 (LOW) 无声音 不符合其他重要性级别要求的通知渠道 用户订阅的新内容、社交网络邀请
最小 (MIN) 无声音或视觉干扰 可以等待或与用户不直接相关的不重要信息 附近的兴趣点、天气、促销内容

预定义类别

无论您是否使用渠道,都应将每个单独的通知分配给最合适的预定义类别。Android 可能会使用此信息来做出排名和过滤决策。

类别 描述
CATEGORY_CALL 来电(语音或视频)或类似的同步通信请求
CATEGORY_MESSAGE 传入的直接消息(短信、即时消息等)
CATEGORY_EMAIL 异步批量消息(电子邮件)
CATEGORY_EVENT 日历事件
CATEGORY_PROMO 促销或广告
CATEGORY_ALARM 闹钟或计时器
CATEGORY_PROGRESS 长时间运行的后台操作的进度
CATEGORY_SOCIAL 社交网络或共享更新
CATEGORY_ERROR 后台操作或身份验证状态错误
CATEGORY_TRANSPORT 媒体传输控制(用于播放)
CATEGORY_SYSTEM 系统或设备状态更新。保留供系统使用。
CATEGORY_SERVICE 正在运行的后台服务的指示
CATEGORY_RECOMMENDATION 针对单个项目的特定、及时的推荐。例如,新闻应用可能会推荐用户接下来可能想阅读的新闻故事。
CATEGORY_STATUS 有关设备或上下文状态的持续信息

锁屏通知

如果用户选择在屏幕锁定后显示通知,这些通知可以隐藏您的应用标记为敏感的任何内容。Android 会评估每个通知的可见性级别,以确定可以安全显示的内容。

设置锁屏上内容的敏感性级别

用户隐私至关重要,因此请注意,锁屏上可以显示不同级别的通知。对于您创建的每个通知,您必须将可见性级别设置为公开私有秘密

  • 公开通知在安全的锁屏上完全可见。
  • 秘密通知隐藏。
  • 私有通知介于两者之间:它们仅显示基本信息,包括发布它的应用的名称及其图标。您可以选择显示不会泄露个人信息的文本(而不是隐藏的常规内容),例如 2 new messages

在以下示例中,在用户选择在锁屏上显示此信息后,Gmail 和照片应用的锁屏通知将显示所有内容。

图 20: 具有不同敏感性级别的锁屏。

1 锁屏上显示所有通知内容

2 锁屏上隐藏敏感的通知内容

样式

清晰简洁的文本

Android 会将内容标题截断为单行(即使展开也是如此)。

良好的内容标题应遵循以下准则:

  • 不超过 30 个字符
  • 包含最重要的信息
  • 避免使用变量(除非它们包含数字或简短的文本字符串,或者前面有文本)
  • 不包含应用名称,应用名称已显示在标题中
在内容标题中显示应用名称,这与标题区域冗余,并使用了可用的字符。
在内容标题中显示最重要的信息。

良好的内容文本应遵循以下准则:

  • 避免超过 40 个字符的限制
  • 避免重复内容标题中的内容

大型图标

对于图像可以有效增强通知内容的用例,请使用大型图标。一些示例包括:

  • 来自其他人的通信,例如发送消息的人的图像
  • 如果内容来源与发送通知的应用不同,则为内容来源,例如用户订阅的 YouTube 频道的徽标
  • 关于通知的有意义的符号,例如驾驶路线的箭头符号

显示人物时,大型图标必须是圆形的,其他情况下则为方形。

使用大型图标进行品牌宣传。
使用大型图标以有意义的方式增强通知的内容,例如显示附加到消息通知的人物照片。

Android 版本更新

Android 通知系统 UI 和与通知相关的 API 持续发展。有关这些更改的列表,请查看 通知兼容性

平台注意事项

Wear

如果用户拥有配对的 Wear OS 设备,则所有通知都会自动显示在该设备上,包括可展开的详细信息和操作按钮。有关详细信息,请参阅 Wear 上通知的设计页面