Wear OS 6 presenta una nueva API, Watch Face Push, que crea oportunidades para casos de uso de publicación de caras de reloj más avanzados.
Identifica cuándo usar Watch Face Push
Watch Face Push es una API en Wear OS que permite al desarrollador agregar, actualizar o quitar caras de reloj directamente. No es necesario para el desarrollo estándar de fondos de pantalla.
Las caras de reloj que se usan con Watch Face Push deben escribirse con el Formato de Caras de Relojes. Esto puede incluir caras de reloj diseñadas con Watch Face Studio o cualquier otra herramienta que produzca caras de reloj que usen el Formato de Caras de Relojes.
Si bien la API de Watch Face Push se puede usar de varias maneras, la siguiente tabla debe usarse como guía para los casos de uso principales:
Caso de uso | Solución recomendada | Complejidad |
---|---|---|
Quiero crear caras de reloj individuales y publicarlas. | Usa el Formato de Caras de Relojes, ya sea directamente o a través de una herramienta como Watch Face Studio, y publícalas en Google Play. | Bajo |
Quiero crear una app para teléfonos que permita a los usuarios seleccionar caras de reloj de una colección seleccionada, o bien diseñar y personalizar caras de reloj para instalarlas directamente en su reloj Wear OS. | Crea una app para el reloj y el teléfono con la API de Watch Face Push en el reloj. | Alta |
Propósito
El caso de uso canónico de la API de Watch Face Push es la creación de una app de mercado. Desde esta app, los usuarios pueden seleccionar caras de reloj de una colección seleccionada en su teléfono y controlar directamente la instalación de estas caras de reloj en su reloj conectado.
Consideraciones
Para obtener detalles sobre cómo compilar tus caras de reloj, consulta la guía del Formato de Caras de Relojes: Las caras de reloj implementadas con Watch Face Push son caras de reloj normales del Formato de Caras de Relojes.
Cuando crees tu carátula, ten en cuenta las siguientes consideraciones.
Nombres de los paquetes
Las caras de reloj instaladas con Watch Face Push deben cumplir con la siguiente convención:
<app name>.watchfacepush.<watchface name>
… donde <app name>
es el nombre del paquete de la app que llama a la API de Watch Face Push.
Por ejemplo, para una app con el nombre de paquete com.example.mymarketplace
, los siguientes son nombres de paquete de caras de reloj válidos:
com.example.mymarketplace.watchfacepush.watchface1
com.example.mymarketplace.watchfacepush.watchface2
com.example.mymarketplace.watchfacepush.another_watchface
La API rechaza las caras de reloj que no cumplen con esta convención.
Contenido del paquete
El contenido del APK se aplica de forma estricta. Se debe tener cuidado para garantizar que el formato de cara de reloj cumpla con las siguientes restricciones: Es técnicamente posible producir APKs de formato de cara de reloj que contengan archivos de metadatos inocuos y otros artefactos, que podrían ser aceptables para Google Play, pero no pasar la validación de Watch Face Push (consulta a continuación).
En cada APK de cara de reloj, solo se aceptan los siguientes archivos o rutas de acceso:
/AndroidManifest.xml
/resources.arsc
/res/**
/META-INF/**
Además, solo se permiten las siguientes etiquetas en el archivo AndroidManifest.xml
:
<manifest>
<uses-feature>
<uses-sdk>
<application>
<property>
<meta-data>
Por último, el paquete debe especificar un minSdk
de al menos 33
, y la etiqueta <application>
debe especificar el atributo android:hasCode="false"
.
Validación
A diferencia de lo que sucede con las caras de reloj normales que se distribuyen a través de Google Play, la app de Marketplace es responsable de realizar las verificaciones de Watch Face Push para garantizar que cada cara de reloj esté bien formada y tenga un buen rendimiento.
Google Play usa las siguientes verificaciones de validación para comprobar la calidad de cada cara de reloj que usa Watch Face Push:
- Todas las caras de reloj instaladas o actualizadas a través de la API de Watch Face Push deben pasar la herramienta de validación de Watch Face Push.
- Solo se puede usar la herramienta de validación oficial para generar tokens de validación que se puedan usar con la API.
- La herramienta de validación que se use debe estar actualizada en el momento de ejecutar la validación.
No es necesario volver a validar un APK que no haya cambiado. Los tokens no vencen, incluso cuando se reemplaza la versión de la herramienta de validación que se usa.
Al mismo tiempo, te recomendamos que vuelvas a ejecutar la validación de vez en cuando, ya que el validador se actualiza periódicamente.
Ejecuta el validador
El validador está disponible en tres formatos:
- Una herramienta de CLI
- Una biblioteca para usar con la JVM
- Biblioteca para usar en Android
Uso del validador de línea de comandos
- Obtén el validador del repositorio Maven de Google.
Ejecuta la herramienta de la siguiente manera:
java -jar validator-push-cli-1.0.0-alpha06.jar \ --apk_path=<your watch face>.apk \ --package_name=<your marketplace package name>
Si la operación se realiza correctamente, el resultado incluye un token de validación, que debes proporcionar a la API de Watch Face Push cuando agregues o actualices una cara de reloj.
Si se produce un error, el resultado incluye detalles sobre qué verificación en particular falló.
Uso del validador de bibliotecas
Incluye el repositorio de Jitpack, que se requiere para la dependencia del validador:
repositories { ... google() maven { url = uri("https://jitpack.io") content { includeGroup("com.github.xgouchet") } } }
Incluye la dependencia del validador en tu proyecto:
// For use on JVM implementation("com.google.android.wearable.watchface.validator:1.0.0-alpha06") // For use on Android implementation("com.google.android.wearable.watchface.validator-android:1.0.0-alpha06")
Ejecuta el validador:
val validator = DwfValidatorFactory.create() val result = validator.validate(watchFaceFile, appPackageName) if (result.failures().isEmpty()) { val token = result.validationToken() println("Validation token: $token") // Validation success - continue with the token // ... } else { // There were failures, handle them accordingly - validation has failed. result.failures().forEach { failure -> println("FAILURE: ${failure.name()}: ${failure.failureMessage()}") // ... } }
Para ver un ejemplo del uso de esta biblioteca, consulta el ejemplo de GitHub. Consulta también la biblioteca del Portable Asset Compiler Kit (Pack), que es útil para compilar APKs en el dispositivo y usarlos con el validador basado en Android.
Tamaño del APK
Se debe tener especial cuidado con las caras de reloj de Watch Face Push para garantizar que el tamaño del APK se mantenga al mínimo: Es probable que el APK de la cara de reloj se transmita de la app para teléfonos a la app para relojes a través de Bluetooth, lo que puede ser lento.
Un APK demasiado grande podría tardar mucho tiempo en transmitirse, lo que genera una mala experiencia del usuario y consume la batería.
- Usa bibliotecas adecuadas, como
pngquant
, para mantener el tamaño de los archivos de imagen al mínimo.- Incluye esto en el proceso de compilación de la colección de caras de reloj
- Verifica que las dimensiones de la imagen sean adecuadas para la escala en la que se usará.
- Asegúrate de que las imágenes estén recortadas de forma adecuada para quitar el fondo circundante.
- Reduce el tamaño de los archivos de fuentes.
- Por ejemplo, si usas una fuente en particular solo para mostrar la hora, en el formato
HH:MM
, puedes usar una herramienta comopyftsubset
para limitar el archivo de fuente a solo los glifos necesarios. Esto puede reducir drásticamente el tamaño del archivo de fuente y el APK resultantes. Consulta esta entrada de blog para obtener detalles sobre cómo minimizar el tamaño del archivo de fuentes en otros casos.
- Por ejemplo, si usas una fuente en particular solo para mostrar la hora, en el formato
Consulta la guía para optimizar el uso de la memoria y obtener más sugerencias para mantener el tamaño del APK al mínimo.
Firma de APK
Como un APK normal, todas tus caras de reloj deben estar firmadas. Crea una clave diferente de la que usas con tu app principal y usa esa clave diferente para todas tus caras de reloj.
Arquitectura
Considera los tres componentes principales del sistema:
- Almacenamiento basado en la nube: En la app canónica de Marketplace, las carátulas del reloj se compilan y almacenan en la nube, listas para que las usen tus usuarios. Las caras de reloj son las siguientes:
- Se compilan previamente como APKs regulares del formato de caras de relojes
- Cada APK contiene solo una cara de reloj basada en el Formato de Caras de Relojes.
- Se validaron con el proceso de validación de Watch Face Push y se almacenan junto con el token de validación asociado.
- Está listo para que la app de Teléfono lo recupere cuando sea necesario.
- App para teléfonos: La app para teléfonos es la principal forma en que los usuarios interactúan con tu sistema. Les permite hacer lo siguiente:
- Cómo explorar y buscar en tu catálogo de caras de reloj
- Cómo instalar o reemplazar una cara de reloj en el reloj
- App para reloj: Por lo general, la app para reloj no tiene una interfaz de usuario significativa. Principalmente, es un puente entre la app para teléfonos y las APIs de Watch Face Push, con la siguiente funcionalidad:
- Usa la API de Watch Face Push para instalar, actualizar o reemplazar caras de reloj
- Cómo solicitar los permisos necesarios y mostrarle un mensaje al usuario
- Cómo proporcionar una cara de reloj predeterminada
- Proporcionar una caché mínima de caras de reloj
- Comunicaciones entre el teléfono y el reloj: La comunicación entre la app para teléfonos y la app para relojes es fundamental para el éxito de la experiencia general. Usa las APIs de la capa de datos de Wear OS, que permiten lo siguiente:
- Detección de instalación: Con las capacidades y
CapabilityClient
, la app para teléfonos puede detectar la ausencia de la app de reloj y viceversa. Esto puede ir seguido del lanzamiento de un intent a Play Store para instalar el factor de forma faltante. - Administración de estados: Con
DataClient
oMessageClient
, el teléfono puede mantenerse sincronizado con el estado del reloj, por ejemplo, para garantizar que el teléfono sepa qué cara de reloj está configurada. - Transmisión de APK: Con
ChannelClient
oMessageClient
, se pueden enviar APKs del teléfono al reloj. - Invocación remota: Con
Messageclient
, el teléfono puede indicarle al reloj que llame a la API de Watch Face Push, por ejemplo, para instalar una cara de reloj.
- Detección de instalación: Con las capacidades y
Consulta la guía de la API de Data Layer para obtener más detalles.