通知桥接选项

默认情况下,通知会从手机上的应用桥接或共享到任何配对的手表。如果您构建了手表应用,并且您的应用也存在于配对的手机上,则用户可能会收到重复通知——一个由手机应用生成和桥接,另一个由手表应用生成。Wear OS 包含用于控制通知桥接方式和时间的特性。

避免重复通知

当您从外部来源(例如 Firebase Cloud Messaging)创建通知时,您的移动应用和可穿戴设备应用都可以在手表上显示各自的通知。为避免此类重复,请在您的可穿戴设备应用中以编程方式停用桥接。

使用桥接标签

如果您希望在安装可穿戴设备应用时,将移动应用中创建的某些通知桥接到手表,请设置桥接标签。

通过使用 setBridgeTag(String) 方法在通知上设置桥接标签,如以下代码示例所示

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setBridgeTag("tagOne")
    )
    .build()

停用桥接

您可以为部分通知或所有通知停用桥接。我们建议您选择性地停用桥接。

部分通知停用桥接

您可以动态停用桥接,并选择性地允许某些通知根据其标签通过。例如,要停用所有通知的桥接(除了标记为 tagOnetagTwotagThree 的通知),请使用 BridgingConfig 对象,如以下示例所示

BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, false)
        .addExcludedTags(listOf("tagOne", "tagTwo", "tagThree"))
        .build()
)

所有通知停用桥接(不推荐)

注意:不建议为所有通知停用桥接,因为清单文件中设置的桥接配置在手表应用安装后立即生效。如果用户在收到通知之前需要打开并设置手表应用,这可能会导致通知丢失。

为阻止手机应用的所有通知桥接,请在手表应用的清单文件中使用 <meta-data> 条目,如以下示例所示

<application>
...
  <!-- Beware, this can have unintended consqequences before the user is signed-in -->
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

注意:在运行时指定桥接配置会覆盖 Android 清单文件中与桥接相关的设置。

设置清除 ID 以同步类似通知

当您使用桥接模式功能阻止桥接时,通知的清除操作不会在用户的设备之间同步。

然而,如果在移动设备和手表上都创建了类似通知,则当用户清除其中一个通知时,您会希望两个通知都被清除。

NotificationCompat.WearableExtender 中,您可以设置一个全局唯一 ID,这样当一个通知被清除时,配对手表上具有相同 ID 的其他通知也会被清除。

NotificationCompat.WearableExtender 类具有允许您使用清除 ID 的方法,如以下示例所示

fun setDismissalId(dismissalId: String): WearableExtender
fun getDismissalId(): String

要同步清除操作,请使用 setDismissalId() 方法。对于每个通知,在调用 setDismissalId() 方法时,传入一个全局唯一 ID 作为字符串。

当通知被清除时,所有具有相同清除 ID 的其他通知也会在手表和手机上被清除。要检索清除 ID,请使用 getDismissalId()

在以下示例中,为新通知指定了一个全局唯一 ID,因此清除操作是同步的

val notification = NotificationCompat.Builder(context, channelId)
    // Set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setDismissalId("abc123")
    )
    .build()

注意:清除 ID 在手表与 Android 手机配对时有效,但在手表与 iPhone 配对时无效。

当通知未桥接时

以下类型的通知不进行桥接

桥接通知的最佳实践

将桥接通知推送或从可穿戴设备中移除需要时间。在设计通知时,请务必避免因此类延迟导致的意外行为。以下准则有助于确保您的桥接通知与异步通知协同工作

  • 如果您在手机上取消通知,可能需要一些时间才能在手表上取消对应的通知。在此期间,用户可能会针对该通知发送某个待处理意图。因此,您的应用应继续接收已取消通知的待处理意图:在取消通知时,请保持这些通知的待处理意图接收器有效。
  • 不要一次性取消并重新触发整个通知堆栈。只修改或移除实际已修改的通知。这可以避免更新可穿戴设备时的延迟,并减少您的应用对电池续航时间的影响。

设计注意事项

Wear OS 通知有其自己的设计指南。如需了解更多信息,请查阅 Wear OS 设计指南