通知

当用户不在使用应用时,通知可提供简洁、及时且相关的应用信息。

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 会将其添加到通知抽屉。根据您设置的参数和设备的当前状态,通知可能会执行以下任一操作:

  • 发出声音或引起手机振动。
  • 在状态栏中显示图标;通常是您的应用图标,但如果您有多种类型的通知,请使用能概括通知用途的符号。
  • 显示为“抬头通知”(heads-up notification),并在当前屏幕上弹出以吸引用户的注意力。

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

图 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 会评估每个通知的可见性级别,以确定哪些内容可以安全显示。

设置锁定屏幕上的内容敏感度级别

用户隐私至关重要,因此请注意,锁定屏幕上可见的通知有不同的级别。对于您创建的每个通知,您必须将可见性级别设置为公开 (public)私密 (private)机密 (secret)

  • 公开通知在安全锁定屏幕上完全可见。
  • 机密通知处于隐藏状态。
  • 私密通知介于两者之间:它们仅显示基本信息,包括发布该通知的应用名称及其图标。您可以选择显示不泄露个人信息的文本,例如 2 条新消息,以代替隐藏的常规内容。

在以下示例中,在用户选择在锁定屏幕上显示信息后,Gmail 和相册应用的锁定屏幕通知会显示所有内容。

图 20: 具有不同敏感度级别的锁定屏幕。

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

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

样式

清晰简洁的文本

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

一个好的内容标题遵循以下原则:

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

好的内容文本遵循以下原则:

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

大图标

将大图标用于图片能有效强化通知内容的场景。例如:

  • 来自其他人的通讯,例如发送消息者的照片
  • 内容的来源(如果与发送通知的应用不同),例如用户订阅的 YouTube 频道的徽标
  • 关于通知的有意义符号,例如驾驶导航的箭头符号

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

将大图标用于品牌推广。
将大图标用于以有意义的方式强化通知内容,例如显示附加到消息通知中的个人照片。

Android 版本更新

Android 通知系统 UI 和相关的 API 不断演进。有关这些更改的列表,请查看通知兼容性

平台注意事项

Wear

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