Wear OS에서 데이터 전송 및 동기화

Wear OS by Google을 사용하여 시계는 다양한 방법으로 데이터를 전송하고 동기화합니다. 네트워크에서 데이터를 직접 전송하고 동기화하는 것이 좋습니다. 이렇게 하면 앱이 독립형 앱으로 간주될 수 있기 때문입니다.

네트워크에서 직접 데이터 전송 및 동기화

네트워크와 직접 통신하는 Wear OS 앱을 빌드합니다. 모바일 개발에서 사용하는 것과 동일한 API를 사용할 수 있지만 몇 가지 Wear OS만의 차이점을 염두에 두어야 합니다.

Wearable Data Layer API를 사용하여 데이터 전송 및 동기화

Google Play 서비스에 포함되어 있는 Wearable Data Layer API는 앱을 위한 선택적 통신 채널을 제공합니다.

이 API는 Wear OS 시계 및 페어링된 Android 기기에서만 사용할 수 있습니다. iOS 휴대전화와 페어링된 Wear OS 시계의 경우 인터넷에 연결할 수 있다면 앱이 다른 클라우드 기반 API를 쿼리할 수 있습니다.

Wearable Data Layer API에는 다음과 같은 종속 항목이 있습니다.

Wear 모듈의 build.gradle 파일에 다음 종속 항목을 포함합니다.

  dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:18.1.0'
  }
  

웨어러블 앱은 네트워크나 연결된 휴대전화에서 바로 데이터를 전송하고 동기화하는 것이 좋습니다. 그러나 RPC 유형 형식으로 기기 간에 직접 통신하려는 경우나 데이터를 얻기 위해 네트워크에 직접 연결할 수 없는 경우에는 다음과 같은 방식으로 Wearable Data Layer API를 사용할 수 있습니다.

원격 기능 알리기 및 쿼리
CapabilityClient는 Wear OS 네트워크의 어느 노드가 어떤 맞춤 앱 기능을 지원하는지에 관한 정보를 제공합니다. 노드는 네트워크에 연결된 휴대기기와 웨어러블 기기를 모두 나타냅니다. 기능은 앱이 빌드 시간에 정의하거나 런타임에 동적으로 구성되는 기능입니다.
예를 들어 모바일 Android 앱에서는 동영상 재생의 원격 제어를 지원한다고 알릴 수 있습니다. 해당 앱의 웨어러블 버전이 설치되면 CapabilityClient를 사용하여 모바일 버전의 앱이 설치되어 있고 이 기능을 지원하는지 확인할 수 있습니다. 지원하는 경우 웨어러블 앱에서는 재생/일시중지 버튼을 표시하여 메시지를 통해 다른 기기의 동영상을 제어할 수 있습니다.
이는 지원되는 웨어러블 앱 등록정보 기능을 사용하여 반대 방향으로도 작동할 수 있습니다.
메시지 보내기
MessageClient는 메시지를 보낼 수 있으며 웨어러블에서 휴대기기의 미디어 플레이어를 제어하거나 휴대기기에서 웨어러블에 관한 인텐트를 시작하는 것과 같은 리모트 프로시져 콜(RPC)에 적합합니다. 메시지는 단방향 요청이나 요청 또는 응답 통신 모델에도 매우 유용합니다.
휴대기기와 웨어러블이 연결되면 시스템은 전달을 위한 대기열에 메시지를 추가하고 성공 결과 코드를 반환합니다. 기기가 연결되어 있지 않으면 오류가 반환됩니다. 성공 결과 코드는 메시지가 성공적으로 전송되었음을 나타내는 것은 아닙니다. 기기가 결과 코드를 수신한 후 연결 해제될 수 있기 때문입니다.
데이터 전송
ChannelClient는 데이터를 휴대기기에서 웨어러블 기기로 전송할 수 있습니다. ChannelClient를 사용하면 다음 작업을 할 수 있습니다.
  • DataItem 객체에 연결된 Asset 객체를 사용할 때 제공되는 자동 동기화 없이 인터넷을 사용할 수 없는 경우 두 개 이상의 연결된 기기 간에 데이터 파일을 전송합니다. ChannelClient는 연결된 기기와 동기화하기 전에 로컬 기기에 애셋의 복사본을 만드는 DataClient에 비해 디스크 공간을 덜 차지합니다.
  • 너무 커서 MessageClient를 사용하여 전송할 수 없는 파일을 안정적으로 전송할 수 있습니다.
  • 마이크의 음성 데이터와 같은 스트림된 데이터를 전송합니다.
데이터 동기화
DataClient는 구성요소가 DataItem 또는 Asset을 읽거나 여기에 쓸 수 있는 API를 노출합니다.
DataItem은 Wear OS 네트워크의 모든 기기에서 동기화됩니다. 노드에 연결되지 않은 상태에서 데이터 항목을 설정할 수 있습니다. 이러한 데이터 항목은 노드가 온라인 상태가 될 때 동기화됩니다.
데이터 항목은 항목을 만든 애플리케이션에서만 사용할 수 있으며 다른 노드의 해당 애플리케이션에서만 액세스할 수 있습니다. 일반적으로 크기가 작습니다. 더 크고 영구적인 데이터 객체(예: 이미지)를 전송하는 데는 Assets를 사용합니다.
Wear OS는 휴대기기에 연결된 여러 웨어러블을 지원합니다. 따라서 사용자가 휴대기기에 메모를 저장하면 그 사용자의 모든 Wear OS 기기에 자동으로 메모가 나타납니다. Google 서버는 기기 간 데이터 동기화를 지원하기 위해 기기 네트워크에 클라우드 노드를 호스팅합니다. 시스템은 직접 연결된 기기, 클라우드 노드, 그리고 Wi-Fi를 통해 클라우드 노드에 연결된 웨어러블 기기에 데이터를 동기화합니다.

