Inizio
Copia un prompt di installazione 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.
-
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 al 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 obbligatoria:
- Aggiungi la capacità WatchConnectivity al tuo'app iOS in Xcode
- Crea un'app target watchOS nel tuo progetto Xcode
- Implementa WatchConnectivity nell'app watchOS (vedi Implementazione dell'app Watch di seguito)
Il plugin attiva automaticamente la WCSession quando il plugin si carica.
L'Apple Watch è supportata solo su iOS. Su Android, tutti i metodi rifiuteranno con l'errore "L'Apple Watch è supportata solo su iOS". Il
getInfo()metodo restituisceisSupported: false. -
Gestisci 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 watchawait CapgoWatch.replyToMessage({callbackId: event.callbackId,data: { result }});}); -
Sincronizza 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);}); -
Trasferisci informazioni 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 connessione
// 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);});
Visualizza implementazione dell'applicazione Watch
Sezione intitolata “Visualizza implementazione dell'applicazione Watch”La tua app watchOS deve implementare WatchConnectivity. Ecco un esempio di 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 Reference
Sezione intitolata “API Reference”sendMessage(options: SendMessageOptions)
Sezione intitolata “inviaMessaggio(options: SendMessageOptions)”Invia un messaggio interattivo al orologio. Richiede che l'orologio sia raggiungibile.
Parametri:
data: Oggetto - I dati da inviare all'orologio
updateApplicationContext(options: UpdateContextOptions)
Sezione intitolata “aggiorna contesto dell'applicazione (options: UpdateContextOptions)”Aggiorna il contesto dell'applicazione. Solo l'ultima versione viene conservata.
Parametri:
context: Oggetto - I dati del contesto da sincronizzare
transferUserInfo(options: TransferUserInfoOptions)
Sezione intitolata “trasferisci informazioni utente (options: TransferUserInfoOptions)”Inserisci in coda le informazioni utente per una consegna affidabile.
Parametri:
userInfo: Oggetto - Le informazioni utente da trasferire
replyToMessage(options: ReplyMessageOptions)
Sezione intitolata “rispondi al messaggio (options: ReplyMessageOptions)”Rispondi a un messaggio che richiedeva una risposta.
Parametri:
callbackId: string - L'ID di callback dal messaggio messageReceivedWithReply eventodata: Oggetto - I dati di risposta
getInfo()
Sezione intitolata “getInfo()”Ottenere lo stato di connettività dell'orologio.
Ritorna: WatchInfo oggetto con:
isSupported: boolean - Se WatchConnectivity è disponibileisPaired: boolean - Se è presente un orologioisWatchAppInstalled: boolean - Se è installato l'app dell'orologioisReachable: boolean - Se l'orologio è raggiungibileactivationStateNumero - Stato della sessione (0/1/2)
getPluginVersion()
Sezione intitolata “getPluginVersion()”Ottieni la versione del plugin nativo.
| Evento | Descrizione |
|---|---|
messageReceived | Messaggio semplice da watch |
messageReceivedWithReply | Messaggio che aspetta una risposta (include Id della callback) |
applicationContextReceived | Aggiornamento del contesto da watch |
userInfoReceived | Trasferimento di informazioni dell'utente da watch |
reachabilityChanged | Cambiamento di connettività del watch |
activationStateChanged | Stato di attivazione della sessione modificato |
Pattini di comunicazione
Sottosezione intitolata “Pattini di comunicazione”Invio immediato (sendMessage)
Sottosezione intitolata “Invio immediato (sendMessage)”- Richiede che il watch sia raggiungibile
- Consigliato per la comunicazione interattiva e a tempo di risposta
- Fallisce immediatamente se il watch non è disponibile
Contesto dell'applicazione (updateApplicationContext)
Sottosezione intitolata “Contesto dell'applicazione (updateApplicationContext)”- Valore più recente solo - precedenti valori sovrascritti
- Consigliato per sincronizzare lo stato corrente dell'app
- Ricevuto quando l'orologio diventa disponibile
Trasferimento informazioni utente (transferUserInfo)
Sezione intitolata “Trasferimento informazioni utente (trasferisciInformazioniUtente)”- In coda e consegnato in ordine
- Migliore per i dati importanti che devono essere consegnati
- Funziona anche quando l'orologio è temporaneamente inaccessibile
Note sulla piattaforma
Sezione intitolata “Note sulla piattaforma”- Richiede iOS 15.0 o successiva
- Utilizza il framework WatchConnectivity
- La sessione si attiva automaticamente al caricamento del plugin
- Supporta la consegna in background per contesto e informazioni utente
Android
Sezione intitolata “Android”- Non supportato (Apple Watch è disponibile solo per iOS)
- Tutti i metodi rifiutano con l'errore appropriato
getInfo()ritornaisSupported: false
- Non supportato
- Tutti i metodi rifiutano con errore non disponibile
getInfo()ritornaisSupported: false
Casi di utilizzo comuni
Sezione intitolata “Casi di utilizzo comuni”- Sincronizzazione dei dati: Mantieni sincronizzati i dati del telefono e dell'orologio
- Controllo remoto: Controlla le funzionalità del telefono dall'orologio
- Notifiche: Invia notifiche personalizzate all'orologio
- Dati di salute: Condividi metriche di fitness e salute
- Controllo dei media: Controlla la riproduzione della musica dall'orologio
- Smart Home: Controlla i dispositivi dal tuo polso
Risoluzione dei problemi
Sezione intitolata “Risoluzione dei problemi”Orologio non raggiungibile:
- Assicurati che l'orologio sia all'interno della portata Bluetooth
- Verifica che sia attivato WCSession su entrambi i lati
- Messaggi non ricevuti:
Verifica che i listener siano registrati prima di inviare
- Verifica che l'app orologio implementi WCSessionDelegate
- Utilizza
- __CAPGO_KEEP_0__
transferUserInfoper consegna garantita
Sessione non attiva:
- Assicurati di aver aggiunto la capacità WatchConnectivity in Xcode
- Verifica che l'app orologio abbia l'ID bundle del companion
- Verifica che entrambe le app siano compatibili con le versioni OS