通知的桥接选项

默认情况下,通知会从手机上的应用桥接到任何配对的手表,或与其共享。如果您构建了一个手表应用,并且您的应用也存在于配对的手机上,用户可能会收到重复的通知——一个由手机应用生成并桥接,另一个由手表应用生成。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()

注意:如果手表与 Android 手机配对,则关闭 ID 有效,但如果手表与 iPhone 配对,则无效。

当通知未桥接时

以下类型的通知不会被桥接

桥接通知的最佳实践

将桥接通知推送到可穿戴设备或从可穿戴设备中删除需要时间。在设计通知时,请确保避免由此延迟引起的意外行为。以下指南有助于确保您的桥接通知与异步通知一起使用

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

设计注意事项

Wear OS 通知有其自身的设计指南。有关更多信息,请查看Wear OS 设计指南