Saltare al contenuto

Inizio

GitHub
  1. Installare il pacchetto

    Finestra del terminale
    bun add @capgo/capacitor-watch
  2. Sincronizza con i progetti nativi

    Finestra del terminale
    bunx cap sync
  3. Configura il plugin

    Esempio di utilizzo base:

    import { CapgoWatch } from '@capgo/capacitor-watch';
    // Check watch connectivity status
    const info = await CapgoWatch.getInfo();
    console.log('Watch paired:', info.isPaired);
    console.log('Watch reachable:', info.isReachable);
    // Listen for messages from watch
    await CapgoWatch.addListener('messageReceived', (event) => {
    console.log('Message from watch:', event.message);
    });

    Invia un messaggio al Watch:

    // Check if watch is reachable first
    const info = await CapgoWatch.getInfo();
    if (info.isReachable) {
    await CapgoWatch.sendMessage({
    data: { action: 'refresh', timestamp: Date.now() }
    });
    }

    Configurazione iOS richiesta:

    1. Aggiungi la capacità di WatchConnectivity al tuo app iOS in Xcode
    2. Crea un target watchOS nell'applicazione Xcode
    3. Implementa WatchConnectivity nell'app watchOS (vedi Implementazione dell'app Watch di seguito)

    Il plugin attiva automaticamente la WCSession quando il plugin si carica.

  4. Gestisci messaggi che richiedono una risposta

    // Listen for messages that need a response
    await CapgoWatch.addListener('messageReceivedWithReply', async (event) => {
    console.log('Request from watch:', event.message);
    // Process the request
    const result = await processWatchRequest(event.message);
    // Send reply back to watch
    await CapgoWatch.replyToMessage({
    callbackId: event.callbackId,
    data: { result }
    });
    });
  5. 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 watch
    await CapgoWatch.addListener('applicationContextReceived', (event) => {
    console.log('Context from watch:', event.context);
    });
  6. 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 transfers
    await CapgoWatch.addListener('userInfoReceived', (event) => {
    console.log('User info from watch:', event.userInfo);
    });
  7. Monitor la connessione

    // Track reachability changes
    await CapgoWatch.addListener('reachabilityChanged', (event) => {
    console.log('Watch reachable:', event.isReachable);
    if (event.isReachable) {
    // Watch is now available for interactive messaging
    }
    });
    // Track session activation state
    await CapgoWatch.addListener('activationStateChanged', (event) => {
    // 0 = notActivated, 1 = inactive, 2 = activated
    console.log('Session state:', event.state);
    });

La tua app watchOS deve implementare WatchConnectivity. Ecco un esempio di SwiftUI:

import SwiftUI
import WatchConnectivity
@main
struct 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)")
}
}

Inviare un messaggio interattivo al watch. Richiede che il watch sia raggiungibile.

Parametri:

  • data: Oggetto - I dati da inviare all'orologio

Aggiorna il contesto dell'applicazione. Solo l'ultima versione viene conservata.

Parametri:

  • context: Oggetto - I dati del contesto da sincronizzare

Inoltra le informazioni utente per una consegna affidabile.

Parametri:

  • userInfo: Oggetto - Le informazioni utente da trasferire

Rispondi a un messaggio che richiede una risposta.

Parametri:

  • callbackId: string - L'ID di callback dall'evento messageReceivedWithReply
  • data: Oggetto - I dati di risposta

Ottenere lo stato di connettività dell'orologio.

Restituisce: WatchInfo oggetto con:

  • isSupported: boolean - Se WatchConnectivity è disponibile
  • isPaired: boolean - Se è presente un orologio
  • isWatchAppInstalled: boolean - Se è installato l'app dell'orologio
  • isReachable: boolean - Se è raggiungibile l'orologio
  • activationState: numero - Stato della sessione (0/1/2)

Ottieni la versione del plugin nativo.

EventoDescrizione
messageReceivedMessaggio semplice da watch
messageReceivedWithReplyMessaggio che aspetta una risposta (include id di callback)
applicationContextReceivedAggiornamento del contesto da watch
userInfoReceivedTrasferimento di informazioni utente da watch
reachabilityChangedCambiamento di connettività del watch
activationStateChangedCambiamento di stato di attivazione della sessione
  • Richiede che l'orologio sia raggiungibile
  • Migliore per la comunicazione interattiva e a tempo di risposta
  • Fallisce immediatamente se l'orologio non è disponibile

Contexto dell'Applicazione (updateApplicationContext)

Sezione intitolata “Contexto dell'Applicazione (updateApplicationContext)”
  • Valore più recente solo - precedenti valori vengono sovrascritti
  • Migliore per sincronizzare lo stato corrente dell'app
  • Inviato quando l'orologio diventa disponibile
  • Inoltrate e consegnate in ordine
  • Ottimo per dati importanti che devono essere consegnati
  • Funziona anche quando l'orologio è temporaneamente inaccessibile
  • 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
  • Non supportato (Apple Watch è iOS-only)
  • Tutti i metodi rifiutano con un errore appropriato
  • getInfo() returns isSupported: false
  • Non supportato
  • Tutti i metodi rifiutano con errore non disponibile
  • getInfo() returns isSupported: false
  1. Sincronizzazione dati: Mantieni sincronizzati i dati del telefono e dell'orologio
  2. Controllo remoto: Controlla le funzionalità del telefono dall'orologio
  3. Notifiche: Invia notifiche personalizzate all'orologio
  4. Dati di salute: Condividi metriche di fitness e salute
  5. Controllo media: Controlla la riproduzione della musica dall'orologio
  6. Smart Home: Controlla dispositivi dal tuo polso

Ora non raggiungibile:

  • Assicurati che l'orologio sia all'interno della portata Bluetooth
  • Verifica che sia in esecuzione entrambi gli app
  • Verifica che WCSession sia attivato su entrambi i lati

Non ricevi messaggi:

  • Verifica che i listener siano registrati prima di inviare
  • Verifica che l'app orologio implementi WCSessionDelegate
  • Utilizza transferUserInfo per una consegna garantita

La sessione non si attiva:

  • Assicurati di aver aggiunto la capacità di 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

Se stai utilizzando Getting Started per pianificare il lavoro di plugin nativo, connettilo con Utilizzando @capgo/capacitor-watch per la capacità nativa in Utilizzando @capgo/capacitor-watch, Capgo Directory dei plugin per il flusso di lavoro del prodotto nella cartella di plugin Capgo i plugin Capacitor di Capgo per la dettaglio di implementazione in Capacitor Plugins by Capgo, Aggiungere o aggiornare i plugin per la dettaglio di implementazione in Aggiungere o aggiornare i plugin, e Alternative plugin aziendali di Ionic Enterprise per il flusso di lavoro del prodotto in Alternative plugin aziendali di Ionic Enterprise.