人员和对话

“人员和对话”倡议是一项多年的 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 开始,可以从“对话”部分的通知中启动浮动气泡。只有具有关联快捷方式的通知才能显示为浮动气泡。如果对话被标记为重要,或在通知栏中触发显示为浮动气泡,则会自动显示为浮动气泡。

对话快捷方式

对话快捷方式会出现在启动器中,并与 sharesheet 中的长效共享快捷方式一起显示。

API 指南

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

对话快捷方式

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

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

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

对话通知

如果满足以下条件,则通知被视为对话通知:

  • 通知使用 MessagingStyle

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

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

使用 LocusIdCompat

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

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

如果应用不以 Android 11 为目标版本,其消息仍可显示在对话空间中。但是,应用仍必须满足某些要求。本节介绍了这些应用的要求,以及如果应用不满足要求时的备用行为。

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

  • 通知以对话样式显示
  • 如果已实现,则提供浮动气泡按钮
  • 特定于对话的功能内联提供

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

备用方案:如果使用了 MessagingStyle 但未提供快捷方式

如果应用以 Android 10 或更低版本为目标,并且通知使用 MessagingStyle将消息与快捷方式关联,则通知会在对话空间中以以下行为显示:

  • 通知以对话样式显示
  • 不提供浮动气泡按钮
  • 不内联提供特定于对话的功能

备用方案:如果未使用 MessagingStyle,但应用是已识别的消息应用

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

  • 通知以 旧版(Android 11 之前)样式 显示
  • 不提供浮动气泡按钮
  • 不内联提供特定于对话的功能

指导、用法和测试

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

我应该何时使用对话功能?

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

如果用户认为某个对话不属于该空间,我们允许用户将其从对话部分中移除。

最佳实践

为了提高互动性,并让您的用户更轻松地与围绕您应用的人员和对话进行互动,我们建议遵循以下最佳实践。

  • 为了确保未接来电显示在优先对话栏中并在对话微件中正确显示,请将未接来电通知格式化为conversations,并将类别设置为CATEGORY_MISSED_CALL
  • 为用户提供高质量的头像(104dp);否则,系统会使用人物姓名的首字母,这会降低互动体验。
  • 在用户看到消息之前,请勿取消对话通知。一个例子是,在打开应用后用户无法看到或处理消息的视图中取消通知。如果用户没有机会阅读或处理消息,已取消的通知及其关联的浮动气泡将被移除,导致对话上下文丢失。
  • 为与消息关联的 MIME 相关元数据提供data URI,这让您可以在通知中提供更丰富的体验。
  • 使用 Android 12 status API 使对话微件更具互动性。
  • 请遵循对话快捷方式的以下最佳实践。
    • 为不推送通知的应用内来往对话发布快捷方式。同一对话的来往消息应具有相同的快捷方式 ID。使用 pushDynamicShortcut() 发布您的快捷方式并报告使用情况。
    • 为了避免快捷方式头像被意外剪裁,请为快捷方式图标提供 AdaptiveIconDrawable。有关更多详细信息,请参阅提供快捷方式图片
    • 为了帮助系统推广您的快捷方式,请遵循获取最佳排名的指南。您的快捷方式会在不同的系统界面中进行排名,如果它是共享快捷方式,也会在 Android sharesheet 中排名。
    • 确保对话快捷方式的 intent 直接启动到适用的对话。
    • 使用兼容库方便地将您的快捷方式设置为与对话相关。

测试对话通知和快捷方式

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

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

添加的快捷方式会在应用启动器上长按时显示。请务必测试这些快捷方式是否能将您带到应用内的正确位置。

添加的共享快捷方式会在 sharesheet 的直接分享行中显示,前提是您分享的内容可以由您的共享快捷方式接收。

对话微件

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