По умолчанию уведомления передаются или передаются из приложения на телефоне на любые сопряженные часы. Если вы создаете приложение для часов и ваше приложение также существует на сопряженном телефоне, пользователи могут получать дублирующиеся уведомления — одно, созданное и соединенное приложением телефона, и другое, созданное приложением для часов. 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
, как показано в следующем примере:
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.
Установите идентификатор увольнения для синхронизации похожих уведомлений
Если вы запретите соединение с помощью функции режима моста, закрытие уведомлений не синхронизируется между устройствами пользователя.
Однако если аналогичные уведомления создаются и на мобильном устройстве, и на часах, вы хотите, чтобы оба уведомления закрывались, когда пользователь закрывает одно из них.
В NotificationCompat.WearableExtender
вы можете установить глобальный уникальный идентификатор, чтобы при закрытии уведомления другие уведомления с тем же идентификатором на парных часах также закрывались.
Класс NotificationCompat.WearableExtender
имеет методы, позволяющие использовать идентификаторы увольнения, как показано в следующем примере:
fun setDismissalId(dismissalId: String): WearableExtender fun getDismissalId(): String
Для синхронизации увольнения используйте метод setDismissalId()
. Для каждого уведомления передайте глобально уникальный идентификатор в виде строки при вызове метода setDismissalId()
.
При закрытии уведомления все остальные уведомления с тем же идентификатором отклонения закрываются на часах и на телефоне. Чтобы получить идентификатор увольнения, используйте getDismissalId()
В следующем примере для нового уведомления указывается глобально уникальный идентификатор, поэтому увольнения синхронизируются:
val notification = NotificationCompat.Builder(context, channelId) // Set other fields ... .extend( NotificationCompat.WearableExtender() .setDismissalId("abc123") ) .build()
Примечание. Идентификаторы увольнения работают, если часы подключены к телефону Android, но не работают, если часы подключены к iPhone.
Когда уведомления не синхронизированы
Следующие типы уведомлений не синхронизируются:
- Уведомления только для локального уровня, устанавливаемые с помощью
Notification.Builder.setLocalOnly(boolean)
. - Текущие уведомления устанавливаются с помощью
Notification.Builder.setOngoing(boolean)
илиNotification.FLAG_ONGOING_EVENT
. - Неочищаемые уведомления устанавливаются с помощью
Notification.FLAG_NO_CLEAR
. - Уведомления, в которых аналогичное носимое приложение отключило соединение уведомлений, как описано ранее.
Рекомендации по использованию параллельных уведомлений
Чтобы отправить или удалить параллельные уведомления с носимого устройства, требуется время. При разработке уведомлений старайтесь избегать непредвиденного поведения, вызванного этой задержкой. Следующие рекомендации помогут обеспечить работу мостовых уведомлений с асинхронными уведомлениями.
- Если вы отмените уведомление на телефоне, отмена соответствующего уведомления на часах может занять некоторое время. В течение этого времени пользователь может отправить одно из ожидающих намерений в этом уведомлении. По этой причине продолжайте получать ожидающие намерения в своем приложении из уведомлений, которые оно отменило: при отмене уведомлений сохраняйте действительными получатели ожидающих намерений этих уведомлений.
- Не отменяйте и не запускайте повторно всю стопку уведомлений одновременно. Изменяйте или удаляйте только те уведомления, которые были действительно изменены. Это позволяет избежать задержки при обновлении носимого устройства и снижает влияние вашего приложения на срок службы батареи.
Рекомендации по проектированию
Уведомления Wear OS имеют свои собственные рекомендации по дизайну. Для получения дополнительной информации ознакомьтесь с рекомендациями по проектированию Wear OS .