독립형 Wear OS 앱과 비독립형 Wear OS 앱 비교

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

기본적으로 Wear OS 앱이 휴대전화와는 별도로 작동하는 것이 좋습니다. 그러면 사용자가 Android 휴대전화나 iOS 휴대전화에 액세스하지 않고도 시계에서 작업을 완료할 수 있습니다. 그러나 앱에 휴대전화 상호작용이 있어야 시계 앱이 작동한다면 Wear OS 앱을 종속 앱으로 표시해야 합니다.

앱 계획

Android App Bundle을 사용하여 동일한 애플리케이션 등록정보에서 각 사용자의 기기 설정에 최적화된 APK를 자동으로 생성할 수 있습니다. 따라서 사용자는 앱을 실행하는 데 필요한 코드와 리소스만 다운로드해도 됩니다.

Google Play 스토어를 통해 배포할 수 있도록 앱을 설정하는 방법에 관한 자세한 내용은 Wear OS 앱 패키징 및 배포Android App Bundle 시작 가이드를 참고하세요.

일반적으로 Wear OS 앱의 최소 API 수준은 API 수준 25(Wear OS 2.0)입니다. 대상 API 수준은 API 수준 28 이상이어야 합니다(자세히 알아보기). 앱이 최신 플랫폼 버전에서 잘 작동하도록 targetSdkVersion을 API 수준 30(Wear OS 3)으로 설정하는 것이 좋습니다.

네트워크 요청 및 고대역폭 네트워크 액세스에 관한 자세한 내용은 Wear OS의 네트워크 액세스 및 동기화를 참고하세요.

앱을 Wear OS 앱으로 정의

앱의 Android 매니페스트 파일에서 <uses-feature> 태그를 정의해야 합니다. 다음 예와 같이 시계 앱임을 표시합니다.

  <manifest>
  ...
  <uses-feature android:name="android.hardware.type.watch" />
  ...
  </manifest>
  

앱을 독립형으로 확인

Wear OS 앱은 Android 매니페스트 파일에서 meta-data 요소 com.google.android.wearable.standalonetrue 또는 false로 설정해야 합니다.

이 요소는 시계 앱이 핵심 기능 작동을 위해 다른 기기가 필요하지 않은 독립형 앱인지를 나타냅니다. 이 경우 요소를 true로 설정해야 합니다.

시계 앱은 다음 중 하나로 간주될 수 있습니다.

  • 독립형: 인증을 비롯한 핵심 기능을 위해 전화 앱이 필요하지 않은 완전히 독립적인 앱입니다. 전화 앱은 선택적 기능만 제공합니다.
  • 비독립형: 인증을 비롯한 핵심 기능을 위해 전화 앱이나 다른 기기가 필요한 종속적인 앱입니다.

시계 앱이 완전히 독립적인 경우 독립형 카테고리에 포함됩니다. 이 meta-data 요소의 값을 true로 설정하여 Google Play 스토어에 이 카테고리를 지정해야 합니다.

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

시계 앱이 비독립형인 경우 위 meta-data 요소 값을 false로 설정합니다. 요소를 false로 설정하면 시계 앱에 다른 기기가 필요함을 의미하지만 Google Play 스토어의 앱 프로모션에는 영향을 미치지 않습니다.

참고: 값이 false인 경우에도 전화 앱을 설치하기 전에 시계 앱을 설치할 수 있습니다. 따라서 연결된 스마트폰에 필요한 전화 앱이 없음이 감지되면 시계 앱은 사용자에게 전화 앱을 설치하라는 메시지를 표시해야 합니다.

공유 코드 및 데이터 저장용량

Wear OS 앱과 전화 앱 간에 코드를 공유할 수 있습니다. 선택사항으로, 폼 팩터와 관련된 코드를 별도의 모듈에 포함할 수 있습니다.

예를 들어 네트워킹을 위한 공통 코드를 공유 라이브러리에 포함할 수 있습니다.

