Per iniziare
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo 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.
Installazione
Sezione intitolata “Installazione”Puoi usare il nostro setup assistito dall'IA per installare il plugin. Aggiungi le skill Capgo al tuo strumento di IA usando il seguente comando:
bunx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsPoi usa il seguente prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-watch` plugin in my project.Se preferisci la configurazione manuale, installa il plugin eseguendo questi comandi e segui le istruzioni specifiche per piattaforma qui sotto:
-
Installa il pacchetto
Finestra del terminale bun add @capgo/capacitor-watch -
Sincronizza con i progetti nativi
Finestra del terminale bunx cap sync -
Configura il plugin
Esempio di utilizzo base:
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);});Invia un messaggio a Watch:
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Configurazione iOS richiesta:
- Aggiungi la capability WatchConnectivity alla tua app iOS in Xcode
- Crea un target per l'app watchOS nel tuo progetto Xcode
- Implementa WatchConnectivity nella tua app watchOS (vedi Implementazione dell'app Watch sotto)
Il plugin attiva automaticamente la WCSession quando viene caricato.
Setup Wear OS richiesto:
- Aggiungi un Modulo Wear OS al tuo progetto Android (stesso
applicationIde stessa firma dell'app per smartphone). - Dichiara la
capgo_watchcapability nel modulo wear (vedi Creazione di un'app Wear OS). - Implementa i listener del Data Layer sull'orologio usando i path del plugin (
/capgo/message,/capgo/context, e altri).
Il plugin per telefono registra i listener API Wearable al caricamento. Usa
getInfo()per controllare i nodi connessi e se l'app per smartwatch viene rilevata.Passaggi completi: Creazione di un'app Wear OS.
-
Gestire i messaggi che richiedono una risposta
// 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,},});}); -
Sincronizzare lo stato dell'applicazione
// 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);}); -
Trasferire le info utente in modo affidabile
// 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);}); -
Monitorare la connettività
// 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);});
Avvio rapido
Sezione intitolata “Quick start”import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.sendMessage({ data: { action: 'refresh', timestamp: Date.now() }});Esempio: updateApplicationContext
Sezione intitolata “Esempio: updateApplicationContext”import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.updateApplicationContext({ context: { theme: 'dark', lastSync: Date.now() }});Esempio: transferUserInfo
Sezione intitolata “Esempio: transferUserInfo”import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.transferUserInfo({ userInfo: { recordId: '123', action: 'created' }});Errori comuni
Sezione intitolata “Errori comuni”- Listener: rimuovi gli handle quando gli schermi vengono smontati.
- Sync nativo: esegui
bunx cap syncdopo gli aggiornamenti dei plugin. - Fonte di verità: fidati
src/definitions.tsnel repo GitHub.
Implementazione Watch App
Sezione intitolata “Implementazione Watch App”La tua app watchOS deve implementare WatchConnectivity. Ecco un esempio in 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)") }}Riferimento API
Sezione intitolata “Riferimento API”sendMessage(options: SendMessageOptions)
Sezione intitolata “sendMessage(options: SendMessageOptions)”Invia un messaggio interattivo allo smartwatch. Richiede che lo smartwatch sia raggiungibile.
Parametri:
data: Oggetto - I dati da inviare allo smartwatch
updateApplicationContext(options: UpdateContextOptions)
Sezione intitolata “updateApplicationContext(options: UpdateContextOptions)”Aggiorna il contesto dell'applicazione. Viene mantenuto solo l'ultimo valore.
Parametri:
context: Oggetto - I dati del contesto da sincronizzare
transferUserInfo(options: TransferUserInfoOptions)
Sezione intitolata “transferUserInfo(options: TransferUserInfoOptions)”Metti in coda le info utente per una consegna affidabile.
Parametri:
userInfo: Object - Le info utente da trasferire
replyToMessage(options: ReplyMessageOptions)
Sezione intitolata “replyToMessage(options: ReplyMessageOptions)”Rispondi a un messaggio che richiede una risposta.
Parametri:
callbackId: string - Il callback ID dell'evento messageReceivedWithReplydata: Object - I dati della risposta
getInfo()
Sezione intitolata “getInfo()”Ottieni lo stato di connettività del watch.
Restituisce: WatchInfo oggetto con:
isSupported: boolean - Indica se le API watch sono disponibili su questa piattaformaisPaired: boolean - Apple Watch associato (iOS) o almeno un nodo Wear OS connesso (Android)isWatchAppInstalled: boolean - App companion installata (iOS) ocapgo_watchcapability rilevata (Android)isReachable: boolean - Se lo smartwatch è raggiungibile per l'invio immediato di messaggiactivationState: number - Stato della sessione (iOS WCSession; Android 2 se un nodo è connesso, altrimenti 0)
getPluginVersion()
Sezione intitolata “getPluginVersion()”Ottieni la versione del plugin nativo.
| Evento | Descrizione |
|---|---|
messageReceived | Messaggio semplice dall'watch |
messageReceivedWithReply | Messaggio in attesa di risposta (include callbackId) |
applicationContextReceived | Aggiornamento contesto dall'watch |
userInfoReceived | Trasferimento info utente dall'watch |
reachabilityChanged | Connettività watch cambiata (solo iOS) |
activationStateChanged | Stato attivazione sessione cambiato (solo iOS) |
Pattern di comunicazione
Sezione intitolata “Pattern di comunicazione”Messaggistica immediata (sendMessage)
Sezione intitolata “Messaggistica immediata (sendMessage)”- Richiede che l'watch sia raggiungibile
- Ideale per comunicazioni interattive e urgenti
- Fallisce immediatamente se watch non è disponibile
Contesto dell'applicazione (updateApplicationContext)
Sezione intitolata “Application Context (updateApplicationContext)”- Solo l'ultimo valore - i precedenti vengono sovrascritti
- Ideale per sincronizzare lo stato attuale dell'app
- Inviato quando watch diventa disponibile
Trasferimento info utente (transferUserInfo)
Sezione intitolata “User Info Transfer (transferUserInfo)”- Messo in coda e consegnato in ordine
- Ideale per dati critici che devono essere consegnati
- Funziona anche se watch è temporaneamente irraggiungibile
Note sulla piattaforma
Sezione intitolata “Note sulla piattaforma”Guarda il tabella di supporto delle piattaforme nella panoramica del plugin per una matrice metodo per metodo.
iOS (Apple Watch)
Sezione intitolata “iOS (Apple Watch)”- Richiede iOS 15.0 o versioni successive
- Utilizza il framework WatchConnectivity
- La sessione si attiva automaticamente al caricamento del plugin
- Supporta la consegna in background per context e user info
- Emette
reachabilityChangedeactivationStateChanged
Android (Wear OS)
Sezione intitolata “Android (Wear OS)”- Richiede Google Play services con Wear OS Data Layer (
play-services-wearable, incluso nel plugin) - Gli APK di telefono e watch devono condividere la stesso
applicationIde chiave di firma - L'app per watch deve dichiarare la capability
capgo_watch - Emette hai emette
reachabilityChangedoactivationStateChanged; pollinggetInfo()quando necessario - Guida alla configurazione: Creazione di un'app Wear OS
- Il messaging Watch non è supportato nel browser
getInfo()risolve conisSupported: falsee altri campi con valori predefiniti sicurigetPluginVersion()risolve con{ version: "web" }sendMessage,updateApplicationContext,transferUserInfo, ereplyToMessagerifiuta con un errore unavailableaddListenerrisolve un handle tramite CapacitorWebPlugin, ma gli eventi watch non sono supportati nel browser (i callback non vengono eseguiti)
Casi d'uso comuni
Sezione intitolata “Casi d'uso comuni”- Data Sync: Mantieni sincronizzati watch e smartphone
- Controllo remoto: Controlla le funzioni del telefono dal watch
- Notifications: Invia notifiche personalizzate allo smartwatch
- Dati salute: Condividi metriche di fitness e salute
- Controllo Media: Controlla la riproduzione musicale dall'orologio
- Smart Home: Controlla i dispositivi dal polso
Risoluzione problemi
Sezione intitolata “Troubleshooting”Watch non raggiungibile:
- Assicurati che l'orologio sia nel raggio Bluetooth
- Verifica che entrambe le app siano attive
- Verifica che WCSession sia attivata su entrambi i lati
Messaggi non ricevuti:
- Verifica che i listener siano registrati prima dell'invio
- Verifica che l'app Watch implementi WCSessionDelegate
- Usa
transferUserInfoper una consegna garantita
Sessione non attiva:
- Assicurati che la capability WatchConnectivity sia aggiunta in Xcode
- Controlla che l'app Watch abbia il bundle ID del companion
- Verifica che entrambe le app puntino a versioni OS compatibili
Continua da Getting Started
Sezione intitolata “Continua da Getting Started”Se stai usando Per iniziare per pianificare il lavoro sui plugin nativi, collegalo a Utilizzo di @capgo/capacitor-watch per la funzionalità nativa in Utilizzo di @capgo/capacitor-watch, Directory dei plugin di Capgo per il workflow del prodotto nella Capgo Plugin Directory, Plugin Capacitor di Capgo per i dettagli di implementazione in Capacitor Plugins di Capgo, Aggiunta o aggiornamento dei plugin per i dettagli su come aggiungere o aggiornare i plugin, e Alternative ai plugin Ionic Enterprise per il workflow del prodotto in Alternative ai plugin Ionic Enterprise.