Por padrão, o sistema transmite em ponte, ou compartilha, notificações de um aplicativo para telefones para todos os smartwatches pareados. Se você criar um app para smartwatch e ele também existir em um smartphone pareado, os usuários poderão receber notificações duplicadas: uma gerada e transmitida em ponte pelo aplicativo para telefones e outra gerada pelo app para smartwatch. O Wear OS inclui recursos para controlar como e quando as notificações são conectadas em ponte.
Evitar notificações duplicadas
Quando você cria notificações de uma fonte externa, como o Firebase Cloud Messaging, tanto o aplicativo para telefones quanto o app para smartwatch podem mostrar notificações no relógio. Para evitar duplicação, desative a ponte de forma programática no app para smartwatch.
Usar tags de ponte
Para transmitir em ponte algumas das notificações criadas pelo aplicativo para telefones ao relógio quando o app para smartwatch estiver instalado, defina tags de ponte.
Defina uma tag de ponte em uma notificação usando o método
setBridgeTag(String)
conforme mostrado no exemplo de código a seguir:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setBridgeTag("tagOne") ) .build()
Desativar a ponte
É possível desativar a ponte para algumas ou todas as notificações. Recomendamos que você desative a ponte seletivamente.
Desativar a ponte para apenas algumas notificações
Você pode desativar dinamicamente a ponte e, se quiser, permitir algumas notificações
com base na tag delas. Por exemplo, se quiser desativar a ponte para todas as
notificações, exceto aquelas marcadas como tagOne, tagTwo ou tagThree, use o objeto
BridgingConfig
conforme mostrado no exemplo a seguir:
// 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() )
Desativar a ponte para todas as notificações (não recomendado)
Para evitar a ponte em todas as notificações de um aplicativo para telefones, use a
entrada <meta-data> no arquivo de manifesto do app para smartwatch, conforme mostrado no
exemplo a seguir:
<!-- 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" />
Definir um ID de dispensa para sincronizar notificações semelhantes
Se você impedir a ponte com o recurso modo bridge, as dispensas de notificações não serão sincronizadas nos dispositivos do usuário.
No entanto, se notificações semelhantes forem criadas no smartphone e no relógio, será necessário dispensar as duas se o usuário dispensar uma delas.
Na classe
NotificationCompat.WearableExtender,
você pode definir um ID exclusivo global para que, quando um usuário dispensar uma notificação,
outras notificações com o mesmo ID em relógios pareados também sejam dispensadas.
A classe NotificationCompat.WearableExtender tem métodos que permitem usar
IDs de dispensa, conforme mostrado no exemplo a seguir:
Quando o usuário dispensa a notificação, todas as outras com o mesmo
ID de dispensa são dispensadas no smartwatch e no smartphone. Para recuperar um ID de dispensa, use getDismissalId().
No exemplo a seguir, um ID globalmente exclusivo é especificado para uma nova notificação. Portanto, as dispensas são sincronizadas:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setDismissalId("abc123") ) .build()
Notificações somente locais
Para evitar notificações duplicadas, use setLocalOnly() para
tornar as notificações locais no smartphone.
No entanto, use esse método apenas se a notificação precisar aparecer somente no dispositivo que a criou. Isso inclui não apenas dispositivos Wear OS, mas também outros wearables e dispositivos conectados. Uma notificação somente local não faz ponte, mesmo que o app não esteja instalado no relógio.
Ao criar um app para Wear OS e um aplicativo para telefones que geram notificações, não use essa abordagem para evitar notificações duplicadas. Em vez disso, use as opções de ponte.
Por exemplo, use uma notificação somente local quando um usuário baixar um arquivo em um smartphone e a notificação indicar que o download foi concluído.
Quando as notificações não são transmitidas em ponte
O sistema não transmite em ponte os seguintes tipos de notificações:
- Somente locais e definidas usando
Notification.Builder.setLocalOnly(boolean). - Contínuas e definidas usando
Notification.Builder.setOngoing(boolean)ouNotification.FLAG_ONGOING_EVENT. - Não removíveis e definidas usando
Notification.FLAG_NO_CLEAR. - Notificações em que o app para wearables contraparte está com a ponte de notificação desativada.
Considerações de implementação para notificações em ponte
Leva tempo para enviar ou remover notificações em ponte de um dispositivo wearable. Ao projetar suas notificações, evite comportamentos inesperados causados por essa latência. As diretrizes a seguir ajudam a garantir que suas notificações em ponte funcionem com as assíncronas:
- Se você cancelar uma notificação no smartphone, talvez leve algum tempo para que ela seja cancelada no relógio. Durante esse período, o usuário pode enviar uma das intents pendentes nessa notificação. Por isso, continue recebendo intents pendentes no app de notificações canceladas. Ao cancelar notificações, mantenha os receptores de intents pendentes dessas notificações válidos.
- Não cancele e acione novamente uma pilha inteira de notificações de uma só vez. Só modifique ou remova as notificações que realmente tiverem sido modificadas. Isso evita a latência na atualização do dispositivo wearable e reduz o impacto do app sobre a duração da bateria.
Considerações sobre o design
As notificações do Wear OS têm as próprias diretrizes de design. Para mais informações, consulte as Diretrizes de design do Wear OS.