Cómo enviar y sincronizar datos en Wear OS

Con Wear OS by Google, un reloj tiene varias formas de enviar y sincronizar datos. Te recomendamos que envíes y sincronices datos directamente desde la red, ya que esto permite que la app se considere independiente.

Envía y sincroniza datos directamente desde la red

Compila apps para Wear OS para comunicarte directamente con la red. Puedes usar las mismas APIs que usas en el desarrollo para dispositivos móviles, pero ten en cuenta las diferencias específicas de Wear OS.

Envía y sincroniza datos con la API de Data Layer para wearables

La API de Wearable Data Layer, que forma parte de Servicios de Google Play, brinda un canal de comunicación opcional a las apps.

Esta API solo está disponible en relojes Wear OS y dispositivos Android vinculados. En el caso de los relojes con Wear OS vinculados con teléfonos iOS, las apps pueden consultar otras APIs basadas en la nube si hay conectividad a Internet disponible.

La API de Wearable Data Layer tiene las siguientes dependencias:

Incluye la siguiente dependencia en el archivo build.gradle de tu módulo de Wear:

  dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:18.1.0'
  }
  

Recomendamos que las apps para wearables envíen y sincronicen datos desde una red o un teléfono conectado. Sin embargo, si deseas comunicarte directamente entre dispositivos en un formato de tipo RPC o no puedes conectarte de forma directa a una red de datos, puedes usar la API de Wearable Data Layer de las siguientes maneras.

Anuncio y consulta de capacidades remotas
El elemento CapabilityClient proporciona información sobre los nodos de la red de Wear OS que admiten funciones personalizadas de la app. Los nodos representan los dispositivos móviles y wearables que están conectados a la red. Una capability es una función que una app define en el tiempo de compilación o que configura de forma dinámica durante el tiempo de ejecución.
Por ejemplo, una app para dispositivos móviles Android podría anunciar que admite el control remoto de la reproducción de videos. Cuando se instala la versión de esa app para wearables, esta puede usar la CapabilityClient para verificar si la versión para dispositivos móviles está instalada y si es compatible con esa función. Si es así, la app para wearables puede mostrar el botón de reproducción/pausa para controlar el video en el otro dispositivo mediante un mensaje.
Esto también puede funcionar en la dirección opuesta, con las capacidades de listado de apps para wearables que admite.
Envío de mensajes
MessageClient puede enviar mensajes y es útil para llamadas de procedimiento remoto (RPC), como controlar el reproductor multimedia de un dispositivo portátil desde el wearable o iniciar un intent en el wearable desde el dispositivo portátil. Los mensajes también son útiles para realizar solicitudes unidireccionales o para un modelo de comunicación de solicitud o respuesta.
Si el wearable y el dispositivo portátil están conectados, el sistema pone en cola el mensaje para su entrega y muestra un código de resultado exitoso. Si los dispositivos no están conectados, se mostrará un error. Un código de resultado exitoso no indica que el mensaje se entregó correctamente, ya que los dispositivos pueden desconectarse después de recibir el código de resultado.
Transferencia de datos
ChannelClient puede transferir datos de un dispositivo portátil a un wearable. Con ChannelClient, puedes hacer lo siguiente:
  • Transfiere archivos de datos entre dos o más dispositivos conectados si no hay Internet disponible sin la sincronización automática proporcionada cuando usas objetos Asset adjuntos a objetos DataItem. ChannelClient ahorra espacio en el disco en comparación con DataClient, que crea una copia de los recursos en el dispositivo local antes de sincronizarse con dispositivos conectados.
  • Puedes enviar de manera confiable un archivo demasiado grande como para enviarlo con un MessageClient.
  • Transfiere datos transmitidos, como datos de voz desde el micrófono.
Cómo sincronizar datos
Un DataClient expone una API para que los componentes lean o escriban en un DataItem o Asset.
Un DataItem se sincroniza en todos los dispositivos de una red de Wear OS. Es posible configurar elementos de datos mientras no tienes conexión a ningún nodo. Esos elementos de datos se sincronizan cuando los nodos están en línea.
Los elementos de datos son privados para la app que los creó y solo esa app puede acceder a ellos en otros nodos. Por lo general, son de tamaño pequeño. Usa Assets para transferir objetos de datos más grandes y persistentes, como imágenes.
Wear OS admite la conexión de varios wearables a un dispositivo de mano. Por ejemplo, cuando el usuario guarda una nota en un dispositivo portátil, esta aparece automáticamente en todos sus dispositivos Wear OS. Para ayudar a sincronizar los datos entre dispositivos, los servidores de Google alojan un nodo en la nube con la red de dispositivos. El sistema sincroniza los datos con los dispositivos conectados directamente, con el nodo en la nube y con los wearables conectados a ese nodo por Wi-Fi.

