내용으로 건너뛰기

시작하기

  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를 implement하세요 (Watch App Implementation 참조)

    플러그인은 플러그인이 로드될 때 자동으로 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. __CAPGO_KEEP_1__

    // 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_3__

__CAPGO_KEEP_4__

__CAPGO_KEEP_5__

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

__CAPGO_KEEP_9__

__CAPGO_KEEP_10__

sendMessage(options: SendMessageOptions)

__CAPGO_KEEP_11__

시계에 인터랙티브 메시지를 보내십시오. 시계가 접근 가능해야 합니다.

매개 변수:

  • 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 - 메시지ReceivedWithReply 이벤트의 callback ID
  • data: Object - 응답 데이터

시계 연결 상태를 가져옵니다.

반환: WatchInfo 객체에:

  • isSupported: boolean - 시계 연결이 가능합니다.
  • isPaired: boolean - 시계가 pair되었습니다.
  • isWatchAppInstalled: boolean - 시계 앱이 설치되었습니다.
  • isReachable: boolean - 시계가 접근 가능합니다.
  • activationState: 번호 - 세션 상태 (0/1/2)

원시 플러그인 버전을 가져옵니다.

이벤트설명
messageReceived시계에서 단순한 메시지
messageReceivedWithReply응답을 포함하는 콜백 ID가 있는 메시지를 기대합니다.
applicationContextReceived시계에서 컨텍스트 업데이트
userInfoReceived시계에서 사용자 정보 전송
reachabilityChanged시계와의 연결이 변경되었습니다.
activationStateChanged세션 활성화 상태가 변경되었습니다.

통신 패턴

통신 패턴

즉시 메시징 (sendMessage)

즉시 메시징 (sendMessage)
  • watch가 접근 가능해야 합니다.
  • 시간에 민감한, 상호 작용적인 통신에 적합합니다.
  • watch가 사용 불가능할 경우 즉시 실패합니다.

애플리케이션 컨텍스트 (updateApplicationContext)

Section titled “Application Context (updateApplicationContext)”
  • 최신 값만 제공 - 이전 값은 덮어씁니다.
  • 현재 앱 상태 동기화에 적합합니다.

transferUserInfo)

  • __CAPGO_KEEP_0__ 자동 활성화
  • __CAPGO_KEEP_1__을 위한 배경 전송 지원

__CAPGO_KEEP_2__

__CAPGO_KEEP_3__
  • __CAPGO_KEEP_4__ (iOS 전용 Apple Watch)
  • __CAPGO_KEEP_5__
  • getInfo() __CAPGO_KEEP_6__ isSupported: false

__CAPGO_KEEP_7__

__CAPGO_KEEP_8__
  • __CAPGO_KEEP_9__
  • __CAPGO_KEEP_10__
  • getInfo() __CAPGO_KEEP_11__ isSupported: false

일반 사용 사례

일반 사용 사례
  1. 데이터 동기화: 휴대폰과腕목 기기의 데이터를 동기화
  2. 원격 제어:腕목 기기에서 휴대폰 기능을 제어
  3. 通知: 사용자 지정 알림을腕목 기기로 전송
  4. 건강 데이터: 운동 및 건강 지표를 공유
  5. 미디어 제어:腕목 기기에서 음악 재생을 제어
  6. Smart Home손목 시계에서 장치를 제어하세요

문제 해결

문제 해결

시계가 연결되지 않음:

  • 시계가 블루투스 범위 내에 있는지 확인하세요
  • 모두의 앱이 실행 중인지 확인하세요
  • WCSession이 양쪽에서 활성화되어 있는지 확인하세요

메시지가 수신되지 않음:

  • 리스너가 등록되기 전에 메시지를 보낼 때 확인하세요
  • 시계 앱이 WCSessionDelegate를 implement했는지 확인하세요
  • 사용 transferUserInfo 보장된 배송을 위해

세션 활성화되지 않음:

  • Xcode에서 WatchConnectivity 기능이 추가되어야 함
  • 시계 앱이 동반 번들 ID를 가지고 있는지 확인하세요
  • 두 앱이 호환 가능한 OS 버전을 대상으로 하는지 확인하세요