Primeros pasos
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-watch`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/watch/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Instalación
Sección titulada “Instalación”Puedes usar nuestro setup asistido por IA para instalar el plugin. Añade las skills de Capgo a tu herramienta de IA con el siguiente comando:
bunx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsLuego usa el siguiente prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-watch` plugin in my project.Si prefieres la configuración manual, instala el plugin ejecutando estos comandos y sigue las instrucciones de cada plataforma:
-
Instala el paquete
Ventana de terminal bun add @capgo/capacitor-watch -
Sincroniza con proyectos nativos
Ventana de terminal bunx cap sync -
Configura el plugin
Ejemplo de uso básico:
import { CapgoWatch } from '@capgo/capacitor-watch';// Check watch connectivity statusconst info = await CapgoWatch.getInfo();console.log('Watch paired:', info.isPaired);console.log('Watch reachable:', info.isReachable);// Listen for messages from watchawait CapgoWatch.addListener('messageReceived', (event) => {console.log('Message from watch:', event.message);});Enviar un mensaje a Watch:
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Configuración necesaria en iOS:
- Añade la capacidad WatchConnectivity a tu app de iOS en Xcode
- Crea un target de app watchOS en tu proyecto de Xcode
- Implementa WatchConnectivity en tu app de watchOS (ver Implementación de la app del reloj abajo)
El plugin activa automáticamente la WCSession al cargarse.
Configuración necesaria para Wear OS:
- Añade una Módulo Wear OS a tu proyecto de Android (el mismo
applicationIdy la misma firma que la app del teléfono). - Declara la
capgo_watchcapacidad en el módulo wear (ver Crear una app para Wear OS). - Implementa listeners de Data Layer en el reloj usando las rutas del plugin (
/capgo/message,/capgo/context, y otros).
El plugin de teléfono registra listeners de API para Wearables al cargar. Usa
getInfo()para verificar los nodos conectados y si se detecta la app del reloj.Pasos completos: Crear una app para Wear OS.
-
Gestionar mensajes que requieren respuesta
// Listen for messages that need a responseawait CapgoWatch.addListener('messageReceivedWithReply', async (event) => {console.log('Request from watch:', event.message);// Process the requestconst result = await processWatchRequest(event.message);// Send reply back to watch (include requestId for Wear OS correlation)await CapgoWatch.replyToMessage({callbackId: event.callbackId,data: {requestId: event.message.requestId,result,},});}); -
Sincronizar el estado de la aplicación
// Update application context (latest value only)await CapgoWatch.updateApplicationContext({context: {theme: 'dark',userId: '123',lastSync: Date.now()}});// Listen for context updates from watchawait CapgoWatch.addListener('applicationContextReceived', (event) => {console.log('Context from watch:', event.context);}); -
Transferir info de usuario de forma fiable
// Queue data for reliable delivery (even when watch is offline)await CapgoWatch.transferUserInfo({userInfo: {recordId: '456',action: 'created',data: { name: 'Item 1' }}});// Listen for user info transfersawait CapgoWatch.addListener('userInfoReceived', (event) => {console.log('User info from watch:', event.userInfo);}); -
Monitorear la conectividad
// Track reachability changesawait CapgoWatch.addListener('reachabilityChanged', (event) => {console.log('Watch reachable:', event.isReachable);if (event.isReachable) {// Watch is now available for interactive messaging}});// Track session activation stateawait CapgoWatch.addListener('activationStateChanged', (event) => {// 0 = notActivated, 1 = inactive, 2 = activatedconsole.log('Session state:', event.state);});
Inicio rápido
Sección titulada “Inicio rápido”import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.sendMessage({ data: { action: 'refresh', timestamp: Date.now() }});Ejemplo: updateApplicationContext
Sección titulada “Ejemplo: updateApplicationContext”import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.updateApplicationContext({ context: { theme: 'dark', lastSync: Date.now() }});Ejemplo: transferUserInfo
Sección titulada “Ejemplo: transferUserInfo”import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.transferUserInfo({ userInfo: { recordId: '123', action: 'created' }});Errores comunes
Sección titulada “Errores comunes”- Listeners: elimina los handles cuando se desmonten las pantallas.
- Sync nativo: ejecuta
bunx cap synctras actualizar los plugins. - Fuente de verdad: confianza
src/definitions.tsen el repo de GitHub.
Implementación de la Watch App
Sección titulada “Implementación de la Watch App”Tu app de watchOS debe implementar WatchConnectivity. Aquí tienes un ejemplo en SwiftUI:
import SwiftUIimport WatchConnectivity
@mainstruct MyWatchApp: App { init() { WatchViewModel.shared.activate() }
var body: some Scene { WindowGroup { ContentView() } }}
class WatchViewModel: NSObject, ObservableObject, WCSessionDelegate { static let shared = WatchViewModel()
@Published var lastMessage: [String: Any] = [:]
func activate() { guard WCSession.isSupported() else { return } WCSession.default.delegate = self WCSession.default.activate() }
// Send message to iPhone func sendToPhone(_ data: [String: Any]) { guard WCSession.default.isReachable else { print("iPhone not reachable") return } WCSession.default.sendMessage(data, replyHandler: nil) }
// Send message with reply func sendToPhoneWithReply(_ data: [String: Any], completion: @escaping ([String: Any]) -> Void) { guard WCSession.default.isReachable else { return } WCSession.default.sendMessage(data, replyHandler: completion) }
// Receive message from iPhone func session(_ session: WCSession, didReceiveMessage message: [String: Any]) { DispatchQueue.main.async { self.lastMessage = message } }
// Receive application context func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) { DispatchQueue.main.async { self.lastMessage = applicationContext } }
// Required delegate methods func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { print("Watch session activated: \(activationState.rawValue)") }}Referencia de API
Sección titulada “Referencia de API”Métodos
Sección titulada “Methods”sendMessage(options: SendMessageOptions)
Sección titulada “sendMessage(options: SendMessageOptions)”Envía un mensaje interactivo al watch. Requiere que el watch esté disponible.
Parámetros:
data: Object - Los datos a enviar al watch
updateApplicationContext(options: UpdateContextOptions)
Sección titulada “updateApplicationContext(options: UpdateContextOptions)”Actualiza el contexto de la aplicación. Solo se mantiene el último valor.
Parámetros:
context: Object - Los datos de contexto a sincronizar
transferUserInfo(options: TransferUserInfoOptions)
Sección titulada “transferUserInfo(options: TransferUserInfoOptions)”Encola la info del usuario para un envío fiable.
Parámetros:
userInfo: Object - La info del usuario a transferir
replyToMessage(options: ReplyMessageOptions)
Sección titulada “replyToMessage(options: ReplyMessageOptions)”Responde a un mensaje que solicitó una respuesta.
Parámetros:
callbackId: string - El callback ID del evento messageReceivedWithReplydata: Object - Los datos de la respuesta
getInfo()
Sección titulada “getInfo()”Obtiene el estado de conectividad del watch.
Devuelve: WatchInfo objeto con:
isSupported: boolean - Indica si las APIs de watch están disponibles en esta plataformaisPaired: boolean - Apple Watch vinculado (iOS) o al menos un nodo Wear OS conectado (Android)isWatchAppInstalled: boolean - App de acompañamiento instalada (iOS) ocapgo_watchcapacidad detectada (Android)isReachable: boolean - Si el watch es alcanzable para mensajería inmediataactivationState: number - Estado de la sesión (iOS WCSession; Android 2 si hay un nodo conectado, 0 si no)
getPluginVersion()
Sección titulada “getPluginVersion()”Obtén la versión del plugin nativo.
Eventos
Sección titulada “Events”| Evento | Descripción |
|---|---|
messageReceived | Mensaje simple desde el watch |
messageReceivedWithReply | Mensaje que espera respuesta (incluye callbackId) |
applicationContextReceived | Actualización de contexto desde el watch |
userInfoReceived | Transferencia de info de usuario desde el watch |
reachabilityChanged | Cambio en la conectividad del watch (solo iOS) |
activationStateChanged | Cambio en el estado de activación de sesión (solo iOS) |
Patrones de comunicación
Sección titulada “Communication Patterns”Mensajería inmediata (sendMessage)
Sección titulada “Immediate Messaging (sendMessage)”- Requiere que el watch esté disponible
- Ideal para comunicación interactiva y urgente
- Falla de inmediato si watch no está disponible
Contexto de la aplicación (updateApplicationContext)
Sección titulada “Application Context (updateApplicationContext)”- Solo el último valor; los anteriores se sobrescriben
- Ideal para sincronizar el estado actual de la app
- Se entrega cuando watch está disponible
Transferencia de info de usuario (transferUserInfo)
Sección titulada “User Info Transfer (transferUserInfo)”- En cola y entregado en orden
- Ideal para datos críticos que deben entregarse
- Funciona incluso si watch no es alcanzable temporalmente
Notas de la plataforma
Sección titulada “Notas de la plataforma”Consulta la tabla de soporte de plataformas en el overview del plugin para una matriz detallada por método.
iOS (Apple Watch)
Sección titulada “iOS (Apple Watch)”- Requiere iOS 15.0 o superior
- Usa el framework WatchConnectivity
- La sesión se activa automáticamente al cargar el plugin
- Soporta background delivery para context y user info
- Emite
reachabilityChangedyactivationStateChanged
Android (Wear OS)
Sección titulada “Android (Wear OS)”- Requiere Google Play services con Wear OS Data Layer (
play-services-wearable, incluido en el plugin) - Los APKs del teléfono y el reloj deben compartir la mismo
applicationIdy clave de firma - La app del reloj debe anunciar la capacidad
capgo_watch - Emitir necesitas emite
reachabilityChangedoactivationStateChanged; pollgetInfo()when needed - Guía de configuración: Crear una app para Wear OS
- Watch messaging no es compatible en el navegador
getInfo()se resuelve conisSupported: falseand other fields at safe defaultsgetPluginVersion()se resuelve con{ version: "web" }sendMessage,updateApplicationContext,transferUserInfo, yreplyToMessagerechazar con un error de no disponibleaddListenerresuelve un handle mediante CapacitorWebPlugin, pero los eventos de watch no son compatibles en el navegador (los callbacks nunca se ejecutan)
Casos de uso comunes
Sección titulada “Casos de uso comunes”- Data Sync: Keep watch and phone data in sync
- Control remoto: Controla funciones del teléfono desde el watch
- Notificaciones: Envía notificaciones personalizadas al watch
- Datos de salud: Comparte métricas de salud y fitness
- Control multimedia: Controla la reproducción de música desde el reloj
- Hogar inteligente: Controla dispositivos desde tu muñeca
Solución de problemas
Sección titulada “Solución de problemas”Reloj no disponible:
- Asegúrate de que el reloj esté en rango Bluetooth
- Comprueba que ambas apps estén en ejecución
- Verifica que WCSession esté activada en ambos lados
Mensajes no recibidos:
- Verifica que los listeners estén registrados antes de enviar
- Comprueba que la app de Watch implemente WCSessionDelegate
- Usa
transferUserInfopara garantizar la entrega
La sesión no se activa:
- Asegúrate de añadir la capability WatchConnectivity en Xcode
- Comprueba que la app de watch tenga el bundle ID correspondiente
- Comprueba que ambas apps apunten a versiones de OS compatibles
Continúa desde Getting Started
Sección titulada “Continúa desde Primeros pasos”Si estás usando Primeros pasos para planificar el trabajo con plugins nativos, conéctalo con Usando @capgo/capacitor-watch para la capacidad nativa en Uso de @capgo/capacitor-watch, Directorio de plugins de Capgo para el flujo de trabajo del producto en Capgo Plugin Directory, Plugins de Capacitor por Capgo para el detalle de implementación en los Plugins de Capacitor por Capgo, Añadir o actualizar plugins para el detalle de implementación en Agregar o actualizar plugins, y Alternativas a plugins de Ionic Enterprise para el flujo de trabajo del producto en Alternativas a plugins de Ionic Enterprise.