표준 Android 저장용량 API를 사용하여 휴대전화와 같이 데이터를 로컬에 저장할 수 있습니다. 예를 들어 SharedPreferences API 또는 Room 지속성 라이브러리를 사용할 수 있습니다.

다른 기기에서 앱 감지

시계 앱은 전화 앱이 사용 가능한지 감지할 수 있고, 전화 앱도 시계 앱이 사용 가능한지 감지할 수 있습니다.

전화 앱이나 시계 앱은 CapabilityClient를 사용하여 앱이 있음을 페어링된 기기에 알릴 수 있습니다. 정적 및 동적으로 이 작업을 실행할 수 있습니다. 앱이 사용자의 Wear OS 네트워크 노드(예: 휴대전화, 페어링된 시계 또는 클라우드)에 있는 경우 CapabilityClient를 통해 다른 앱에서 앱이 설치되어 있는지 감지할 수 있습니다. 자세한 내용은 기능 알리기를 참고하세요.

앱 중 하나가 다른 앱을 감지할 수 없는 경우 사용자가 원격 기기에서 Play 스토어 등록정보를 열도록 허용할 수 있습니다. 이 기능은 연결된 스마트폰 앱이 있어야 제대로 작동하는 시계 앱을 위한 솔루션입니다. 필수 요건으로, 원격 기기에 Play 스토어가 있는지 확인해야 합니다.

일부 휴대전화(예: iPhone)는 Play 스토어를 지원하지 않습니다.

이 섹션에서는 다음 시나리오에 관한 권장사항을 설명합니다.

  • 독립형 시계 앱에 전화 앱이 필요한 경우
  • 전화 앱에 독립형 시계 앱이 필요한 경우

GitHub에서 이 기능을 보여주는 샘플을 검토합니다. 아래에 설명된 클래스에 관한 자세한 내용은 Wear OS API 참조를 확인하세요. 또한 Wear OS API 참조에는 PhoneDeviceType 클래스에 관한 정보가 포함되어 있으며 이 클래스에는 연결된 스마트폰이 Android 기기인지 iOS 기기인지 Wear OS 앱에서 확인할 수 있는 getPhoneDeviceType() 메서드가 포함되어 있습니다.

앱 감지를 위해 기능 이름 지정

각 기기 유형(시계 또는 휴대전화)에 상응하는 앱의 고유한 기능 이름 문자열을 res/values/wear.xml 파일에 지정합니다.

예를 들어 모바일 모듈의 wear.xml 파일은 다음을 포함할 수 있습니다.

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_phone_app</item>
    </string-array>
</resources>

Wear OS 모듈의 wear.xml 파일은 다음과 같이 기능 이름의 다른 값을 포함합니다.

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_wear_app</item>
    </string-array>
</resources>

자세한 내용은 기능 알리기를 참고하세요.

앱 감지 및 시계에서 URL 열기

