Opções de ponte para notificações

Por padrão, as notificações são transmitidas em ponte, ou compartilhadas, de um app no smartphone para todos os relógios pareados. Se você criar um app para smartwatch e ele também for instalado em um smartphone pareado, os usuários poderão receber notificações duplicadas: uma gerada e transmitida em ponte pelo app para smartphone e outra 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 seu app para dispositivos móveis quanto o para wearables podem mostrar notificações no relógio. Para evitar esse tipo de duplicação, desative a ponte de forma programática no app para wearables.

Usar tags de ponte

Se você quiser transmitir em ponte algumas das notificações criadas no app para dispositivos móveis ao relógio quando o app para wearables estiver instalado, defina tags de ponte.

Defina essa tag 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ê faça essa desativação de forma seletiva.

Desativar a ponte para 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:

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

Desativar a ponte para todas as notificações (não recomendado)

Observação: não é recomendável desativar a ponte para todas as notificações, porque a configuração de ponte definida no manifesto entra em vigor assim que um app para smartwatch é instalado. Isso pode levar à perda de notificações caso o usuário precise abrir e configurar o app para smartwatch antes de receber notificações.

Se quiser evitar a ponte em todas as notificações de um app para smartphone, use a entrada <meta-data> no arquivo de manifesto do app para smartwatch, conforme mostrado no exemplo a seguir:

<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>

Observação:especificar uma configuração de ponte durante a execução substitui configurações relacionadas a pontes no arquivo de manifesto do Android.

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 serão sincronizadas nos dispositivos do usuário.

No entanto, se notificações semelhantes forem criadas no dispositivo móvel 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 uma notificação for dispensada, outras com o mesmo ID em relógios pareados também sejam.

A classe NotificationCompat.WearableExtender tem métodos que permitem usar IDs de dispensa, conforme mostrado no exemplo a seguir:

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

Para sincronizar uma dispensa, use o método setDismissalId(). Para cada notificação, transmita um ID globalmente exclusivo, como uma string, quando você chamar o método setDismissalId().

Quando a notificação é dispensada, todas as outras notificações com o mesmo ID 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()

Observação:os IDs de dispensa funcionam quando um relógio está pareado com um smartphone Android, mas não com um iPhone.

Quando as notificações não são transmitidas em ponte

Os seguintes tipos de notificação não são transmitidos em ponte:

Práticas recomendadas 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 garantem 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 design

As notificações do Wear OS têm as próprias diretrizes de design. Para mais informações, leia as Diretrizes de design do Wear OS.