通知

通知在您的应用程序未在使用时提供与您的应用程序相关的简短、及时且相关的信息。

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 消息中直接回复,并在点击“回复”后未离开通知

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

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:展开的通知
  • 关闭通知(如果允许):用户可以通过向左或向右滑动来将其关闭。

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

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

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

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

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

将多个通知分组

对于生成多个相同类型通知的应用,Android 提供了通知分组功能,以避免让用户感到困惑。

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

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

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

如果子通知单独出现,则必须能够理解,因为系统可能会在它们到达时在组外显示它们。

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

设置

频道

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

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

应考虑用户的時間和注意力来选择重要性。当不重要的通知伪装成紧急通知时,会导致不必要的警报。

重要性 行为 用途 示例
发出声音并显示在屏幕上 用户必须立即知道或采取行动的紧急信息 短信、闹钟、电话
默认 发出声音 应在用户最早方便时看到的通知,但不会中断其正在进行的操作 交通警报、任务提醒
无声音 不符合其他重要性级别要求的通知通道 用户订阅的新内容、社交网络邀请
最小 无声音或视觉干扰 非必要信息,可以等待或与用户无关 附近的兴趣点、天气、促销内容

预定义类别

无论您是否使用通道,都应将每个单独的通知分配到最合适的预定义类别。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 条新消息,而不是隐藏的常规内容。

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

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

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

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

样式

清晰简洁的文本

Android 会将内容标题截断为一行(即使已扩展)。

一个好的内容标题应符合以下指南

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

良好的内容文本应符合以下指南

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

大型图标

在图像有意义地增强通知内容的用例中使用大型图标。以下是一些示例

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

显示人像时,大型图标必须是圆形的,但在所有其他情况下都必须是方形的。

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

Android 版本更新

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

平台注意事项

Wear

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