コンテンツにジャンプ

开发完演

  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);
    });

    ウォッチにメッセージを送信:

    // 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アプリの実装を参照)

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

  4. 返します

    // 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. コピー

    // 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. コピー

    // 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. 接続性を監視する

    // 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);
    });

ウォッチOSアプリはWatchConnectivityを実装する必要があります。ここでは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)")
}
}

時計にインタラクティブなメッセージを送信します。時計が接続可能である必要があります。

パラメーター:

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

updateApplicationContext(options: UpdateContextOptions)

セクション「updateApplicationContext(options: UpdateContextOptions)」

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

パラメーター:

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

transferUserInfo(options: TransferUserInfoOptions)

セクション「transferUserInfo(options: TransferUserInfoOptions)」

ユーザー情報を信頼できる方法で送信するためにキューに追加します。

パラメーター:

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

replyToMessage(options: ReplyMessageOptions)

セクション「replyToMessage(options: ReplyMessageOptions)」

返信したいメッセージに返信する。

パラメーター:

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

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

戻り値: WatchInfo オブジェクトに含まれる:

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

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

イベント説明
messageReceivedウォッチから送信された単純なメッセージ
messageReceivedWithReplyメッセージに返信を期待する (コールバック ID を含む)
applicationContextReceivedウォッチからコンテキストが更新されました
userInfoReceivedウォッチからユーザー情報が転送されました
reachabilityChangedウォッチの接続状態が変更されました
activationStateChangedセッションの有効化状態が変更されました
  • ウォッチが利用可能であることを確認する必要があります
  • リアルタイムの、時間の経過とともに変化するコミュニケーションに適しています
  • ウォッチが利用できない場合、すぐに失敗します

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

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

__CAPGO_KEEP_0__情報の転送 (transferUserInfo)transferUserInfo)

「__CAPGO_KEEP_0__情報の転送 (transferUserInfo)」セクション
  • 順番にキューイングされ、送信されます。
  • 重要なデータを送信する必要がある場合に最適です。
  • 時計が一時的にアクセスできない場合でも機能します。

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

「プラットフォームに関する注意」セクション
  • iOS 15.0 以降を必要とします。
  • WatchConnectivity フレームワークを使用します。
  • プラグイン読み込み時に自動でセッションが有効になります。
  • コンテキストとユーザー情報のバックグラウンド配信をサポート
  • サポートされていません (Apple WatchはiOS専用)
  • すべてのメソッドは適切なエラーで拒否されます。
  • getInfo() returns isSupported: false
  • サポートされていません
  • すべてのメソッドは利用できないエラーで拒否されます。
  • getInfo() returns isSupported: false
  1. データ同期: 時計とスマートフォンのデータを同期しておきます
  2. リモートコントロール: 時計からスマートフォンの機能を制御します
  3. 通知: カスタム通知を時計に送信します
  4. 健康データ: フィットネスと健康指標を共有します
  5. メディアコントロール: 時計から音楽再生を制御します
  6. スマートホーム:腕時計からデバイスを制御する

腕時計が到達できません:

  • 腕時計がBluetoothの範囲内にあることを確認してください
  • 両方のアプリが実行されていることを確認してください
  • 両方の端末でWCSessionが有効になっていることを確認してください

メッセージが受信できません:

  • リスナが登録されていることを確認して、メッセージを送信する前に
  • 腕時計アプリがWCSessionDelegateを実装していることを確認してください
  • 使用 transferUserInfo 確実な配達のために

セッションが有効になっていません:

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