Erste Schritte
Kopiere einen Setup-Prompt mit den Installationsschritten und dem vollständigen Markdown-Guide für dieses 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.
Installation
Abschnitt mit dem Titel „Installation“Du kannst unser KI-gestütztes Setup nutzen, um das Plugin zu installieren. Füge die Capgo Skills mit dem folgenden Befehl deinem KI-Tool hinzu:
bunx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsNutze dann diesen Prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-watch` plugin in my project.Wenn du ein manuelles Setup bevorzugst, installiere das Plugin mit den folgenden Befehlen und befolge die plattformspezifischen Anweisungen unten:
-
Paket installieren
Terminalfenster bun add @capgo/capacitor-watch -
Mit nativen Projekten synchronisieren
Terminalfenster bunx cap sync -
Plugin konfigurieren
Grundlegendes Anwendungsbeispiel:
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);});Nachricht an die Watch senden:
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Erforderliches iOS-Setup:
- Füge deiner iOS-App in Xcode die WatchConnectivity Capability hinzu
- Erstelle ein watchOS App-Target in deinem Xcode-Projekt
- Implementiere WatchConnectivity in deiner watchOS App (siehe unten)
Das Plugin aktiviert die WCSession automatisch beim Laden.
Erforderliches Wear OS Setup:
- Füge einen Wear OS Modul in dein Android-Projekt (wie bei der
applicationIdund Signing der Phone-App). - Deklariere die
capgo_watchCapability im Wear-Modul (siehe Erstellen einer Wear OS-App). - Implementiere Data Layer Listener auf der Watch via Plugin-Pfaden (
/capgo/message,/capgo/context, und andere).
Das Phone-Plugin registriert beim Laden Wearable API Listener. Nutze
getInfo()um verbundene Nodes und die Erkennung der Watch-App zu prüfen.Schritte im Detail: Erstellen einer Wear OS-App.
-
Antwort erfordernde Nachrichten verarbeiten
// 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,},});}); -
App-State synchronisieren
// 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);}); -
User-Infos zuverlässig übertragen
// 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);}); -
Konnektivität überwachen
// 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);});
Quickstart
Abschnitt „Quick start“import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.sendMessage({ data: { action: 'refresh', timestamp: Date.now() }});Beispiel: updateApplicationContext
Abschnitt mit dem Titel „Beispiel: updateApplicationContext“import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.updateApplicationContext({ context: { theme: 'dark', lastSync: Date.now() }});Beispiel: transferUserInfo
Abschnitt mit dem Titel „Beispiel: transferUserInfo“import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.transferUserInfo({ userInfo: { recordId: '123', action: 'created' }});Häufige Stolperfallen
Abschnitt „Häufige Fallstricke“- Listener: Handles beim Unmounten von Screens entfernen.
- Nativer Sync: ausführen
bunx cap syncnach Plugin-Upgrades. - Single Source of Truth: Vertrauen
src/definitions.tsim GitHub Repo.
Watch-App Implementierung
Abschnitt mit dem Titel „Watch-App Implementierung“Deine watchOS-App muss WatchConnectivity implementieren. Hier ist ein SwiftUI-Beispiel:
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 Referenz
Abschnitt mit dem Titel „API Reference“sendMessage(options: SendMessageOptions)
Abschnitt mit dem Titel „sendMessage(options: SendMessageOptions)“Sendet eine interaktive Nachricht an die Watch. Die Watch muss erreichbar sein.
Parameter:
data: Objekt – Die an die Watch zu sendenden Daten
updateApplicationContext(options: UpdateContextOptions)
Abschnitt mit dem Titel „updateApplicationContext(options: UpdateContextOptions)“Aktualisiert den Application Context. Es wird nur der neueste Wert behalten.
Parameter:
context: Objekt – Die zu synchronisierenden Kontextdaten
transferUserInfo(options: TransferUserInfoOptions)
Abschnitt mit dem Titel „transferUserInfo(options: TransferUserInfoOptions)“Queue user info for reliable delivery.
Parameter:
userInfo: Object – Die zu übertragenden Benutzerinfos
replyToMessage(options: ReplyMessageOptions)
Abschnitt mit dem Titel „replyToMessage(options: ReplyMessageOptions)“Antwortet auf eine Nachricht, die eine Rückmeldung angefordert hat.
Parameter:
callbackId: string – Die Callback-ID aus dem messageReceivedWithReply-Eventdata: Object – Die Antwortdaten
getInfo()
Abschnitt mit dem Titel „getInfo()“Ruft den Watch-Konnektivitätsstatus ab.
Rückgabe: WatchInfo Objekt mit:
isSupported: boolean - Gibt an, ob watch APIs auf dieser Plattform verfügbar sindisPaired: boolean - Apple Watch gekoppelt (iOS) oder mindestens ein Wear OS Node verbunden (Android)isWatchAppInstalled: boolean - Companion Watch App installiert (iOS) odercapgo_watchCapability erkannt (Android)isReachable: boolean - Ob die Watch für Messaging sofort erreichbar istactivationState: number - Session-Status (iOS WCSession; Android 2, wenn ein Node verbunden ist, sonst 0)
getPluginVersion()
Abschnitt mit dem Titel „getPluginVersion()“Ruft die native Plugin-Version ab.
| Event | Beschreibung |
|---|---|
messageReceived | Einfache Nachricht von der Watch |
messageReceivedWithReply | Nachricht mit Antwort-Erwartung (inkl. callbackId) |
applicationContextReceived | Kontext-Update von der Watch |
userInfoReceived | User-Info-Transfer von der Watch |
reachabilityChanged | Watch-Verbindung geändert (nur iOS) |
activationStateChanged | Session-Aktivierungsstatus geändert (nur iOS) |
Kommunikationsmuster
Abschnitt mit dem Titel „Kommunikationsmuster“Sofortige Nachrichtenübermittlung (sendMessage)
Abschnitt mit dem Titel „Immediate Messaging (sendMessage)“- Watch muss erreichbar sein
- Ideal für interaktive, zeitkritische Kommunikation
- Schlägt sofort fehl, wenn watch nicht verfügbar ist
Application Context (updateApplicationContext)
Abschnitt mit dem Titel „Application Context (updateApplicationContext)“- Nur der aktuellste Wert – vorherige Werte werden überschrieben
- Ideal zum Synchronisieren des aktuellen App-States
- Wird geliefert, sobald watch verfügbar ist
Übertragung von Benutzerinfos (transferUserInfo)
Abschnitt mit dem Titel „User Info Transfer (transferUserInfo)“- In der Reihenfolge eingereiht und zugestellt
- Ideal für wichtige Daten, die sicher ankommen müssen
- Funktioniert auch, wenn watch vorübergehend nicht erreichbar ist
Plattform-Hinweise
Abschnitt mit dem Titel „Plattformhinweise“Siehe den Plattform-Support-Tabelle in der Plugin-Übersicht für eine Matrix pro Methode.
iOS (Apple Watch)
Abschnitt mit dem Titel „iOS (Apple Watch)“- Erfordert iOS 15.0 oder neuer
- Nutzt das WatchConnectivity-Framework
- Session wird beim Plugin-Load automatisch aktiviert
- Unterstützt Background Delivery für Context und User Info
- Emittiert
reachabilityChangedundactivationStateChanged
Android (Wear OS)
Abschnitt mit dem Titel „Android (Wear OS)“- Erfordert Google Play Services mit Wear OS Data Layer (
play-services-wearable, im Plugin enthalten) - Phone- und Wear-APKs müssen denselben gleich
applicationIdund signing key - Watch-App muss Capability deklarieren
capgo_watch - Gibt es nicht emittiert
reachabilityChangedoderactivationStateChanged; pollgetInfo()bei Bedarf - Setup-Guide: Erstellen einer Wear OS-App
- Watch-Messaging wird im Browser nicht unterstützt
getInfo()löst auf mitisSupported: falseund andere Felder mit sicheren StandardwertengetPluginVersion()löst auf mit{ version: "web" }sendMessage,updateApplicationContext,transferUserInfo, undreplyToMessagemit einem Fehler für nicht verfügbare Ressourcen ablehnenaddListenerlöst einen Handle über Capacitor aufWebPlugin, aber Watch-Events werden im Browser nicht unterstützt (Callbacks werden nie ausgeführt)
Häufige Anwendungsfälle
Abschnitt mit dem Titel „Häufige Anwendungsfälle“- Data Sync: Watch- und Telefondaten synchron halten
- Fernsteuerung: Telefonfunktionen über die Watch steuern
- Benachrichtigungen: Eigene Benachrichtigungen an die Watch senden
- Gesundheitsdaten: Fitness- und Gesundheitsdaten teilen
- Mediensteuerung: Musikwiedergabe über die Watch steuern
- Smart Home: Geräte direkt vom Handgelenk aus steuern
Fehlerbehebung
Abschnitt mit dem Titel „Troubleshooting“Watch nicht erreichbar:
- Sicherstellen, dass die Watch in Bluetooth-Reichweite ist
- Prüfen, ob beide Apps laufen
- Verifizieren, dass WCSession auf beiden Seiten aktiviert ist
Nachrichten nicht empfangen:
- Prüfen, ob Listener vor dem Senden registriert sind
- Sicherstellen, dass die Watch-App WCSessionDelegate implementiert
- Nutzt
transferUserInfofür eine garantierte Zustellung
Session wird nicht aktiviert:
- WatchConnectivity-Capability in Xcode hinzufügen
- Prüfen, ob die Watch-App die passende Bundle ID hat
- Sicherstellen, dass beide Apps kompatible OS-Versionen nutzen
Weiter geht's nach Getting Started
Abschnitt: „Weiter geht’s mit Getting Started“Wenn du es nutzt Erste Schritte Um die Arbeit an nativen Plugins zu planen, verbinde sie mit Verwendung von @capgo/capacitor-watch für die native Funktion in „Verwendung von @capgo/capacitor-watch“, Capgo Plugin-Verzeichnis für den Produkt-Workflow im Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für das Implementierungsdetail in Capacitor Plugins von Capgo, Plugins hinzufügen oder aktualisieren für das Implementierungsdetail beim Hinzufügen oder Aktualisieren von Plugins, und Ionic Enterprise Plugin-Alternativen für den Produkt-Workflow bei den Ionic Enterprise Plugin-Alternativen.