人和对话计划是 Android 的一项多年计划,旨在提升手机系统界面中的人和对话。 这一优先级基于这样一个事实,即与他人沟通和互动仍然是大多数用户(涵盖所有人口统计特征)最重视和最重要的功能领域。
Android 11 中引入了一些功能来支持人和对话计划。
对话空间
在手持设备上,通知栏顶部有一个单独的部分,仅包含与人员的实时对话(例如通话和聊天消息,包括群聊)。 在许多手机上,此空间中的通知的外观和行为与非对话通知不同。
- 设计有所不同,重点突出了代表人员的头像以及承载对话的应用。
- 点击通知会在应用中打开对话(或气泡,如果对话之前已设为气泡),点击插入符号会将通知栏中的新消息扩展到全长,并显示完整的选项列表。
- 提供特定于对话的操作(某些操作通过长按提供)
- 将此对话标记为优先级
- 将此对话提升为气泡(仅在应用支持气泡时显示)
- 静音此对话的通知
- 为此对话设置自定义声音或振动
气泡中的对话
从 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 status
API 使对话小部件更具吸引力。 - 采用以下 对话快捷方式 的最佳实践。
- 发布应用内传入和传出对话的快捷方式,这些对话不会推送通知。同一对话的传入和传出消息应具有相同的快捷方式 ID。使用
pushDynamicShortcut()
发布快捷方式并报告使用情况。 - 为了避免意外裁剪快捷方式头像,请为快捷方式图标提供
AdaptiveIconDrawable
。有关更多详细信息,请参阅 提供快捷方式图像。 - 为了帮助系统推广您的快捷方式,请遵循 获得最佳排名的指南。您的快捷方式在不同的系统界面中排名,包括 Android 共享表单(如果它是共享快捷方式)。
- 确保对话快捷方式
intents
直接启动到适用的对话。 - 使用兼容库方便地将快捷方式设置为与
conversation
相关。
- 发布应用内传入和传出对话的快捷方式,这些对话不会推送通知。同一对话的传入和传出消息应具有相同的快捷方式 ID。使用
测试对话通知和快捷方式
如果您遵循对话空间指南,对话应自动出现在对话空间中。您可以通过长按通知来验证快捷方式是否已正确集成。如果集成正确,则 UI 将显示与对话相关的操作。如果通知未链接到快捷方式,则 UI 将显示文本,说明该应用不支持对话功能。
添加的快捷方式 在长按应用启动器时显示。请务必测试快捷方式是否将您带到应用中的正确位置。
添加的共享快捷方式 在共享您共享快捷方式可以接收的内容时,显示在共享表单的直接共享行中。
对话小部件
在 Android 12 中,对话小部件功能建立在 Android 11 中引入的人员和对话功能 的基础上,允许应用在对话小部件中显示对话状态。
对话小部件通过允许用户轻松打开主屏幕上的聊天来促进用户互动。这些小部件是增强的快捷方式,允许用户有效地返回其对话,同时显示其对话状态或其他相关信息的片段。
验证您的应用是否支持对话小部件
要验证您的应用是否支持对话小部件,您需要至少两台 Android 设备(均运行 Android 12)和两个用户帐户(每个设备一个)来交换消息。出于此过程的目的,我们将帐户称为“用户 A”和“用户 B”。
完成以下步骤
- 在用户 A 的设备上,长按启动器。在小部件选择器中,点击一个新的对话小部件,如图 2 所示。
- 将小部件拖到主屏幕。应可以选择用户 A 应用中的活动或最近对话列表。
- 现在,在用户 B 的设备上,向用户 A 发送测试消息。
- 返回用户 A 的设备,验证小部件是否已更新以反映来自用户 B 的消息通知。
- 可选:让用户 A 和用户 B 将对话设置为不同的状态值,以确保其小部件正确反映这些值。有关状态值的列表,请参阅 ConversationStatus。