人与对话

人与对话倡议是一个为期多年的 Android 倡议,旨在提升手机系统界面中的人与对话。该优先级基于这样一个事实,即与他人进行交流和互动仍然是大多数用户(无论其人口统计特征如何)最重视和最重要的功能领域。

Android 11 中引入了一些功能来支持人与对话倡议。

对话空间


The conversation space is a dedicated notification area for real-time
       conversations between humans.
图 1:对话空间。

在手持设备上,通知栏顶部有一个单独的部分,只包含与人进行的实时对话(例如通话和聊天消息,包括群聊)。此空间中的通知在许多手机上的外观和行为与非对话通知不同。

  • 设计不同,重点突出代表人物的头像,以及进行对话的应用。
  • 点击通知将在应用中打开对话(或气泡,如果对话之前已处于气泡状态),点击插入符号将展开阴影中的新消息,使其全长,并显示完整选项列表。
  • 提供对话特定操作(一些操作通过长按提供)
    • 将此对话标记为优先级
    • 将此对话提升为气泡(仅在应用支持气泡时显示)
    • 静音此对话的通知
    • 为此对话设置自定义声音或振动

气泡中的对话

If a notification meets the conversation requirements, the platform
       launches it as a bubble from the notification drawer.
图 2:从通知抽屉启动为气泡的通知。

从 Android 11 开始,气泡 可以从对话部分的通知启动。只有与快捷方式关联的通知才能成为气泡。如果对话被标记为重要或在通知栏中被触发为气泡,则对话将自动成为气泡。

对话快捷方式

对话快捷方式会出现在启动器中,以及长期共享快捷方式 在共享表中。

API 指南

本节介绍了在您的应用中为显示人和对话的系统提供空间添加支持的 API。

对话的快捷方式

为了参与这个以对话为中心的倡议,应用需要向系统提供长期 快捷方式。我们强烈建议使用长期共享快捷方式。如有必要,您可以在 Android 11 中使用动态快捷方式,但我们可能会在未来删除此选项。

要发布快捷方式 到对话,请调用ShortcutManagerCompat 方法setDynamicShortcuts()addDynamicShortcuts()pushDynamicShortcut()(自动管理开发人员的快捷方式限制)。此快捷方式必须长期 并且具有Person 附加一个或多个人的数据,以识别对话中的其他参与者。我们还建议您设置LocusIdCompat

如果对话不再存在,应用可以使用removeLongLivedShortcuts() 删除快捷方式;这样做会导致系统删除与对话关联的所有数据。虽然快捷方式是可删除的,但应用不应删除缓存的快捷方式,除非绝对必要;快捷方式可能被缓存是因为用户与之交互以更改其体验,删除快捷方式将撤消这些更改,从而导致用户沮丧。

对话通知

如果以下条件为真,则通知被视为对话通知

  • 通知使用MessagingStyle

  • (仅当应用定位 Android 11 或更高版本时) 通知与有效的长期 动态或缓存共享快捷方式相关联。通知可以通过调用setShortcutId()setShortcutInfo() 设置此关联。如果应用定位 Android 10 或更低版本,则通知不必与快捷方式相关联,如回退选项部分所述。

  • 用户在发布时尚未通过通知频道设置将对话从对话部分降级。

使用 LocusIdCompat

设备上的智能会确定用户最有可能感兴趣的对话。最重要的信号包括每个对话中对话会话的最近度频率。系统了解通过启动器快捷方式或通知中与对话的交互(如果它们被正确标记)。但是,系统不知道完全在应用中发生的对话,除非这些交互也被标记。因此,我们强烈建议您LocusIdCompat 附加到快捷方式 并使用关联的LocusIdCompat 对应用内活动或片段进行注释。使用LocusIdCompat 使建议系统能够正确地对对话进行排名,并使系统能够显示用户上次与对话交互的正确时间(包括应用内交互)。如果您使用setShortcutInfo() 将对话与快捷方式关联,对话系统会自动附加适当的LocusIdCompat

定位 Android 10 或更低版本的应用的对话空间要求

如果应用未定位 Android 11,则其消息仍可以在对话空间中显示。但是,应用仍然必须满足某些要求。本节介绍了这些应用的要求,以及应用未满足要求时的回退行为。

参与消息空间的核心要求是,应用必须实现MessagingStyle 通知,并且通知必须引用在发布通知时发布的通知中的长期快捷方式。满足这些要求的通知将在对话空间中显示,并具有此行为

  • 通知以对话风格显示
  • 如果已实现,将提供气泡按钮
  • 提供内联对话特定功能

如果通知不满足这些要求,平台将使用回退选项来格式化通知。如果通知满足任一回退情况的要求,则通知将在对话空间中以特殊格式显示。如果通知不符合任一回退选项,则它不会显示在对话空间中。

回退:如果使用 MessagingStyle 但未提供快捷方式

