Opciones para compartir las notificaciones en modo puente

De forma predeterminada, las notificaciones se comparten (o vinculan) desde una app de un teléfono 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 generada y compartido en modo puente por la app del teléfono y otra generada por la app de reloj. Wear OS incluye funciones que sirven 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 dispositivos móviles y la app para wearables pueden mostrar sus propias notificaciones en el reloj. Para evitar este tipo de duplicación, inhabilita de forma programática el modo puente en tu app para wearables.

Usa etiquetas de modo puente

Si quieres compartir algunas de las notificaciones creadas en tu app para dispositivos móviles con el reloj cuando la app para wearables se instale, 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.

Inhabilita el modo puente 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:

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

Inhabilita el modo puente para todas las notificaciones (no recomendado)

Nota: No se recomienda inhabilitar el modo puente para todas las notificaciones, ya que la configuración del modo puente que se define en el manifiesto se implementa apenas se instala la app de reloj. Esto puede hacer que se pierdan las notificaciones si el usuario necesita abrir y configurar la app de reloj antes de recibirlas.

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:

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

Nota: Cuando especificas una configuración de modo puente en el entorno de ejecución, se anula un parámetro relacionado con este modo en el archivo de manifiesto de Android.

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 dispositivo móvil y el reloj, es recomendable que ambas se descarten cuando el usuario descarte una de ellas.

Puedes establecer un ID único general en la clase NotificationCompat.WearableExtender para que, cuando se descarte una notificación, también se descarten otras con el mismo ID en relojes vinculados.

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

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

Para sincronizar un descarte, usa el método setDismissalId(). Para cada notificación, pasa un ID único general como una cadena, cuando llames al método setDismissalId().

Cuando se 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 sincroniza el descarte:

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

Nota: Los IDs de descarte funcionan si el reloj está vinculado con un teléfono Android, pero no si está vinculado con un iPhone.

Cuándo no se comparten las notificaciones en modo puente

Los siguientes tipos de notificaciones no se comparten en modo puente:

Prácticas recomendadas para las notificaciones compartidas

Lleva tiempo enviar o quitar notificaciones compartidas desde un dispositivo wearable. Cuando diseñes tus notificaciones, asegúrate de evitar 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 lo que es recomendable que continúes recibiendo en la app los intents pendientes de las notificaciones que se cancelaron: cuando se cancelen las notificaciones, mantén válidos sus receptores de intent.
  • 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 de 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.