Параметры моста для уведомлений

По умолчанию уведомления передаются, или пересылаются, из приложения на телефоне на все сопряженные часы. Если вы разрабатываете приложение для часов, и это приложение также установлено на сопряженном телефоне, пользователи могут получать дублирующие уведомления — одно, сгенерированное и переданное приложением на телефоне, и другое, сгенерированное приложением на часах. Wear OS включает в себя функции для управления тем, как и когда передаются уведомления.

Избегайте дублирования уведомлений.

При создании уведомлений из внешнего источника, например, из Firebase Cloud Messaging , ваше мобильное приложение и приложение для носимого устройства могут отображать на часах собственные уведомления. Чтобы избежать подобного дублирования, программно отключите функцию объединения уведомлений в вашем приложении для носимого устройства.

Используйте теги моста

Если вы хотите перенаправить некоторые уведомления, созданные в вашем мобильном приложении, на часы после установки приложения для носимого устройства, установите теги для перенаправления.

Установите тег-мост для уведомления, используя метод setBridgeTag(String) , как показано в следующем примере кода:

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

Отключить мостовое соединение

Вы можете отключить функцию "мост" для некоторых или для всех уведомлений. Мы рекомендуем отключать функцию "мост" выборочно.

Отключите мостовое соединение для некоторых уведомлений.

Вы можете динамически отключать мостовое соединение и, при необходимости, разрешать прохождение некоторых уведомлений в зависимости от их тега. Например, чтобы отключить мостовое соединение для всех уведомлений, кроме тех, которые помечены тегами tagOne , tagTwo или tagThree , используйте объект BridgingConfig как показано в следующем примере:

// In this example, bridging is only enabled for tagOne, tagTwo and tagThree.
BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, isBridgingEnabled = false)
        .addExcludedTags(listOf("tagOne", "tagTwo", "tagThree"))
        .build()
)

Отключите мостовое соединение для всех уведомлений (не рекомендуется).

Примечание: Отключение моста для всех уведомлений не рекомендуется, поскольку конфигурация моста, заданная в манифесте, вступает в силу сразу после установки приложения для часов. Это может привести к потере уведомлений, если пользователю потребуется открыть и настроить приложение для часов до получения уведомлений.

Чтобы предотвратить перенаправление всех уведомлений из мобильного приложения, используйте запись <meta-data> в файле манифеста приложения для часов, как показано в следующем примере:

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

Примечание: Указание конфигурации моста во время выполнения переопределяет параметр, связанный с мостом, в файле манифеста Android.

Укажите идентификатор закрытия уведомления, чтобы синхронизировать похожие уведомления.

Если отключить функцию мостового соединения с помощью соответствующего режима, уведомления об отклонении не будут синхронизироваться между устройствами пользователя.

Однако, если аналогичные уведомления создаются как на мобильном устройстве, так и на часах, вам нужно, чтобы оба уведомления закрывались, когда пользователь закрывает одно из них.

В компоненте NotificationCompat.WearableExtender можно установить глобальный уникальный идентификатор, чтобы при закрытии одного уведомления закрывались и другие уведомления с тем же идентификатором на сопряженных часах.

Класс NotificationCompat.WearableExtender имеет методы, позволяющие использовать идентификаторы закрытия, как показано в следующем примере:

Когда уведомление закрывается, все остальные уведомления с тем же идентификатором закрытия закрываются на часах и телефоне. Чтобы получить идентификатор закрытия, используйте getDismissalId()

В следующем примере для нового уведомления указан глобально уникальный идентификатор, поэтому уведомления об отклонении синхронизируются:

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

Примечание: Идентификаторы отмены работают, если часы сопряжены с телефоном Android, но не работают, если часы сопряжены с iPhone.

Когда уведомления не передаются между узлами

Следующие типы уведомлений не поддерживаются:

Рекомендации по использованию мостовых уведомлений

Для отправки или удаления уведомлений, передаваемых через мост, с носимого устройства требуется время. При разработке уведомлений убедитесь, что вы избегаете непредвиденного поведения, вызванного этой задержкой. Следующие рекомендации помогут обеспечить совместимость ваших уведомлений, передаваемых через мост, с асинхронными уведомлениями:

  • Если вы отмените уведомление на телефоне, может потребоваться некоторое время для отмены соответствующего уведомления на часах. В течение этого времени пользователь может отправить один из ожидающих интентов этого уведомления. По этой причине продолжайте получать ожидающие интенты в вашем приложении от отмененных уведомлений: при отмене уведомлений сохраняйте действительными получатели ожидающих интентов этих уведомлений.
  • Не отменяйте и не запускайте сразу весь набор уведомлений. Изменяйте или удаляйте только те уведомления, которые действительно были изменены. Это позволит избежать задержек при обновлении носимого устройства и снизит влияние вашего приложения на время работы от батареи.

Вопросы проектирования

Для уведомлений Wear OS существуют собственные рекомендации по дизайну. Для получения дополнительной информации ознакомьтесь с рекомендациями по дизайну Wear OS .