Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Modo puente para notificaciones en Wear

De forma predeterminada, las notificaciones se comparten desde la app de un teléfono complementario al reloj sincronizado. Si compilas una app independiente para relojes y tienes una app para teléfonos complementaria, estas podrían duplicar las notificaciones. Wear OS by Google incluye funciones para solucionar este problema de notificaciones duplicadas.

Consulta los siguientes recursos relacionados:

Nota: Puedes usar Firebase Cloud Messaging (FCM) para enviar alertas de notificaciones a los dispositivos. Consulta Cómo captar usuarios en Android, iOS y Chrome.

Los desarrolladores pueden cambiar el comportamiento de las notificaciones con uno o más de los siguientes procedimientos:

  • Especificar una configuración de modo puente en el archivo de manifiesto
  • Especificar una configuración de modo puente en el entorno de ejecución
  • Establecer un ID de cancelación para que las cancelaciones de notificaciones se sincronicen entre dispositivos

Cómo especificar una configuración de modo puente en el archivo de manifiesto

En el archivo de manifiesto de Android de una app, se puede indicar que las notificaciones de la app para teléfonos correspondiente no se deben compartir con el reloj. Específicamente, para evitar que las notificaciones se compartan desde una app para teléfonos, puedes usar una entrada <meta-data> en el archivo de manifiesto de la app para relojes (p. ej., la app para relojes independiente) de la siguiente manera:

    com.google.android.wearable.notificationBridgeMode
    

Agrega esa entrada <meta-data> como elemento secundario del elemento <application>. Define NO_BRIDGING en esa entrada para evitar el modo puente:

    <application>
    ...
      <meta-data
        android:name="com.google.android.wearable.notificationBridgeMode"
        android:value="NO_BRIDGING" />
    ...
    </application>
    

Se aplica el comportamiento predeterminado del modo puente si no incluyes la entrada <meta-data> o si especificas un valor de BRIDGING en lugar de NO_BRIDGING.

Se implementa la configuración del modo puente que se define en el manifiesto apenas se instala una app para relojes.

Cómo especificar una configuración de modo puente en el entorno de ejecución

Puedes usar la función del modo puente para especificar una configuración de este modo en el entorno de ejecución. Específicamente, usas la clase BridgingManager.

Puedes establecer un modo puente y, de manera opcional, definir etiquetas para notificaciones exentas del modo puente usando un objeto BridgingManager. Específicamente, crea un objeto BridgingConfig y configúralo como se muestra en esta sección.

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.

Cómo inhabilitar el modo puente para todas las notificaciones

Puedes inhabilitar el modo puente para todas las notificaciones de la siguiente manera:

Kotlin

    BridgingManager.fromContext(context).setConfig(
            BridgingConfig.Builder(context, false).build()
    )
    

Java

    BridgingManager.fromContext(context).setConfig(
      new BridgingConfig.Builder(context, false)
        .build());
    

Si la configuración anterior no se estableció, el modo puente se define en "true" de manera predeterminada.

Notificaciones exentas que están etiquetadas

Puedes inhabilitar el modo puente para todas las notificaciones, excepto aquellas que tienen determinadas etiquetas.

Por ejemplo, puedes inhabilitar el modo puente para todas las notificaciones, excepto las etiquetadas como foo, bar o baz.

Kotlin

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

Java

    BridgingManager.fromContext(context).setConfig(
      new BridgingConfig.Builder(context, false)
        .addExcludedTags(Arrays.asList("foo", "bar", "baz"))
        .build());
    

También, por ejemplo, puedes excluir notificaciones con etiquetas específicas (como foo o bar):

Kotlin

    BridgingManager.fromContext(context).setConfig(
            BridgingConfig.Builder(context, false)
                    .addExcludedTag("foo")
                    .addExcludedTag("bar")
                    .build()
    )
    

Java

    BridgingManager.fromContext(context).setConfig(
      new BridgingConfig.Builder(context, false)
        .addExcludedTag("foo")
        .addExcludedTag("bar")
        .build());
    

Cómo establecer una etiqueta de modo puente

