Inicio
Copie un prompt de configuración con los pasos de instalación y la guía de markdown completa 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.
-
Instale el paquete
Ventana de terminal bun add @capgo/capacitor-watch -
Sincronice con proyectos nativos
Ventana de terminal bunx cap sync -
Configurar el complemento
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 de iOS requerida:
- Agregue la capacidad de WatchConnectivity a su aplicación de iOS en Xcode
- Cree una aplicación de objetivo de watchOS en su proyecto de Xcode
- Implemente WatchConnectivity en su aplicación de watchOS (consulte la implementación de la aplicación de reloj a continuación)
El complemento activa automáticamente la sesión WC cuando se carga el complemento.
El reloj de Apple solo se admite en iOS. En Android, todos los métodos rechazarán con el error "El reloj de Apple solo se admite en iOS".
getInfo()devuelveisSupported: false. -
Atender mensajes que requieren una 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 watchawait CapgoWatch.replyToMessage({callbackId: event.callbackId,data: { 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 información de usuario de manera confiable
// 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 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);});
Implementación de la aplicación de reloj
Implementación de la aplicación de relojSu aplicación de reloj de Apple Watch necesita implementar WatchConnectivity. Aquí hay un ejemplo de 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)") }}API Referencia
Sección titulada “API Referencia”Métodos
Sección titulada “Métodos”sendMessage(options: SendMessageOptions)
Sección titulada “sendMessage(options: SendMessageOptions)”Enviar un mensaje interactivo al reloj. Requiere que el reloj esté disponible.
Parámetros:
data: Objeto - Los datos a enviar al reloj
updateApplicationContext(options: UpdateContextOptions)
Sección titulada “updateApplicationContext(options: UpdateContextOptions)”Actualizar contexto de la aplicación. Solo se mantiene el valor más reciente.
Parámetros:
context: Objeto - Los datos de contexto para sincronizar
transferUserInfo(options: TransferUserInfoOptions)
Sección titulada “transferUserInfo(options: TransferUserInfoOptions)”Coloque la información del usuario para su entrega confiable.
Parámetros:
userInfo: Object - La información del usuario a transferir
replyToMessage(options: ReplyMessageOptions)
Sección titulada “replyToMessage(options: ReplyMessageOptions)”Responder a un mensaje que solicitó una respuesta.
Parámetros:
callbackId: string - El ID de llamada de respuesta del evento messageReceivedWithReplydata: Object - Los datos de respuesta
getInfo()
Sección titulada “getInfo()”Obtener el estado de conectividad de la aplicación.
Devuelve: WatchInfo objeto con:
isSupported: boolean - ¿Se encuentra disponible la conectividad de reloj?isPaired: boolean - ¿Está pairado el reloj?isWatchAppInstalled: boolean - ¿Está instalado el reloj en la aplicación?isReachable: boolean - ¿Está disponible el reloj?activationState: número - Estado de la sesión (0/1/2)
getPluginVersion()
Sección titulada “getPluginVersion()”Obtenga la versión nativa del plugin.
Eventos
Sección titulada “Eventos”| Evento | Descripción |
|---|---|
messageReceived | Mensaje simple desde el reloj |
messageReceivedWithReply | Mensaje que espera una respuesta (incluye callbackId) |
applicationContextReceived | Actualización de contexto desde el reloj |
userInfoReceived | Transferencia de información del usuario desde el reloj |
reachabilityChanged | Se ha cambiado la conectividad del reloj |
activationStateChanged | Se ha cambiado el estado de activación de la sesión |
Patrones de comunicación
Sección titulada “Patrones de comunicación”Mensajería inmediata (sendMessage)sendMessage)
Sección titulada “Mensajería inmediata (sendMessage)”- Requiere que el reloj esté disponible
- Mejor para la comunicación interactiva y sensible al tiempo
- Fallará inmediatamente si no está disponible la función de seguimiento
Contexto de la aplicación (updateApplicationContext)
Sección titulada “Contexto de la aplicación (actualizar contexto de la aplicación)”- Último valor solo - los valores anteriores se sobrescriben
- Mejor para sincronizar el estado actual de la aplicación
- Se entrega cuando se vuelva a conectar la función de seguimiento
Transferencia de información del usuario (transferUserInfo)
Sección titulada “Transferencia de información del usuario (transferir información del usuario)”- Programado y se entrega en orden
- Mejor para datos importantes que deben ser entregados
- Funciona incluso cuando la función de seguimiento esté temporalmente inalcanzable
Notas de la plataforma
Nota de la plataforma- Requiere iOS 15.0 o posterior
- Utiliza el marco de trabajo de WatchConnectivity
- La sesión se activa automáticamente al cargar el plugin
- Soporta entrega de fondo para contexto y información del usuario
- No soportado (Apple Watch es solo para iOS)
- Todos los métodos rechazan con el error apropiado
getInfo()devuelveisSupported: false
- No soportado
- Todos los métodos rechazan con error de no disponible
getInfo()devuelveisSupported: false
Uso común
Sección titulada “Uso común”- Sincronización de datos: Mantener sincronizados los datos del teléfono y del reloj
- Control remoto: Controlar las características del teléfono desde el reloj
- Notificaciones: Enviar notificaciones personalizadas a la muñeca
- Datos de Salud: Compartir métricas de fitness y salud
- Control de Medios: Controlar reproducción de música desde la muñeca
- Casa Inteligente: Controlar dispositivos desde el antebrazo
Solución de Problemas
Sección titulada “Solución de Problemas”La muñeca no está accesible:
- Asegúrese de que la muñeca esté dentro del rango de Bluetooth
- Verifique que ambas aplicaciones estén en ejecución
- Verificar que WCSession está activado en ambos lados
No se recibieron mensajes:
- Compruebe que los oyentes estén registrados antes de enviar
- Verificar que la aplicación de reloj implementa WCSessionDelegate
- Usar
transferUserInfopara una entrega garantizada
No se está activando la sesión:
- Asegúrese de que la capacidad de WatchConnectivity esté agregada en Xcode
- Compruebe que la aplicación de reloj tenga el ID de paquete de compañero
- Verificar que ambas aplicaciones tengan versiones de sistema operativo compatibles