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
Push de caras de reloj es una API en Wear OS que permite al desarrollador agregar, actualizar o quitar caras de reloj directamente. No es necesario para el desarrollo de caras de reloj estándar.
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 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 crear 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 la compilación de tus caras de reloj, consulta la guía del Formato de Caras de Relojes: Las caras de reloj implementadas con el envío de caras de reloj son caras de reloj normales del Formato de Caras de Relojes.
Cuando crees tu cara de reloj, ten en cuenta las siguientes consideraciones.
Nombres de los paquetes
Las caras de reloj instaladas con el envío de caras de reloj 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 Push de Caras de Relojes.
Por ejemplo, para una app con el nombre de paquete com.example.mymarketplace
, los siguientes son nombres de paquetes 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 Caras de Relojes cumpla con las siguientes restricciones: Técnicamente, es posible producir APKs de Formato de Caras de Relojes que contengan archivos de metadatos inocuos y otros artefactos, que podrían ser aceptables para Google Play, pero que no pasan la validación de Push de Caras de Relojes (consulta a continuación).
Solo se aceptan los siguientes archivos o rutas de acceso en cada APK de cara de reloj:
/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 las caras de reloj normales que se distribuyen a través de Google Play, las verificaciones de Push de Caras de Relojes para garantizar que cada una tenga el formato correcto y un buen rendimiento son responsabilidad de la app de mercado.
Google Play usa las siguientes verificaciones de validación para verificar la calidad de cada cara de reloj que usa la función Push de caras de reloj:
- 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 usen con la API.
- La herramienta de validación que se usa debe estar actualizada al 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 como herramienta de CLI o como biblioteca.
Uso del validador de línea de comandos
- Obtén el validador del repositorio de Maven de Google.
Ejecuta la herramienta de la siguiente manera:
java -jar validator-push-cli-1.0.0-alpha03.jar \ --apk_path=<your watch face>.apk \ --package_name=<your marketplace package name>
Si 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 es necesario para la dependencia del validador:
repositories { ... maven { url = uri("https://jitpack.io") content { includeGroup("com.github.xgouchet") } } }
Incluye la dependencia del validador en tu proyecto:
// Check for the latest version implementation("com.google.android.wearable.watchface.validator:1.0.0-alpha03")
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.
Tamaño del APK
Se debe tener especial cuidado con las caras de reloj de Push para garantizar que el tamaño del APK sea mínimo: es probable que el APK de la cara de reloj se transmita de la app del teléfono a la app del reloj a través de Bluetooth, lo que puede ser lento.
Un APK demasiado grande podría tardar un tiempo considerable en transmitirse, lo que genera una experiencia del usuario deficiente y agota la batería.
- Usa bibliotecas adecuadas, como
pngquant
, para mantener los tamaños de los archivos de imagen al mínimo.- Inclúyela en el proceso de compilación de tu 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 se recorten de forma adecuada para quitar el fondo que las rodea.
- Reduce el tamaño de los archivos de fuente
- 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 para que solo contenga los glifos necesarios. Esto puede reducir de forma significativa el tamaño del archivo de fuente y el APK resultante. Consulta esta entrada de blog para obtener detalles sobre cómo minimizar el tamaño del archivo de fuente 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 memoria para obtener más sugerencias sobre cómo mantener el tamaño del APK en un mínimo.
Firma de APK
Al igual que un APK normal, todas tus caras de reloj deben estar firmadas. Crea una clave diferente a la que usas con tu app principal y úsala 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 caras de 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 de Formato de Caras de Relojes normales.
- Cada una contiene solo una cara de reloj basada en el Formato de Caras de Relojes.
- Se validaron con el proceso de validación de envío de caras de reloj y se almacenan junto con el token de validación asociado.
- Están listos para que la app de tu teléfono los recupere cuando sea necesario.
- App para teléfonos: La app para teléfonos es la forma principal en que los usuarios interactúan con tu sistema. Les permite hacer lo siguiente:
- Explora y busca en tu catálogo de caras de reloj
- Cómo instalar o reemplazar una cara de reloj en el reloj
- App de reloj: Por lo general, la app de reloj no tiene una interfaz de usuario significativa. Es principalmente un puente entre la app para teléfonos y las APIs de Watch Face Push, con la siguiente funcionalidad:
- Cómo usar la API de Watch Face Push para instalar, actualizar o reemplazar caras de reloj
- Solicita los permisos necesarios y solicita al usuario que los acepte
- Cómo proporcionar una cara de reloj predeterminada
- Proporciona una caché mínima de caras de reloj
- Comunicaciones entre el teléfono y el reloj: La comunicación entre el teléfono y la app del reloj 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 capabilities y
CapabilityClient
, la app para teléfonos puede detectar la ausencia de la app de reloj y viceversa. Luego, se puede iniciar un intent en Play Store para instalar el factor de forma faltante. - Administración de estados: Con
DataClient
oMessageClient
, el teléfono se puede mantener 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
, los APKs se pueden enviar del teléfono al reloj. - Invocación remota: Con
Messageclient
, el teléfono puede indicarle al reloj que llame a la API de Push de Caras de Relojes, por ejemplo, para instalar una cara de reloj.
- Detección de instalación: Con las capabilities y
Consulta la guía de la API de la capa de datos para obtener más detalles.