Advertencia: Los elementos se transfieren a todos los dispositivos Wear OS disponibles, incluidos aquellos que no tienen instalada tu app. Si sincronizas una gran cantidad de datos, procura comprobar si una app "receptora" está instalada y en línea para evitar desperdiciar recursos en dispositivos de mano y Wear OS.

Cómo escuchar eventos importantes de Data Layer (para servicios)
Extender WearableListenerService te permite escuchar eventos importantes de la capa de datos en un servicio. El sistema maneja el ciclo de vida del WearableListenerService; vincula al servicio cuando necesita enviar elementos de datos o mensajes y desvincula el servicio cuando no es necesario realizar tareas.
Cómo escuchar eventos importantes de Data Layer (para actividades en primer plano)
Implementar OnDataChangedListener en una actividad te permite escuchar eventos importantes de la capa de datos cuando la actividad está en primer plano. Si lo usas en lugar de WearableListenerService puedes escuchar cambios solo cuando el usuario usa activamente tu app.

Advertencia: Debido a que estas APIs están diseñadas para la comunicación entre dispositivos portátiles y wearables, son las únicas APIs que puedes usar para configurar la comunicación entre estos dispositivos. Por ejemplo, no intentes abrir sockets de bajo nivel para crear un canal de comunicación.

Comparación de clientes

En la siguiente tabla, se muestran los diferentes casos de uso y requisitos para cada cliente.

Cliente de datos Cliente de mensajes Cliente de canales
Tamaño de datos superior a 100 KB No
Puede enviar mensajes a nodos que no están conectados actualmente. No No
Patrón de comunicación Recurso compartido basado en la red Transmisión de mensajes 1:1 (con respuesta) Transmisión 1:1

Conectividad

Data Layer tiene dos opciones para la comunicación:

  1. Intercambiar datos directamente cuando hay una conexión Bluetooth establecida entre el reloj y otro dispositivo
  2. Intercambiar datos por una red disponible, como LTE o Wi-Fi
Figura 1: Ejemplo de red de nodos con dispositivos portátiles y wearables.

Todos los clientes de Data Layer pueden intercambiar datos a través de Bluetooth o la sincronización de Google Cloud, según las conexiones disponibles para los dispositivos. El servicio de sincronización de Cloud es el mecanismo de Google para la comunicación y el intercambio de datos entre wearables y teléfonos cuando el Bluetooth no está disponible.

Seguridad

Ambas opciones de comunicación, Bluetooth y el servicio de sincronización de Cloud, están encriptadas de extremo a extremo.

Los Servicios de Google Play aplican las siguientes restricciones para garantizar que la comunicación entre el teléfono y el reloj sea segura y de app a app:

  • El nombre del paquete debe coincidir en todos los dispositivos.
  • La firma del paquete debe coincidir en todos los dispositivos.

Bluetooth

Cuando los dispositivos se conectan a través de Bluetooth, Data Layer usa esta conexión. Cuando se usa Bluetooth, existe un solo canal encriptado entre los dispositivos que usa la encriptación estándar de Bluetooth, administrada por los Servicios de Google Play.

Nube

Supongamos que los datos transmitidos a través de Data Layer pueden, en algún momento, usar servidores propiedad de Google. Por ejemplo, DataClient, MessageClient o ChannelClient enrutan automáticamente a través de Google Cloud cuando el Bluetooth no está disponible. Todos los datos que se transfieren a través de Google Cloud están encriptados de extremo a extremo.

Generación de clave y almacenamiento

El teléfono genera claves de extremo a extremo para la comunicación basada en la nube, que se intercambian directamente con el reloj cuando los dos dispositivos están conectados a través de Bluetooth. Esto sucede durante la configuración del dispositivo. Los servidores de Google no reciben estas claves en ningún momento.

La comunicación a través de los servidores que son propiedad de Google no pueden ocurrir hasta que se complete la generación de la clave de extremo a extremo. Las claves se almacenan en el almacenamiento de archivos privados de los Servicios de Google Play en todos los dispositivos vinculados.

Copia de seguridad del dispositivo

No se crea una copia de seguridad de las claves, por lo que no salen del dispositivo. Si se requieren claves nuevas, como para un teléfono nuevo, el sistema genera claves nuevas y las comparte con los dispositivos que aún tiene el usuario.