如果应用定位 Android 10 或更低版本,并且通知使用MessagingStyle没有将消息与快捷方式关联,则通知将在对话空间中显示,并具有此行为

  • 通知以对话风格显示
  • 不提供气泡按钮
  • 不提供内联对话特定功能

回退:如果未使用 MessagingStyle,但应用是公认的消息应用

如果通知没有使用 MessagingStyle,但平台识别应用为消息应用,并且通知的 category 参数设置为 msg,则通知将以以下行为显示在对话空间中

  • 通知以 **旧的,Android 11 之前的样式** 显示
  • 不提供气泡按钮
  • 不提供内联对话特定功能

指导,用法和测试

本节提供有关如何使用和测试对话功能的一般指导。

我什么时候应该使用对话?

对话通知和相关快捷方式旨在改善 **实时对话** 的用户体验。例如,短信、文本聊天和电话是实时对话,用户期望快速交流。用户对电子邮件和与对话无关的活动没有这种期望。

我们已赋予用户从对话部分中移除特定对话的能力,如果他们认为对话不在正确的位置。

最佳实践

为了提高参与度并让您的用户更容易与您应用周围的人和对话进行互动,我们建议遵循以下最佳实践。

  • 为了确保未接来电显示在优先对话阴影中,并在 转换小部件 中正确显示,请将未接来电通知格式化为 conversations,并将类别设置为 CATEGORY_MISSED_CALL
  • 为用户提供高质量的头像 (104dp);否则,系统将使用该人的姓名首字母,这是一种不太吸引人的体验。
  • 不要 cancel 用户未查看消息之前的对话通知。例如,在用户无法看到或处理消息的视图中打开应用时取消通知。如果用户没有机会阅读或处理消息,则已取消的通知及其关联的冒泡将被删除,导致对话上下文丢失。
  • 为与消息相关的 MIME 元数据提供 data URI,这使您可以选择在通知中提供更丰富的体验。
  • 使用 Android 12 状态 API 使 对话小部件 更具吸引力。
  • 对话快捷方式 采用以下最佳实践。
    • 为不推送通知的传入和传出应用内对话发布快捷方式。相同对话的传入和传出消息应具有相同的快捷方式 ID。使用 pushDynamicShortcut() 发布您的快捷方式并报告使用情况。
    • 为了避免意外剪切快捷方式头像,请为快捷方式的图标提供 AdaptiveIconDrawable。有关更多详细信息,请参阅 提供快捷方式图像
    • 为了帮助系统推广您的快捷方式,请遵循 获得最佳排名的指南。您的快捷方式在不同的系统界面中排名,包括如果它是共享快捷方式的 Android 共享表。
    • 确保对话快捷方式 intents 直接启动到适用的对话中。
    • 使用兼容库方便地将您的快捷方式设置为与 conversation 相关。

测试对话通知和快捷方式

Long-pressing on a conversation opens a menu of
  conversation-related actions.
图 3:您可以通过长按对话通知并检查对话菜单是否出现来验证对话通知是否配置正确。

如果您遵循对话空间 指南,对话应该会自动出现在 **对话空间** 中。您可以通过长按通知来验证快捷方式是否已正确集成。如果集成已正确完成,UI 将显示与对话相关的操作。如果通知未链接到快捷方式,UI 将显示文本,说明应用不支持对话功能。

已添加的快捷方式 会显示在应用启动器上的长按操作中。请务必测试快捷方式是否将您带到应用中的正确位置。

已添加的共享快捷方式 会在共享您的共享快捷方式可以接收的内容时显示在共享表的直接共享行中。

对话小部件

Conversations displayed in Conversation widgets
图 1:在对话小部件中显示的对话。

在 Android 12 中,对话小部件功能基于 Android 11 中引入的人员和对话功能,允许应用在对话小部件中显示对话状态。

对话小部件通过允许用户轻松地在主屏幕上打开聊天来促进用户互动。这些小部件是增强的快捷方式,使用户能够高效地返回对话,同时显示对话状态的片段或其他相关信息。

验证您的应用是否支持对话小部件

要验证您的应用是否支持对话小部件,您需要至少两台 Android 设备(两台都运行 Android 12)和两个用户帐户(每个设备上一个)以交换消息。为了便于本过程,我们将帐户称为“用户 A”和“用户 B”。

Widget picker UI to add a new conversation widget
图 2:用于添加新对话小部件的小部件选择器 UI。

完成以下步骤

  1. 在用户 A 的设备上,长按启动器。在小部件选择器中,点击一个新的对话小部件,如图 2 所示。
  2. 将小部件拖动到主屏幕。用户 A 的应用中正在进行或最近的对话列表应该可以选择。
  3. 现在,在用户 B 的设备上,向用户 A 发送测试消息。
  4. 返回用户 A 的设备,验证小部件是否已更新以反映用户 B 的消息通知。
  5. 可选:让用户 A 和用户 B 将对话设置为不同的状态值,以确保他们的窗口小部件能正确反映这些值。有关状态值的列表,请参阅 ConversationStatus