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

Wear OS 앱은 휴대전화와는 별도로 작동하여 사용자가 Android 또는 iOS 휴대전화에 액세스하지 않고도 시계에서 작업을 완료할 수 있도록 하는 것이 좋습니다. 시계 앱에 휴대전화 상호작용이 필요하다면 Wear OS 앱을 비독립형으로 표시하고 사용자가 전화 앱을 사용할 수 있도록 하는 조치를 취해야 합니다.

앱 계획

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

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

일반적으로 Wear OS 앱의 최소 API 수준은 API 수준 25(Wear OS 2.0)입니다. 대상 API 수준은 API 수준 28 이상이어야 합니다. 자세한 내용은 Google Play의 대상 API 수준 요구사항 충족을 참고하세요. 앱이 최신 플랫폼 버전에서 잘 작동할 수 있도록 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.standalone의 값을 설정하여 앱이 독립형인지 비독립형인지 선언합니다.

시계 앱이 완전히 독립적인 독립형 앱이라면 com.google.android.wearable.standalone 값을 true로 설정하여 Google Play 스토어에 이를 표시합니다.

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

시계 앱이 비독립형이고 핵심 기능을 위해 다른 앱에 종속된 경우 com.google.android.wearable.standalone 값을 false로 설정합니다. 이는 시계 앱에 다른 기기가 필요함을 나타내지만 Google Play 스토어의 앱 프로모션에는 영향을 미치지 않습니다.

참고: com.google.android.wearable.standalone 값이 false인 경우에도 전화 앱을 설치하기 전에 시계 앱을 설치할 수 있습니다. 따라서 이 페이지에 설명된 대로 시계 앱이 연결된 스마트폰에 필요한 전화 앱이 없음을 감지하면 사용자에게 전화 앱을 설치하라는 메시지를 표시하세요.

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

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

선택사항으로, 폼 팩터와 관련된 코드를 별도의 모듈에 포함할 수 있습니다.

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

다른 기기에서 앱 감지

시계 앱과 해당하는 전화 앱은 서로의 사용 가능 여부를 감지할 수 있습니다.

휴대전화 및 시계 앱은 CapabilityClient를 사용하여, 페어링된 기기에 존재를 알릴 수 있습니다. 정적 또는 동적으로 이를 실행할 수 있습니다.

앱이 사용자의 Wear OS 네트워크 노드(예: 휴대전화, 페어링된 시계 또는 클라우드)에 있을 때 CapabilityClient를 사용하면 다른 앱에서 이를 감지할 수 있습니다. 자세한 내용은 기능 알리기를 참고하세요.

앱 중 하나가 다른 앱을 감지할 수 없는 경우 영향을 받는 기기에서 Play 스토어 등록정보를 열라는 메시지를 사용자에게 표시할 수 있습니다. 이 기능은 연결된 스마트폰 앱이 있어야 제대로 작동하는 시계 앱을 위한 솔루션입니다.

기기에서 Play 스토어를 사용할 수 있는지 확인해야 합니다. 일부 휴대전화(예: iPhone)는 Play 스토어를 지원하지 않기 때문입니다.

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

  • 독립형 시계 앱에 전화 앱이 필요합니다.
  • 전화 앱에 독립형 시계 앱이 필요합니다.

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

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

각 기기 유형(시계 또는 휴대전화)에 상응하는 앱의 고유한 기능 이름 문자열을 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()를 호출하여 휴대전화의 Play 스토어를 엽니다. 전화 앱의 마켓 URI를 사용합니다. 이는 Wear 앱의 URI와 다를 수 있습니다. 예를 들어 market://details?id=com.example.android.wearable.wear.finddevices와 같은 마켓 URI를 사용합니다.
  4. PhoneDeviceType.DEVICE_TYPE_IOS가 반환되면 휴대전화가 iOS 휴대전화이며 Play 스토어를 사용할 수 없습니다. Wear OS 기기에서 RemoteActivityHelper.startRemoteActivity()를 호출하여 iPhone에서 App Store를 엽니다. 앱의 iTunes URL(예: https://itunes.apple.com/us/app/yourappname)을 지정할 수 있습니다.

    Wear OS에서는 전화 앱이 iOS 기기에 설치되어 있는지를 프로그래매틱 방식으로 확인할 수 없습니다. App Store 열기를 수동으로 트리거하는 메커니즘을 사용자에게 제공하는 것이 좋습니다.

참고: 앞에서 설명한 RemoteActivityHelper API를 사용하여 시계에서 휴대전화에 열려 있는 URL을 지정하고 전화 앱이 필요하지 않다고 지정합니다.

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

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

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

Java

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

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

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

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

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

  1. NodeClient를 사용하여 사용자의 휴대전화에 연결된 모든 시계를 찾습니다. 자세한 내용은 GitHub의 샘플 앱을 참고하세요.
  2. CapabilityClient를 사용하여 앱이 설치되어 있는 사용자 시계를 확인합니다.
  3. 앱이 사용자의 모든 시계에 설치되어 있지 않으면 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의 사용을 더 자세히 보여줍니다.