Démarrage
Copiez une commande de configuration avec les étapes d'installation et la guide markdown complète pour ce 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.
-
Installez le package
Fenêtre de terminal bun add @capgo/capacitor-watch -
Synchroniser avec les projets natifs
Fenêtre de terminal bunx cap sync -
Configurer le plugin
Exemple de base d'utilisation :
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);});Envoyer un message à l'horloge :
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Configuration requise d'iOS :
- Ajoutez la capacité WatchConnectivity à votre application iOS dans Xcode
- Créez une cible d'application watchOS dans votre projet Xcode
- Mettez en œuvre WatchConnectivity dans votre application watchOS (voir l'implémentation de l'application Watch ci-dessous)
Le plugin active automatiquement la WCSession lors du chargement du plugin.
L'Apple Watch n'est pris en charge que sur iOS. Sur Android, toutes les méthodes rejettent avec l'erreur « L'Apple Watch n'est pris en charge que sur iOS ».
getInfo()la méthode retourneisSupported: false. -
Gérez les messages qui nécessitent une réponse
// 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 }});}); -
Synchronisez l'état de l'application
// 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);}); -
Transférez les informations de l'utilisateur de manière fiable
// 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);}); -
Surveiller la connectivité
// 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);});
Implémentation de l'application horloge
Section intitulée “Implémentation de l'application horloge”Votre application horloge doit mettre en œuvre WatchConnectivity. Voici un exemple 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 Référence
Section intitulée “API Référence”sendMessage(options: SendMessageOptions)
Envoyer un message interactif à l'horloge. Exige que l'horloge soit accessible.Section intitulée “Methods”
Paramètres :
data: Objet - Les données à envoyer à l'horloge
updateApplicationContext(options: UpdateContextOptions)
Section intitulée « mise à jour du contexte d'application (options : UpdateContextOptions) »Mettre à jour le contexte d'application. Seule la dernière valeur est conservée.
Paramètres :
context: Objet - Les données de contexte à synchroniser
transferUserInfo(options: TransferUserInfoOptions)
Section intitulée « transfert d'informations sur l'utilisateur (options : TransferUserInfoOptions) »File d'attente les informations sur l'utilisateur pour une livraison fiable.
Paramètres :
userInfo: Objet - Les informations sur l'utilisateur à transférer
replyToMessage(options: ReplyMessageOptions)
Section intitulée « réponse à un message (options : ReplyMessageOptions) »Répondre à un message qui a demandé une réponse.
Paramètres :
callbackId: string - L'ID de rappel de l'événement messageReceivedWithReplydata: Objet - Les données de réponse
getInfo()
Section intitulée “getInfo()”Obtenir l'état de la connectivité de l'horloge.
Retourne : WatchInfo un objet avec :
isSupported: boolean - Si WatchConnectivity est disponibleisPaired: boolean - Si une horloge est pairéeisWatchAppInstalled: boolean - Si l'application horloge est installéeisReachable: boolean - Si l'horloge est accessibleactivationState: nombre - État de session (0/1/2)
getPluginVersion()
Section intitulée “getPluginVersion()”Obtenez la version du plugin natif.
Événements
Section intitulée “Événements”| Événement | Description |
|---|---|
messageReceived | Message simple de la montre |
messageReceivedWithReply | Message attendu en réponse (inclut callbackId) |
applicationContextReceived | Mise à jour du contexte de la montre |
userInfoReceived | Transfert d'informations sur l'utilisateur de la montre |
reachabilityChanged | Modification de la connectivité de la montre |
activationStateChanged | État d'activation de la session modifié |
Modèles de communication
Section intitulée « Modèles de communication »Messagerie instantanée (sendMessage)
Section intitulée « Messagerie instantanée (sendMessage) »- Requis pour que l'horloge soit accessible
- Meilleur pour la communication interactive et sensible à l'heure
- Échoue immédiatement si l'horloge n'est pas disponible
Contexte de l'application (updateApplicationContext)
Dernière valeur uniquement - les valeurs précédentes sont effacées- Meilleur pour synchroniser l'état actuel de l'application
- Envoyé lorsque l'horloge devient disponible
- __CAPGO_KEEP_0__
Transfert d'informations de l'utilisateur (transferUserInfo)
Section intitulée « Transfert d'informations de l'utilisateur (transferUserInfo) »- En file d'attente et livré dans l'ordre
- Meilleur pour les données importantes qui doivent être livrées
- Fonctionne même lorsque l'horloge est temporairement inatteignable
Remarques sur la plateforme
Section intitulée « Remarques sur la plateforme »- Exige iOS 15.0 ou une version ultérieure
- Utilise le framework WatchConnectivity
- La session s'active automatiquement à la charge du plugin
- Supporte la livraison de fond pour le contexte et les informations de l'utilisateur
Android
Section intitulée “Android”- Pas pris en charge (Apple Watch est uniquement iOS)
- Toutes les méthodes rejettent avec une erreur appropriée
getInfo()returnsisSupported: false
- Pas pris en charge
- Toutes les méthodes rejettent avec une erreur non disponible
getInfo()returnsisSupported: false
Cas d'utilisation courants
Section intitulée “Utilisations courantes”- Synchronisation de données: Gardez vos données de téléphone et de montre synchronisées
- Contrôle à distance: Contrôlez les fonctionnalités de votre téléphone depuis votre montre
- Notifications: Envoyez des notifications personnalisées à votre montre
- Données de santé: Partagez vos métriques de fitness et de santé
- Contrôle de médias: Contrôlez la lecture de musique depuis votre montre
- Maison intelligente: Contrôlez les appareils de votre poignet
Dépannage
Section intitulée « Dépannage »Montre non accessible :
- Vérifiez que la montre est dans la zone de portée Bluetooth
- Vérifiez que les deux applications sont en cours d'exécution
- Vérifiez que WCSession est activé des deux côtés
Messages non reçus :
- Vérifiez que les écouteurs sont enregistrés avant d'envoyer
- Vérifiez que l'application de montre implémente WCSessionDelegate
- Utilisez
transferUserInfopour une livraison garantie
La session ne s'active pas :
- Assurez-vous que la capacité WatchConnectivity est ajoutée dans Xcode
- Vérifiez que l'application montre une ID de bundle de l'application de compagnon
- Vérifiez que les deux applications ciblent des versions OS compatibles