Einstieg
Ein Vorschlag zum Einrichten kopieren, der die Installationsanweisungen und die vollständige Markdown-Guideline für diesen Plugin enthält.
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.
-
Das Paket installieren
Terminalfenster bun add @capgo/capacitor-watch -
Synchronisiere mit native Projekten
Terminalfenster bunx cap sync -
Die Erweiterung konfigurieren
Grundlegende Verwendungsaufgabe:
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);});Senden Sie eine Nachricht an Watch:
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Erforderliche iOS-Einrichtung:
- Fügen Sie der WatchConnectivity-Fähigkeit Ihrer iOS-Anwendung in Xcode hinzu
- Erstellen Sie in Ihrem Xcode-Projekt einen watchOS-Anwendungsziel
- Implementieren Sie WatchConnectivity in Ihrer watchOS-Anwendung (siehe Implementierung des Watch-Apps unten)
Die Erweiterung aktiviert die WCSession automatisch, wenn die Erweiterung geladen wird.
Der Apple Watch wird nur auf iOS unterstützt. Auf Android werden alle Methoden mit der Fehlermeldung „Apple Watch wird nur auf iOS unterstützt“ abgelehnt. Der
getInfo()methode gibt zurückisSupported: false. -
Behandeln Sie Nachrichten, die eine Antwort erfordern
// 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 }});}); -
Synchronisieren Sie den Anwendungsstatus
// 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);}); -
Übertragen Sie Benutzerinformationen zuverlässig
// 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);}); -
Verbindungsüberwachung
// 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);});
Uhr App-Implementierung anzeigen
Abschnitt mit dem Titel „Uhr App-Implementierung“Ihre Uhr-App muss WatchConnectivity implementieren. Hier ist ein Beispiel mit 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
Section titled “API Reference”sendMessage(options: SendMessageOptions)
Abschnitt mit dem Titel „sendMessage(options: SendMessageOptions)“Senden Sie eine interaktive Nachricht an das Gerät. Erfordert, dass das Gerät erreichbar ist.
Parameter:
data: Objekt - Die Daten, die an das Gerät gesendet werden sollen
updateApplicationContext(options: UpdateContextOptions)
Abschnitt mit dem Titel „updateApplicationContext(options: UpdateContextOptions)“Aktualisieren Sie den Anwendungscontex. Nur der letzte Wert wird gespeichert.
Parameter:
context: Objekt - Der Kontextdaten, die gesynchronisiert werden sollen
transferUserInfo(options: TransferUserInfoOptions)
Abschnitt mit dem Titel „transferUserInfo(options: TransferUserInfoOptions)“Warten Sie auf die Zuverlässigkeit der Benutzerinformationen.
Parameter:
userInfo: Objekt - Die Benutzerinformationen, die übertragen werden sollen
replyToMessage(options: ReplyMessageOptions)
Abschnitt mit dem Titel „replyToMessage(options: ReplyMessageOptions)“Antwort auf eine Nachricht, die eine Antwort erforderte.
Parameter:
callbackId: string - Die Callback-ID aus dem Ereignis messageReceivedWithReplydata: Objekt - Die Antwortdaten
getInfo()
Abschnitt mit dem Titel “getInfo()”Status der Uhrverbindung abrufen.
Rückgabewert: WatchInfo Objekt mit:
isSupported: boolean - Ob WatchConnectivity verfügbar istisPaired: boolean - Ob eine Uhr gepaart istisWatchAppInstalled: boolean - Ob die Uhr-App installiert istisReachable: boolean - Ob die Uhr erreichbar istactivationStateZahl - Sitzungsstatus (0/1/2)
getPluginVersion()
Abschnitt mit dem Titel „getPluginVersion()“Ermitteln Sie die native Pluginversion.
Ereignisse
Abschnitt mit dem Titel „Ereignisse“| Ereignis | Beschreibung |
|---|---|
messageReceived | Einfache Nachricht von watch |
messageReceivedWithReply | Nachricht, die eine Antwort erwartet (enthält callbackId) |
applicationContextReceived | Aktualisierung des Kontexts von watch |
userInfoReceived | Übertragung von Benutzerinformationen von watch |
reachabilityChanged | Änderung der Verbindung zum Watch |
activationStateChanged | Sitzungsaktivierungsstatus geändert |
Kommunikationsmuster
Abschnitt: KommunikationsmusterEchtzeitkommunikation (sendMessage)
Abschnitt: Echtzeitkommunikation (sendMessage)- Braucht, dass der Watch erreichbar ist
- Am besten für interaktive, zeitkritische Kommunikation
- Fällt sofort durch, wenn der Watch nicht verfügbar ist
Anwendungs Kontext (updateApplicationContext)
Abschnitt: Anwendungs Kontext (updateApplicationContext)- Nur der letzte Wert - vorherige Werte werden überschrieben
- Am besten für das Synchronisieren des aktuellen App-Zustands
- Geliefert, wenn der Watch verfügbar wird
Benutzerinformationen übertragen (transferUserInfo)
Abschnitt mit dem Titel „Benutzerinformationen übertragen (transferUserInfo)“- In der Reihenfolge geplant und geliefert
- Ideal für wichtige Daten, die geliefert werden müssen
- Funktioniert auch, wenn der Watch vorübergehend nicht erreichbar ist
Plattformhinweise
Abschnitt mit dem Titel „Plattformhinweise“- Bereitstellung erfordert iOS 15.0 oder später
- Verwendet WatchConnectivity-Framework
- Sitzung aktiviert sich automatisch bei Plugin-Laden
- Hintergrundlieferung für Kontext und Benutzerinformationen unterstützt
- Nicht unterstützt (Apple Watch ist iOS-only)
- Alle Methoden lehnen mit entsprechender Fehler ab
getInfo()returnsisSupported: false
- Nicht unterstützt
- Alle Methoden lehnen mit unavailable Fehler ab
getInfo()returnsisSupported: false
Häufige Anwendungsfälle
Abschnitt mit dem Titel "Häufige Anwendungsfälle"- Daten Synchronisierung: Synchronisiere Uhr und Telefon-Daten
- Remote-Control: Steuere Telefon-Funktionen von der Uhr aus
- Benachrichtigungen: Senden Sie benutzerdefinierte Benachrichtigungen an die Uhr
- Gesundheitsdaten: Teilen Sie Fitness- und Gesundheitsmetriken
- Mediensteuerung: Steuere die Musikwiedergabe von der Uhr aus
- Smart HomeGeräte von deinem Handgelenk steuern
Fehlersuche
Abschnitt mit dem Titel “Fehlersuche”Uhren nicht erreichbar:
- Stellen Sie sicher, dass die Uhr in Bluetooth-Range ist
- Überprüfen Sie, ob beide Apps läuft
- Überprüfen Sie, ob WCSession auf beiden Seiten aktiviert ist
Nachrichten werden nicht empfangen:
- Stellen Sie sicher, dass die Listener vor dem Senden registriert sind
- Überprüfen Sie, ob die Uhr-App die WCSessionDelegate implementiert
- Verwenden Sie
transferUserInfo__CAPGO_KEEP_0__
Sitzung nicht aktivieren:
- Stellen Sie sicher, dass die WatchConnectivity-Fähigkeit in Xcode hinzugefügt ist
- Überprüfen Sie, ob die Uhr-App die Begleit-Bundle-ID hat
- Überprüfen Sie, ob beide Apps auf kompatible Betriebssystemversionen zielen