Opciones para compartir las notificaciones en modo puente

De forma predeterminada, el sistema vincula, o comparte, las notificaciones de una app para teléfonos a cualquier reloj vinculado. Si compilas una app de reloj que también existe en un teléfono vinculado, es posible que los usuarios reciban notificaciones duplicadas: una que genera y comparte en modo puente la app para teléfonos y otra que genera la app de reloj. Wear OS incluye funciones para controlar cómo y cuándo se comparten las notificaciones en modo puente.

Cómo evitar notificaciones duplicadas

Cuando creas notificaciones desde una fuente externa, como Firebase Cloud Messaging, la app para teléfonos y la app para relojes pueden mostrar sus propias notificaciones en el reloj. Para evitar la duplicación, inhabilita el modo puente de forma programática en tu app para relojes.

Usa etiquetas de modo puente

Para compartir algunas de las notificaciones que crea tu app para teléfonos con el reloj cuando se instala tu app para relojes, configura etiquetas de modo puente.

Usa el método setBridgeTag(String) para establecer una etiqueta de modo puente en una notificación, como se indica en la siguiente muestra de código:

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

Inhabilita el modo puente

Puedes inhabilitar el modo puente para algunas notificaciones o para todas ellas. Te recomendamos que lo hagas de manera selectiva.

Cómo inhabilitar el modo puente solo para algunas notificaciones

Puedes inhabilitar el modo puente de forma dinámica y, opcionalmente, permitir algunas notificaciones según la etiqueta que tengan. Por ejemplo, para inhabilitar el modo puente para todas las notificaciones, excepto las etiquetadas como tagOne, tagTwo o tagThree, usa el objeto BridgingConfig, como se muestra en el siguiente ejemplo:

// 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()
)

Cómo inhabilitar el modo puente para todas las notificaciones (no recomendado)

Para evitar que todas las notificaciones se compartan desde una app para teléfonos, usa la entrada <meta-data> en el archivo de manifiesto de la app de reloj, como se muestra en el siguiente ejemplo:

<!-- 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" />

Establece un ID de descarte para sincronizar notificaciones similares

Si evitas que se compartan notificaciones con la función de modo puente, el descarte de notificaciones no se sincronizará en todos los dispositivos del usuario.

Sin embargo, si se crean notificaciones similares en el teléfono y el reloj, es recomendable que ambas se descarten cuando el usuario descarte una de ellas.

En NotificationCompat.WearableExtender, puedes establecer un ID único global para que, cuando un usuario descarte una notificación, también se descarten otras notificaciones con el mismo ID en los relojes vinculados.

La clase NotificationCompat.WearableExtender tiene métodos que te permiten usar IDs de descarte, como se muestra en el siguiente ejemplo:

Cuando el usuario descarta la notificación, también se descartan todas las que tengan el mismo ID de descarte en el reloj y el teléfono. Para recuperar un ID de descarte, usa getDismissalId().

En el siguiente ejemplo, se especifica un ID único general para una notificación nueva, por lo que se sincronizan los descartes:

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

Notificaciones solo locales

Para evitar notificaciones duplicadas, también puedes usar setLocalOnly() para que las notificaciones sean locales en el teléfono.

Sin embargo, usa este método solo si la notificación debe aparecer solo en el dispositivo que la creó. Esto incluye no solo los dispositivos Wear OS, sino también otros wearables y cualquier otro dispositivo conectado. Una notificación solo local no se transfiere, incluso si tu app no está instalada en el reloj.

Cuando compiles una app para Wear OS y teléfonos que cree notificaciones, no uses este enfoque para evitar notificaciones duplicadas. En su lugar, usa las opciones de puente.

Por ejemplo, usa una notificación solo local cuando un usuario descarga un archivo en un teléfono y la notificación indica que se completó la descarga.

Cuándo no se comparten las notificaciones en modo puente

El sistema no comparte en modo puente los siguientes tipos de notificaciones:

Consideraciones sobre la implementación de notificaciones compartidas

Lleva tiempo enviar o quitar notificaciones compartidas desde un dispositivo wearable. Cuando diseñes tus notificaciones, evita comportamientos imprevistos causados por esta latencia. Los siguientes lineamientos te ayudarán a asegurarte de que tus notificaciones compartidas funcionen con las notificaciones asíncronas:

  • Si cancelas una notificación en el teléfono, la notificación correspondiente en el reloj podría tardar un tiempo en cancelarse. Durante este tiempo, el usuario podría enviar uno de los intents pendientes en esa notificación. Por este motivo, continúa recibiendo intents pendientes en tu app de las notificaciones que canceló: cuando canceles notificaciones, mantén válidos los receptores de intents pendientes de esas notificaciones.
  • No canceles ni vuelvas a activar una pila completa de notificaciones al mismo tiempo. Solo cambia o quita las notificaciones que realmente se hayan modificado. Esto evita la latencia durante la actualización del dispositivo wearable y reduce el impacto de la app en la duración de batería.

Consideraciones del diseño

Las notificaciones de Wear OS tienen sus propios lineamientos de diseño. Para obtener más información, consulta los Lineamientos de diseño de Wear OS.