Se puede establecer una etiqueta de modo puente en una notificación usando el método setBridgeTag(String) de la siguiente manera:

Kotlin

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

Java

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

Cómo evitar el modo puente en una app existente

En una app existente, es posible que ya hayas inhabilitado el modo puente para casos en los que un teléfono no está conectado cuando se recibe una alerta. En esa situación, es posible que igual quieras descartar la notificación en otros dispositivos cuando se descarta en una app para relojes.

Una forma de evitar el modo puente es con la clase Notification.Builder; especifica true en el método setLocalOnly.

Sin embargo, esta manera de evitar el modo puente podría no ser la mejor. Por ejemplo, si un usuario instala una app para teléfonos, pero no la app para relojes correspondiente, el método setLocalOnly podría evitar que se compartan notificaciones útiles. Por otra parte, quizás los usuarios tengan varios relojes sincronizados pero no hayan instalado la app para relojes en todos ellos.

Cómo usar un ID de cancelación para sincronizar las cancelaciones de notificaciones

Si evitas que se compartan notificaciones con la función de modo puente, las cancelaciones de notificaciones no se sincronizan en los dispositivos de un usuario. No obstante, los siguientes métodos de la clase NotificationCompat.WearableExtender te permiten usar los ID de cancelación:

Kotlin

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

Java

    public WearableExtender setDismissalId(String dismissalId)
    public String getDismissalId()
    

Para habilitar la sincronización de una cancelación, usa el método setDismissalId(). Para cada notificación, pasa un ID único general, como una string, cuando llames al método setDismissalId(). Cuando se cancela la notificación, las demás notificaciones con el mismo ID de cancelación también se cancelan en los relojes y en el teléfono vinculado. 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 general para una nueva notificación:

Kotlin

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

Java

    NotificationCompat.WearableExtender wearableExtender =
      new NotificationCompat.WearableExtender().setDismissalId("abc123");
    Notification notification = new NotificationCompat.Builder(context)
    // ... set other fields ...
      .extend(wearableExtender)
      .build();
    

Los ID de cancelación funcionan si un reloj está sincronizado con un teléfono Android, pero no si está sincronizado con un iPhone.

Prácticas recomendadas para las notificaciones compartidas

Lleva tiempo enviar las notificaciones compartidas a un dispositivo wearable o quitarlas de él. Cuando diseñes tus notificaciones, asegúrate de evitar comportamientos imprevistos causados por esta latencia. En los siguientes lineamientos, encontrarás ayuda para verificar 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, un usuario podría enviar uno de los intents pendientes en esa notificación. Por tal motivo, tu app debe estar preparada para recibir intents pendientes de notificaciones que haya cancelado. Entonces, al cancelar notificaciones, debes asegurarte de mantener la validez de los receptores de los intents pendientes de las notificaciones.
  • No canceles y 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 móvil y 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 la página de Material Design.

  • Todas las notificaciones compartidas desde el teléfono sincronizado al dispositivo para Wear usan notificaciones expandidas.
  • Para saber cuándo usar las diferentes plantillas de notificaciones admitidas en Wear OS, lee la guía de diseño sobre patrones de notificaciones.
  • Para obtener información sobre cómo agregar estilo a tus notificaciones de Wear, lee la guía de diseño sobre estilo de notificaciones.
  • Si tienes una app de mensajes de chat, tus notificaciones deben usar NotificationCompat.MessagingStyle. Wear usa los mensajes de chat incluidos en una notificación de MessagingStyle (consulta addMessage()) para ofrecer una experiencia de chat enriquecida en la notificación expandida.
  • Agrega una acción intercalada (setHintDisplayActionInline(true)) dentro del flujo de notificaciones para incluir una acción principal que el usuario pueda hacer rápidamente en una notificación. Algunos ejemplos de casos prácticos relevantes para una acción intercalada dentro de un flujo de notificaciones son responder un mensaje de texto, detener una actividad de entrenamiento y archivar un mensaje de correo electrónico.
  • Habilita Respuesta inteligente (setAllowGeneratedReplies(true)) para tus notificaciones de MessagingStyle.