Prise en main
Copiez un prompt de configuration incluant les étapes d'installation et le guide markdown complet 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.
Installation
Section intitulée « Installation »Vous pouvez utiliser notre configuration assistée par IA pour installer le plugin. Ajoutez les skills Capgo à votre outil d'IA avec la commande suivante :
bunx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsUtilisez ensuite le prompt suivant :
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-watch` plugin in my project.Si vous préférez une installation manuelle, installez le plugin en exécutant les commandes suivantes et suivez les instructions spécifiques à chaque plateforme ci-dessous :
-
Installer 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 d'utilisation de 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);});Envoyer un message à la Watch :
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Configuration iOS requise :
- Ajoutez la capacité WatchConnectivity à votre application iOS dans Xcode
- Créez une cible d'application watchOS dans votre projet Xcode
- Implémentez WatchConnectivity dans votre application watchOS (voir l'implémentation de l'app Watch ci-dessous)
Le plugin active automatiquement la WCSession lors de son chargement.
Configuration requise pour Wear OS :
- Ajoutez une Module Wear OS à votre projet Android (même
applicationIdsignature que l'application téléphone). - Déclarez la
capgo_watchcapability dans le module wear (voir Créer une app Wear OS). - Implémentez les écouteurs Data Layer sur la montre via les chemins du plugin (
/capgo/message,/capgo/context, et autres).
Le plugin téléphone enregistre des écouteurs API Wearable lors du chargement. Utilisez
getInfo()pour vérifier les nœuds connectés et si l'application montre est détectée.Étapes complètes : Créer une app Wear OS.
-
Gérer les messages nécessitant 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 watch (include requestId for Wear OS correlation)await CapgoWatch.replyToMessage({callbackId: event.callbackId,data: {requestId: event.message.requestId,result,},});}); -
Synchroniser 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érer les infos utilisateur de façon 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);});
Démarrage rapide
Section intitulée « Démarrage rapide »import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.sendMessage({ data: { action: 'refresh', timestamp: Date.now() }});Exemple : updateApplicationContext
Section intitulée « Exemple : updateApplicationContext »import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.updateApplicationContext({ context: { theme: 'dark', lastSync: Date.now() }});Exemple : transferUserInfo
Section intitulée « Exemple : transferUserInfo »import { CapgoWatch } from '@capgo/capacitor-watch';
await CapgoWatch.transferUserInfo({ userInfo: { recordId: '123', action: 'created' }});Erreurs courantes
Section intitulée « Erreurs courantes »- Écouteurs: supprimez les handles lors du démontage des écrans.
- Sync native : exécuter
bunx cap syncaprès les mises à jour du plugin. - Source de vérité : fiez-vous
src/definitions.tsau repo GitHub.
Implémentation de l'app Watch
Section intitulée « Implémentation de l'app Watch »Votre app watchOS doit implémenter WatchConnectivity. Voici un exemple en 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)") }}Référence API
Section intitulée « Référence API »Méthodes
Section intitulée « Méthodes »sendMessage(options: SendMessageOptions)
Section intitulée « sendMessage(options: SendMessageOptions) »Envoie un message interactif à la montre. La montre doit être joignable.
Paramètres :
data: Objet - Les données à envoyer à la montre
updateApplicationContext(options: UpdateContextOptions)
Section intitulée « updateApplicationContext(options: UpdateContextOptions) »Met à jour le contexte de l'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 « transferUserInfo(options: TransferUserInfoOptions) »Queue user info for reliable delivery.
Paramètres :
userInfo: Objet - Les infos utilisateur à transférer
replyToMessage(options: ReplyMessageOptions)
Section intitulée « replyToMessage(options: ReplyMessageOptions) »Répondre à un message qui a sollicité une réponse.
Paramètres :
callbackId: string - L'ID de callback de l'événement messageReceivedWithReplydata: Objet - Les données de la réponse
getInfo()
Section intitulée « getInfo() »Obtenir le statut de connectivité de la montre.
Retourne : WatchInfo objet avec :
isSupported: booléen - Indique si les API watch sont disponibles sur cette plateformeisPaired: booléen - Apple Watch jumelée (iOS) ou au moins un nœud Wear OS connecté (Android)isWatchAppInstalled: booléen - Application compagnon installée (iOS) oucapgo_watchcapacité détectée (Android)isReachable: booléen - Indique si la montre est joignable pour une messagerie immédiateactivationState: nombre - État de la session (iOS WCSession ; Android 2 si un nœud est connecté, 0 sinon)
getPluginVersion()
Section intitulée « getPluginVersion() »Récupérer la version du plugin natif.
Événements
Section intitulée « Événements »| Événement | Description |
|---|---|
messageReceived | Message simple de la montre |
messageReceivedWithReply | Message en attente de réponse (inclut le callbackId) |
applicationContextReceived | Mise à jour du contexte depuis watch |
userInfoReceived | Transfert d'infos utilisateur depuis la montre |
reachabilityChanged | Changement de connectivité de la Watch (iOS uniquement) |
activationStateChanged | Changement d'état d'activation de la session (iOS uniquement) |
Patterns de communication
Section intitulée « Modèles de communication »Messagerie immédiate (sendMessage)
Section intitulée « Messagerie immédiate (sendMessage) »- Nécessite que la montre soit joignable
- Idéal pour les communications interactives et urgentes
- Échoue immédiatement si watch n'est pas disponible
Contexte de l'application (updateApplicationContext)
Section intitulée « Contexte de l'application (updateApplicationContext) »- Uniquement la dernière valeur - les précédentes sont écrasées
- Idéal pour synchroniser l'état actuel de l'app
- Livré dès que watch devient disponible
Transfert d'infos utilisateur (transferUserInfo)
Section intitulée « Transfert d'infos utilisateur (transferUserInfo) »- Mis en file d'attente et livré dans l'ordre
- Idéal pour les données critiques devant être livrées
- Fonctionne même si watch est temporairement injoignable
Notes de plateforme
Section intitulée « Notes sur la plateforme »Consultez le tableau de compatibilité des plateformes sur l'aperçu du plugin pour une matrice méthode par méthode.
iOS (Apple Watch)
Section intitulée « iOS (Apple Watch) »- Nécessite iOS 15.0 ou une version ultérieure
- Utilise le framework WatchConnectivity
- La session s'active automatiquement au chargement du plugin
- Supports background delivery for context and user info
- Émet
reachabilityChangedetactivationStateChanged
Android (Wear OS)
Section intitulée « Android (Wear OS) »- Nécessite les services Google Play avec Wear OS Data Layer (
play-services-wearable, inclus avec le plugin) - Phone and wear APKs must share the même
applicationIdet clé de signature - L'application de la montre doit déclarer sa capacité
capgo_watch - Émet pas émet
reachabilityChangedouactivationStateChanged; pollgetInfo()si nécessaire - Guide d'installation : Créer une app Wear OS
- Le watch messaging n'est pas supporté dans le navigateur
getInfo()se résout avecisSupported: falseand other fields at safe defaultsgetPluginVersion()se résout avec{ version: "web" }sendMessage,updateApplicationContext,transferUserInfo, etreplyToMessagerejeter avec une erreur d'indisponibilitéaddListenerrésout un handle via CapacitorWebPlugin, mais les événements watch ne sont pas supportés dans le navigateur (les callbacks ne s'exécutent jamais)
Cas d'usage courants
Section intitulée « Cas d'utilisation courants »- Data Sync: Keep watch and phone data in sync
- Contrôl’à distance: Control phone features from watch
- Notifications: Envoyez des notifications personnalisées à la montre
- Données de santé: Partagez vos données de santé et de fitness
- Contrôle média: Contrôlez la lecture musicale depuis la montre
- Domotique: Contrôlez vos appareils depuis votre poignet
Troubleshooting
Section intitulée « Dépannage »Montre injoignable :
- Assurez-vous que la montre est à portée Bluetooth
- Vérifiez que les deux applications sont lancées
- Vérifiez que WCSession est activée des deux côtés
Messages non reçus :
- Vérifiez que les listeners sont enregistrés avant l'envoi
- Vérifiez que l'app Watch implémente WCSessionDelegate
- Utiliser
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'app Watch possède le bundle ID compagnon
- Vérifiez que les deux apps ciblent des versions d'OS compatibles
Continuer depuis Getting Started
Section intitulée « Continuer après Prise en main »Si vous utilisez Prise en main pour planifier le travail sur les plugins natifs, connectez-l’à Utiliser @capgo/capacitor-watch pour la fonctionnalité native dans « Utiliser @capgo/capacitor-watch », Capgo Répertoire des plugins pour le workflow produit dans Capgo Plugin Directory, Plugins Capacitor par Capgo pour les détails d'implémentation dans Plugins Capacitor par Capgo, Ajouter ou mettre à jour des plugins pour les détails d'implémentation dans Ajout ou mise à jour de plugins, et Alternatives aux plugins Ionic Enterprise pour le workflow produit dans Alternatives aux plugins Ionic Enterprise.