Inizio
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.
-
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 obbligatoria:
- Aggiungi la capacità WatchConnectivity al tuo'app iOS in Xcode
- Crea un obiettivo di app 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 "Apple Watch è supportata solo su iOS".
getInfo()Il 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);}); -
Monitora 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);});
Implementazione dell'app Watch
Implementazione dell'app WatchLa tua app per 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 Riferimento
Sezione intitolata “API Riferimento”sendMessage(options: SendMessageOptions)
Sezione intitolata “sendMessage(options: SendMessageOptions)”Invia un messaggio interattivo all'orologio. Richiede che l'orologio sia raggiungibile.
Parametri:
data: Oggetto - I dati da inviare all'orologio
updateApplicationContext(options: UpdateContextOptions)
Sezione intitolata “updateApplicationContext(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 “trasferisciInformazioniUtente(options: TransferUserInfoOptions)”Inserisci in coda le informazioni dell'utente per una consegna affidabile.
Parametri:
userInfo: Oggetto - Le informazioni dell'utente da trasferire
replyToMessage(options: ReplyMessageOptions)
Sezione intitolata “rispondiAMessaggio(options: ReplyMessageOptions)”Rispondi a un messaggio che richiede una risposta.
Parametri:
callbackId: stringa - L'ID di callback dal messaggio ricevuto con l'evento messageReceivedWithReplydata: Oggetto - I dati di risposta
getInfo()
Sezione intitolata “getInfo()”Otteni lo stato di connettività della watch.
Restituisce: WatchInfo oggetto con:
isSupported: boolean - Se WatchConnectivity è disponibileisPaired: boolean - Se un orologio è associatoisWatchAppInstalled: boolean - Se l'applicazione orologio è installataisReachable: boolean - Se l'orologio è raggiungibileactivationState: numero - Stato della sessione (0/1/2)
getPluginVersion()
Sezione intitolata “getPluginVersion()”Ottieni la versione del plugin nativo.
| Evento | Descrizione |
|---|---|
messageReceived | Messaggio semplice dal watch |
messageReceivedWithReply | Messaggio che aspetta una risposta (include callbackId) |
applicationContextReceived | Aggiornamento di contesto dal watch |
userInfoReceived | Trasferimento di informazioni dell'utente dal watch |
reachabilityChanged | Cambiamento di connettività del watch |
activationStateChanged | Lo stato di attivazione della sessione è cambiato |
Modelli di comunicazione
Modelli di comunicazioneMessaggistica immediata (sendMessage)sendMessage)
Richiede che il watch sia raggiungibile- Migliore per la comunicazione interattiva e a tempo di risposta
- Modelli di comunicazione
- Fails immediatamente se watch non è disponibile
Contexto dell'applicazione (updateApplicationContext)
Sezione intitolata “Contexto dell'applicazione (aggiornaContextoDellApplicazione)”- Ultimo valore solo - precedenti valori sovrascritti
- Migliore per sincronizzare lo stato corrente dell'applicazione
- Inviato quando watch diventa disponibile
Trasferimento di informazioni dell'utente (transferUserInfo)
Sezione intitolata “Trasferimento di informazioni dell'utente (trasferisciInformazioniDellUtente)”- Inoltrato e inviato in ordine
- Migliore per dati importanti che devono essere inviati
- Funziona anche quando watch è temporaneamente inaccessibile
Note del sistema per piattaforma
Nota della piattaforma- Richiede iOS 15.0 o successivo
- Utilizza il framework WatchConnectivity
- La sessione si attiva automaticamente al caricamento del plugin
- Supporta la consegna in background per contesto e informazioni utente
Android
Nota dell'Android- Non supportato (Apple Watch è disponibile solo per iOS)
- Tutti i metodi rifiutano con un errore appropriato
getInfo()returnsisSupported: false
- Non supportato
- Tutti i metodi rifiutano con errore non disponibile
getInfo()ritornaisSupported: false
Casi d'uso comuni
Sezione intitolata “Casi d'uso comuni”- Sincronizzazione dei dati: Mantieni sincronizzati i dati del telefono e dell'orologio
- Controllo remoto: Controlla le funzionalità del telefono dall'orologio
- Notifiche: Inviare notifiche personalizzate al watch
- Informazioni sulla salute: Condividi metriche di fitness e salute
- Controllo Media: Controlla la riproduzione musicale dal watch
- Casa intelligente: Controlla dispositivi dal polso
Risoluzione dei problemi
Sottosezione intitolata “Risoluzione dei problemi”Watch non raggiungibile:
- Assicurati che il watch sia all'interno della portata Bluetooth
- Verifica che sia in esecuzione entrambi gli app
- Verifica che WCSession sia attivato su entrambi i lati
Non ricevuti messaggi:
- Controlla che i listener siano registrati prima di inviare
- Verifica che l'app orologio implementi WCSessionDelegate
- Usa
transferUserInfoper una consegna garantita
Sessione non attiva:
- Assicurati che la capacità WatchConnectivity sia aggiunta in Xcode
- Controlla che l'app orologio abbia l'ID bundle del companion
- Verifica che entrambe le app puntino a versioni OS compatibili