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:
- La versión más reciente de los Servicios de Google Play
- Un dispositivo con Wear OS o un emulador con Wear OS
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.2.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. ConChannelClient
, 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 objetosDataItem
.ChannelClient
ahorra espacio en el disco en comparación conDataClient
, 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.
- 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
- Cómo sincronizar datos
- Un
DataClient
expone una API para que los componentes lean o escriban en unDataItem
oAsset
. - 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 delWearableListenerService
; 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 deWearableListenerService
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 | Sí | No | Sí |
Puede enviar mensajes a nodos que no están conectados actualmente. | Sí | 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:
- Intercambiar datos directamente cuando hay una conexión Bluetooth establecida entre el reloj y otro dispositivo
- Intercambiar datos por una red disponible, como LTE o Wi-Fi
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.