시계 앱에서 사용자의 연결된 스마트폰에 전화 앱이 있는지 감지할 수 있습니다.

  1. CapabilityClient를 사용하여 페어링된 휴대전화에 전화 앱이 설치되어 있는지 확인합니다. 자세한 내용은 GitHub의 샘플을 참고하세요.
  2. 휴대전화에 전화 앱이 설치되어 있지 않으면 PhoneDeviceType.getPhoneDeviceType() 메서드를 사용하여 휴대전화 유형을 확인합니다.
  3. PhoneDeviceType.DEVICE_TYPE_ANDROID가 반환되면 휴대전화가 Android 휴대전화입니다. Wear OS 기기에서 RemoteActivityHelper.startRemoteActivity()를 호출하여 휴대전화의 앱 스토어를 엽니다. 전화 앱의 마켓 URI를 사용합니다(휴대전화 URI와 다를 수 있음). 예를 들어 market://details?id=com.example.android.wearable.wear.finddevices와 같은 마켓 URI를 사용합니다.
  4. PhoneDeviceType.DEVICE_TYPE_IOS가 반환되면 휴대전화가 iOS 휴대전화입니다(Play 스토어를 사용할 수 없음). Wear 기기에서 RemoteActivityHelper.startRemoteActivity()를 호출하여 iPhone에서 App Store를 엽니다. 앱의 iTunes URL(예: https://itunes.apple.com/us/app/yourappname)을 지정할 수 있습니다. iPhone의 Wear OS에서는 전화 앱이 설치되어 있는지 여부를 프로그래매틱 방식으로 확인할 수 없습니다. 권장사항은 App Store 열기를 수동으로 트리거하는 메커니즘(예: 버튼)을 사용자에게 제공하는 것입니다.

위에서 설명한 RemoteActivityHelper API를 사용하면 시계를 통해 휴대전화에서 임의 URL이 열리도록 지정할 수 있으며 전화 앱이 필요하지 않습니다.

페어링된 휴대전화 유형 감지에 관한 세부정보

다음은 getPhoneDeviceType() 메서드를 사용하여 시계가 페어링된 휴대전화의 유형을 확인하는 스니펫입니다.

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

자바

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

getPhoneDeviceType() 메서드에서 반환하는 값은 다음 중 하나입니다.

반환 값 설명
DEVICE_TYPE_ANDROID 호환 휴대전화가 Android 기기입니다.
DEVICE_TYPE_IOS 연결된 스마트폰이 iOS 기기입니다.
DEVICE_TYPE_ERROR_UNKNOWN 페어링된 휴대전화 유형을 확인하는 중 오류가 발생했습니다. 나중에 다시 확인해야 합니다.

Android 휴대전화에서 시작하는 앱 감지

Android 휴대전화에서 사용자의 Wear OS 기기에 시계 앱이 있는지 감지할 수 있습니다.

  1. NodeClient를 사용하여 사용자의 휴대전화에 연결된 모든 시계를 찾습니다. 자세한 내용은 GitHub의 샘플을 참고하세요.
  2. CapabilityClient를 사용하여 앱이 설치되어 있는 사용자 시계를 확인합니다.
  3. 앱이 설치된 사용자 시계가 없는 경우(1단계의 결과와 2단계의 결과 비교) 사용자가 RemoteActivityHelper.startRemoteActivity() 메서드를 통해 휴대전화에서 나머지 Wear OS 기기의 Play 스토어를 열도록 허용합니다. 구체적으로, Wear OS 앱의 마켓 URI(전화 앱의 URI와 다를 수 있음)를 사용합니다. 예를 들어 market://details?id=com.example.android.wearable.wear.finddevices와 같은 마켓 URI를 사용합니다.

iPhone과 페어링된 시계의 위치 데이터

iPhone과 페어링된 시계의 경우, 개발자가 통합 위치 정보 제공자(FLP)를 사용하여 시계에서 위치 데이터를 가져와야 합니다. Wear OS에서 위치 감지를 참고하세요.

연결된 스마트폰을 사용할 수 있는 경우, FLP는 위치 데이터를 위해 연결된 스마트폰을 사용합니다.

필요한 데이터만 가져오기

일반적으로 인터넷에서 데이터를 얻는 경우 필요한 데이터만 가져와야 합니다. 그러지 않으면 불필요한 지연 시간, 메모리 사용 및 배터리 사용이 발생할 수 있습니다.

시계가 블루투스 LE 연결을 통해 연결된 경우, 시계에 따라 앱에서 액세스할 수 있는 대역폭이 초당 4KB에 불과할 수 있습니다. 따라서 다음 단계를 실행하는 것이 좋습니다.

  • 네트워크 요청 및 응답에서 전화 앱에만 사용되는 기타 데이터 감사
  • 네트워크를 통해 시계로 보내기 전에 큰 이미지 축소

고대역폭 네트워크가 필요한 경우 고대역폭 네트워크 액세스를 참고하세요.

추가 코드 샘플

WearVerifyRemoteApp 샘플은 이 페이지에 설명된 API를 사용하는 방법을 자세히 보여줍니다.