コンテンツにジャンプ

Getting Started

GitHub
  1. パッケージをインストール

    ターミナル画面
    bun add @capgo/capacitor-watch
  2. ネイティブプロジェクトと同期

    ターミナル画面
    bunx cap sync
  3. プラグインの設定

    基本的な使用例:

    import { CapgoWatch } from '@capgo/capacitor-watch';
    // Check watch connectivity status
    const info = await CapgoWatch.getInfo();
    console.log('Watch paired:', info.isPaired);
    console.log('Watch reachable:', info.isReachable);
    // Listen for messages from watch
    await CapgoWatch.addListener('messageReceived', (event) => {
    console.log('Message from watch:', event.message);
    });

    Watch:にメッセージを送信する

    // Check if watch is reachable first
    const info = await CapgoWatch.getInfo();
    if (info.isReachable) {
    await CapgoWatch.sendMessage({
    data: { action: 'refresh', timestamp: Date.now() }
    });
    }

    必要なiOS設定:

    1. XcodeでiOSアプリにWatchConnectivity機能を追加する
    2. XcodeプロジェクトにwatchOSアプリターゲットを作成する
    3. watchOSアプリでWatchConnectivityを実装する(下記のWatch App Implementationを参照)

    プラグインが読み込まれたときにWCSessionを自動的に有効化します。

  4. __CAPGO_KEEP_0__を返信する必要があるメッセージを処理する

    // Listen for messages that need a response
    await CapgoWatch.addListener('messageReceivedWithReply', async (event) => {
    console.log('Request from watch:', event.message);
    // Process the request
    const result = await processWatchRequest(event.message);
    // Send reply back to watch
    await CapgoWatch.replyToMessage({
    callbackId: event.callbackId,
    data: { result }
    });
    });
  5. __CAPGO_KEEP_0__を同期する

    // Update application context (latest value only)
    await CapgoWatch.updateApplicationContext({
    context: {
    theme: 'dark',
    userId: '123',
    lastSync: Date.now()
    }
    });
    // Listen for context updates from watch
    await CapgoWatch.addListener('applicationContextReceived', (event) => {
    console.log('Context from watch:', event.context);
    });
  6. __CAPGO_KEEP_0__を信頼できる方法でユーザー情報を転送する

    // 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 transfers
    await CapgoWatch.addListener('userInfoReceived', (event) => {
    console.log('User info from watch:', event.userInfo);
    });
  7. __CAPGO_KEEP_0__を監視する

    // Track reachability changes
    await CapgoWatch.addListener('reachabilityChanged', (event) => {
    console.log('Watch reachable:', event.isReachable);
    if (event.isReachable) {
    // Watch is now available for interactive messaging
    }
    });
    // Track session activation state
    await CapgoWatch.addListener('activationStateChanged', (event) => {
    // 0 = notActivated, 1 = inactive, 2 = activated
    console.log('Session state:', event.state);
    });

__CAPGO_KEEP_0__を実装する

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__を実装する必要があるのは、Watch App です。ここでは、SwiftUI の例を紹介します。

import SwiftUI
import WatchConnectivity
@main
struct 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)")
}
}

sendMessage(options: SendMessageOptions)

sendMessage(options: SendMessageOptions)

時計にインタラクティブなメッセージを送信します。時計が接続可能な場合にのみ機能します。

パラメータ:

  • data: Object - 時計に送信するデータ

updateApplicationContext(options: UpdateContextOptions)

updateApplicationContext(options: UpdateContextOptions)

アプリケーションコンテキストを更新します。最新の値のみが保持されます。

パラメータ:

  • context: Object - 同期するコンテキストデータ

ユーザー情報を信頼性の高い方法で送信する。

パラメータ:

  • userInfo: Object - 送信するユーザー情報

メッセージに返信する。

パラメータ:

  • callbackId: string - messageReceivedWithReply イベントから取得したコールバックID
  • data: Object - 返信データ

ウォッチ接続状態を取得する。

