Opciones de modo puente para las notificaciones

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

De forma predeterminada, las notificaciones se comparten (modo puente) desde una app de un teléfono a cualquier reloj vinculado. Si compilas una app de reloj y esta también existe en un teléfono vinculado, es posible que los usuarios reciban notificaciones duplicadas, una generada por la app para teléfonos (una puente) y otra generada por la app de reloj. Wear OS incluye funciones para controlar cómo y cuándo se "combinan" las notificaciones.

Cómo evitar notificaciones duplicadas

Cuando creas notificaciones desde una fuente externa, como desde Firebase Cloud Messaging, tu 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, tu app para wearables debe inhabilitar el modo puente de manera programática.

1. En la app para dispositivos móviles, utiliza etiquetas de modo puente cuando corresponda

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.

Cómo establecer una etiqueta de modo puente

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

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

2. En la app para wearables, inhabilita el modo puente

Cómo inhabilitar el modo puente para algunas notificaciones

Puedes inhabilitar el modo puente de forma dinámica y, de manera opcional, permitir algunas notificaciones en función de su etiqueta. Por ejemplo, para inhabilitar el modo puente para todas las notificaciones, excepto las etiquetadas como foo, bar o baz, usa el objeto BridgingConfig como se muestra en esta sección.

BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, false)
        .addExcludedTags(listOf("foo", "bar", "baz"))
        .build()
)

Cómo inhabilitar el modo puente para todas las notificaciones

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>
...
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

Nota: Se implementa la configuración del modo puente que se define en el manifiesto apenas se instala una app de reloj. Esto puede provocar que se pierdan las notificaciones si el usuario necesita abrir y configurar la app para relojes antes de recibirlas.

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.

3. Establece un ID de cancelación para sincronizar notificaciones similares en Wear OS y dispositivos móviles

Si evitas que se compartan notificaciones con la función de modo puente, las cancelaciones de notificaciones no se sincronizan en todos los dispositivos del usuario.

Sin embargo, si se crean notificaciones similares tanto en el dispositivo móvil como en el reloj, es aconsejable que descartes ambas notificaciones si el usuario descarta alguna de ellas.

En el NotificationCompat.WearableExtender, puedes establecer un ID único global para que, cuando se 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 los IDs de cancelación, 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 global, como una string, cuando llames al método setDismissalId().

Cuando se descarta la notificación, las demás notificaciones con el mismo ID de cancelación también se descartan en los relojes y en el teléfono. Para recuperar un ID de cancelación, usa getDismissalId().

En el siguiente ejemplo, la sincronización de cancelaciones está habilitada porque se especifica un ID único global para una nueva notificación:

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

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

Cuando no se comparten las notificaciones

Las notificaciones no se comparten en los siguientes casos:

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. Con los siguientes lineamientos, te aseguras 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 ese tiempo, el usuario podría enviar uno de los intents pendientes en esa notificación. Por este motivo, tu app debería recibir intents pendientes de notificaciones que haya cancelado. Por lo tanto, cuando canceles notificaciones, asegúrate de que los receptores de intents pendientes de esas notificaciones sean válidos.
  • 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. De esta manera, se evita la latencia al actualizar el dispositivo wearable y se garantiza que tu app tenga un impacto mínimo 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 Lineamientos de diseño de Wear OS.