경고: 항목은 앱이 설치되어 있지 않은 기기를 포함하여 사용 가능한 모든 Wear OS 기기로 전송됩니다. 많은 양의 데이터를 동기화하는 경우 '수신기' 앱이 설치되어 있고 온라인 상태인지 확인하여 휴대기기와 Wear OS 기기 모두에서 리소스를 낭비하지 않도록 하세요.

중요한 데이터 영역 이벤트 수신 대기(서비스용)
WearableListenerService를 확장하면 서비스의 중요한 데이터 영역 이벤트를 수신 대기할 수 있습니다. 시스템은 WearableListenerService의 수명 주기를 관리하며, 데이터 항목이나 메시지를 전송해야 하면 서비스에 바인딩하고 필요한 작업이 없으면 서비스 바인딩을 해제합니다.
중요한 데이터 영역 이벤트 수신 대기(포그라운드 활동용)
활동에서 OnDataChangedListener를 구현하면 포그라운드에서 활동이 일어날 때 중요한 데이터 영역 이벤트를 수신 대기할 수 있습니다. WearableListenerService 대신 이 방법을 사용하면 사용자가 앱을 적극적으로 사용하는 경우에만 변경사항을 수신 대기할 수 있습니다.

경고: 휴대기기와 웨어러블 기기 간의 통신을 위해 설계된 API이므로, 휴대기기와 웨어러블 기기 간에 통신을 설정하려면 이러한 API만 사용할 수 있습니다. 예를 들면 하위 레벨 소켓을 열어 통신 채널을 만들려고 하지 마세요.

클라이언트 비교

다음 표는 각 클라이언트의 다양한 요구사항과 사용 사례를 보여줍니다.

데이터 클라이언트 메시지 클라이언트 채널 클라이언트
데이터 크기가 100kb를 초과함 아니요
현재 연결되어 있지 않은 노드로 메시지를 보낼 수 있음 아니요 아니요
통신 패턴 공유 네트워크 기반 리소스 1:1 메시지 전달(응답 있음) 1:1 스트리밍

연결

데이터 영역에는 두 가지 통신 옵션이 있습니다.

  1. 시계와 다른 기기 간에 블루투스 연결이 설정된 경우 데이터를 직접 교환합니다.
  2. LTE 또는 Wi-Fi와 같은 사용 가능한 네트워크를 통해 데이터를 교환합니다.
그림 1. 휴대기기 및 웨어러블 기기가 있는 노드의 샘플 네트워크

모든 데이터 영역 클라이언트는 기기에서 사용 가능한 연결에 따라 블루투스 또는 Google Cloud 동기화를 사용하여 데이터를 교환할 수 있습니다. 클라우드 동기화 서비스는 블루투스를 사용할 수 없을 때 웨어러블과 휴대전화 간의 데이터 통신 및 교환을 위한 Google의 메커니즘입니다.

보안

두 통신 옵션, 즉 블루투스 및 클라우드 동기화 서비스는 모두 엔드 투 엔드 암호화가 적용됩니다.

Google Play 서비스는 휴대전화와 시계 간의 통신이 안전하고 앱 간에 이루어지도록 하기 위해 다음과 같은 제한사항을 적용합니다.

  • 패키지 이름은 여러 기기에서 일치해야 합니다.
  • 패키지 서명은 모든 기기에서 일치해야 합니다.

블루투스

블루투스를 통해 기기가 연결되면 데이터 영역에서 이 연결을 사용합니다. 블루투스를 사용하면 Google Play 서비스에서 관리하는 표준 블루투스 암호화를 사용하여 기기 간에 암호화된 단일 채널이 있습니다.

Google Cloud

데이터 영역을 사용하여 전송된 데이터가 특정 시점에 Google 소유 서버를 사용할 수 있다고 가정합니다. 예를 들어 블루투스를 사용할 수 없는 경우 DataClient, MessageClient 또는 ChannelClient는 Google Cloud를 통해 자동으로 라우팅됩니다. Google Cloud를 통해 전송되는 모든 데이터에는 엔드 투 엔드 암호화가 적용됩니다.

키 생성 및 저장

클라우드 기반 통신을 위한 엔드 투 엔드 키는 휴대전화에서 생성되며 두 기기가 블루투스를 통해 연결되어 있는 경우 시계와 직접 교환됩니다. 이는 기기 설정 중에 발생합니다. Google 소유 서버는 어떠한 경우에도 이러한 키를 수신하지 않습니다.

Google 소유 서버를 통한 통신은 엔드 투 엔드 키 생성이 완료될 때까지 수행될 수 없습니다. 키는 페어링된 모든 기기의 Google Play 서비스 비공개 파일 저장소에 저장됩니다.

기기 백업

키는 백업되지 않으며 기기 외부로 전송되지 않습니다. 새 휴대전화를 사용하게 된 경우와 같이 새 키가 필요한 경우 시스템은 새 키를 생성하여 사용자가 여전히 보유하고 있는 다른 기기와 공유합니다.