Démarrage
Copiez un prompt de configuration avec 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.
-
Installez le package
Fenêtre de terminal bun add @capgo/capacitor-watch -
Synchronisez avec les projets natifs
Fenêtre de terminal bunx cap sync -
Configurez 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 à Watch:
// Check if watch is reachable firstconst info = await CapgoWatch.getInfo();if (info.isReachable) {await CapgoWatch.sendMessage({data: { action: 'refresh', timestamp: Date.now() }});}Configuration requise iOS :
- 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'application Watch ci-dessous)
Le plugin active automatiquement la session WC lorsque le plugin charge.
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 renvoieisSupported: false. -
Gérer 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 }});}); -
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 informations d'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émenter l'application Watch
Implémentation de l'application WatchVotre application watchOS doit implémenter 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”Méthodes
Section intitulée “Méthodes”sendMessage(options: SendMessageOptions)
Section intitulée “sendMessage(options: SendMessageOptions)”Envoyer un message interactif à l'horloge. Exige que l'horloge soit accessible.
Paramètres :
data: Objet - Les données à envoyer à l'horloge
updateApplicationContext(options: UpdateContextOptions)
Section intitulée “updateApplicationContext(options: UpdateContextOptions)”Mettre à jour le contexte de l'application. Seule la valeur la plus récente est conservée.
Paramètres :
context: Objet - Les données de contexte à synchroniser
transferUserInfo(options: TransferUserInfoOptions)
Section intitulée « transférer les informations de l'utilisateur (options : TransferUserInfoOptions) »Enfile les informations de l'utilisateur pour une livraison fiable.
Paramètres :
userInfo: Objet - Les informations de l'utilisateur à transférer
replyToMessage(options: ReplyMessageOptions)
Section intitulée « répondre à un message (options : ReplyMessageOptions) »Répondre à un message qui a demandé une réponse.
Paramètres :
callbackId: chaîne de caractères - L'ID de rappel du messageReceivedWithReplydata: Objet - Les données de réponse
Obtenir l'état de connectivité de l'horloge.
Retourne : WatchInfo objet avec :
isSupported: boolean - Le WatchConnectivity est disponibleisPaired: boolean - Un montre est pairéisWatchAppInstalled: boolean - L'application de montre est installéeisReachable: boolean - La montre est accessibleactivationState: nombre - État de session (0/1/2)
getPluginVersion()
Section intitulée “getPluginVersion()”Obtenez la version native du plugin.
Événements
Section intitulée “Événements”| Événement | Description |
|---|---|
messageReceived | Message simple du montreur |
messageReceivedWithReply | Message attendant une réponse (inclut callbackId) |
applicationContextReceived | Mise à jour de contexte du montreur |
userInfoReceived | Transfert d'informations de l'utilisateur du montreur |
reachabilityChanged | État de connectivité du montreur modifié |
activationStateChanged | État d'activation de la session modifié |
Modèles de communication
Section intitulée « Modèles de communication »Message instantané (sendMessage)
Section intitulée « Message instantané (sendMessage) »- Exige que le montreur soit accessible
- Meilleur pour la communication interactive et sensible à l'heure
- Échoue immédiatement si la surveillance n'est pas disponible
Contexte d'application (updateApplicationContext)
Section intitulée « Contexte d'application (mise à jour du contexte d'application) »- Seulement la dernière valeur - les valeurs précédentes sont effacées
- Meilleur pour la synchronisation de l'état actuel de l'application
- Livré lorsque la surveillance devient disponible
Transfert d'informations de l'utilisateur (transferUserInfo)
Section intitulée « Transfert d'informations de l'utilisateur (transfert d'informations de l'utilisateur) »- En file d'attente et livré dans l'ordre
- Meilleur pour les données importantes qui doivent être livrées
- Fonctionne même lorsque la surveillance est temporairement inatteignable
Notes de plateforme
Section intitulée « Notes sur la plateforme »- Exige iOS 15.0 ou ultérieur
- Utilise le framework WatchConnectivity
- La session s'active automatiquement lors du chargement du plugin
- Supporte la livraison en arrière-plan pour le contexte et les informations utilisateur
- Non pris en charge (l'Apple Watch est uniquement disponible sous iOS)
- Toutes les méthodes rejettent avec un erreur appropriée
getInfo()returnsisSupported: false
- Non pris en charge
- Toutes les méthodes rejettent avec une erreur indisponible
getInfo()renvoieisSupported: false
Utilisations courantes
Section intitulée « Utilisations courantes »- Synchronisation de donnéesGardez à l'œil et synchronisez les données de téléphone et montre
- Contrôle à distanceContrôlez les fonctionnalités de téléphone depuis votre montre
- Notifications: Envoie des notifications personnalisées à l'horloge
- État de santé: Partage des métriques de fitness et de santé
- Contrôle de médias: Contrôle de la lecture de musique depuis l'horloge
- Smart Home: Contrôle des appareils depuis votre poignet
Dépannage
: Section intitulée “Dépannage”L'horloge n'est pas accessible :
- Assurez-vous que l'horloge est dans la zone de couverture 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 montre l'horloge 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 l'horloge a l'ID de bundle de l'application de compagnon
- Vérifiez que les deux applications ciblent des versions OS compatibles