戻り値: WatchInfo オブジェクトのプロパティ:

  • isSupported: boolean - WatchConnectivity が利用可能かどうか
  • isPaired: boolean - 時計が pair されているかどうか
  • isWatchAppInstalled: boolean - 時計アプリがインストールされているかどうか
  • isReachable: boolean - 時計が接続されているかどうか
  • activationState: number - セッション状態 (0/1/2)

ネイティブ プラグインのバージョンを取得します。

イベント説明
messageReceivedシンプルなメッセージ
messageReceivedWithReply返信を待つメッセージ (callbackIdを含む)
applicationContextReceivedウォッチからのコンテキスト更新
userInfoReceivedウォッチからユーザー情報を転送
reachabilityChangedウォッチの接続状態が変更
activationStateChangedセッションの有効化状態が変更

コミュニケーション パターン

コミュニケーション パターン

即時メッセージング (sendMessage)

ウォッチが接続可能な場合にのみ
  • 即時性とタイムセンシティブ性の高いインタラクティブなコミュニケーションに適しています
  • 即時メッセージング (sendMessage)
  • __CAPGO_KEEP_0__はウォッチが利用できない場合に即座に失敗します

アプリケーション コンテキスト (updateApplicationContext)

アプリケーション コンテキスト (updateApplicationContext)
  • 最新値のみ - 前の値は上書きされます
  • 現在のアプリの状態を同期するのに最適
  • ウォッチが利用可能になったときに送信されます

ユーザー情報の転送 (transferUserInfo)

ユーザー情報の転送 (transferUserInfo)
  • 順番にキューイングされ、送信されます
  • 重要なデータを送信するのに最適
  • ウォッチが一時的に利用できない場合でも機能します

プラットフォームに関する注意事項

プラットフォームに関する注意

iOS

iOS
  • iOS 15.0 以降が必要
  • WatchConnectivity フレームワークを使用
  • プラグインの読み込み時にセッションが自動的に有効になります
  • コンテキストとユーザー情報のバックグラウンド配信をサポート

Android

Android
  • サポートされていません (Apple WatchはiOSのみ)
  • すべてのメソッドは適切なエラーで拒否されます
  • getInfo() returns isSupported: false

Web

Web
  • Not supported
  • All methods reject with unavailable error
  • getInfo() returns isSupported: false
  1. Data Sync: Keep watch and phone data in sync
  2. Remote Control: Control phone features from watch
  3. Notifications: __CAPGO_KEEP_0__をカスタムで送信します。
  4. 健康データ: __CAPGO_KEEP_0__と健康指標を共有します。
  5. メディアコントロール: __CAPGO_KEEP_0__から音楽再生を制御します。
  6. スマートホーム: 腕時計からデバイスを制御します。

トラブルシューティング

トラブルシューティング

腕時計が接続できません。

  • 腕時計がBluetoothの範囲内にありますか?
  • 両方のアプリが実行中ですか?
  • 両方の側でWCSessionが有効になっていることを確認する

受信されていないメッセージ:

  • リスナが登録されていることを確認してから送信する
  • ウォッチアプリがWCSessionDelegateを実装していることを確認する
  • 使用 transferUserInfo 確実に配信されるように

セッションが有効にならない:

  • XcodeでWatchConnectivity機能が追加されていることを確認する
  • ウォッチアプリがコンパニオンのbundle IDを持っていることを確認する
  • 両方のアプリが互換性のあるOSバージョンをターゲットにしていることを確認する

Capgoを使用している場合 Getting Started nativeプラグインの作業を計画するには、Capgoと接続する必要があります。 Capgoの@capgo/capacitor-watchを使用 Capgoの@capgo/capacitor-watchのnative機能について Capgo プラグインディレクトリ for the product workflow in Capgo Plugin Directory, Capacitor プラグインはCapgo for the implementation detail in Capacitor Plugins by Capgo, Capgo プラグインを追加または更新する Capgo プラグインを追加または更新するの実装詳細について Ionic Enterprise プラグインの代替 Ionic Enterprise プラグイン代替品の製品ワークフローについてです。