코딩하는 개굴이

WearOS 에 대하여 본문

안드로이드

WearOS 에 대하여

개굴이모자 2023. 8. 19. 08:35
반응형

WearOS

Wear OS by Google은 사용자가 연결 상태를 유지하고 건강/피트니스 목표를 추적하고, 작업을 실행하며 자자신을 표현하는데 도움이 되는 앱을 만들 수 있다.

개발 원칙

Android 권장사항이 WearOS 에도 적용되나, 손목에 최적화된 특성으로 몇가지 차이점들이 있다. 아래 예시들을 간략하게 맛보자.

  • 앱의 resume 처리: 사용자가 앱을 재개 시, 사용자의 스크롤 위치를 기억해야한다.
  • 백스택: 사용자가 스와이프로 닫고, 스와이프해 백 스택 위로 이동할 수 있다.
  • 테마: 배터리를 절약하기 위해 어두운 모드만 제공한다.
  • …..

추가로, 새로운 WearOS 의 아래 품질 요구 사항은 2023.08.31 부터 적용되기 때문에 아래 리스트 뿐 아닌 Wear OS 앱 품질을 참고해야한다.

기본적인 부분을 제외하고, 특이사항이라고 생각되는 부분에 대해 정리해보았다.

  • 추가 노출 영역에 알림 추가
    • WearOS API 수준 30 이상에서는 지속적인 알림을 Ongoing Activity 에 페어링해 해당 알림을 사용자 인터페이스 내 추가 노출 영역에 추가해 장기적인 실행 활동에 대한 사용자의 참여를 높일 수 있다.
  • 오프라인 시나리오 지원
    • LTE 를 지원하지 않는 기기에서 휴대기기를 집에 두고왔을 경우 등의 오프라인 사용 사례를 위해 디자인한다.
  • 앱의 coldstart 에 대한 사용자 환경 개선 (coldstart→ 완전 종료 후 새로 시작하는 것)
    • 앱의 coldstart 에 대한 사용자 환경 개선을 위해 스플래시를 만들고 manifest 에서 windowBackground 를 맞춤 스플래시 드로어블로 설정하는 것을 권장한다.
  • 피트니스 앱의 고려사항
    • Android 10 부터 신체 활동 감지 권한 요청이 필요하다.
    • 앱이 포그라운드에서 작동할 수 있도록 즉, 사용 중 실행을 처리하도록 앱을 디자인해야한다.
    • 사용자가 앱과의 세션 중, 시계 사용을 중지하면 기기는 배터리 절약을 위해 시스템 대기 모드로 전환된다. WearOS 는 사용자가 지정된 시간 내 기기와 상호작용하게 되면 앱을 다시 활성상태로 되돌린다.
    • AmbientModeSupport 로 앱을 더 효율적으로 오래 표시하게 할 수도 있다.
    • 센서/위치 관리 최적화
      • 화면/앱이 활성화되면 센서를 flush 한다.
      • 더이상 필요하지 않으면 센서 리스너의 등록을 취소한다.
    • 운동 추적 시 터치가 잘못 눌릴 수 있으므로 터치 기능의 사용을 중지하는 것이 좋다.

WearOS 의 사용자 인터페이스

복잡하거나 일반적이지 않은 작업 혹은 작업 클러스터를 제공할 수 있는데 포커스가 맞춰진 뷰로, 몰입도가 높다.

Tiles

사용자의 즉각적인 요구사항을 빠르게 해결하는데 중점을 두어 카드를 탭해서 시계에서 앱을 바로 열수 있도록 한다.

complication

시계 화면에서 자주 반복되는 작업 혹은 한눈에 쉽게 확인하도록 제공하는 정보의 단위로, Tiles 처럼 사용자는 탭하여 시계에서 앱을 열어 더 자세히 살펴볼 수 있다.

알림

알림은 사용자에게 한눈에 확인할 수 있게하며 실시간에 민감한 정보들을 제공한다. 모바일 알림과 유사하다.

앱 런처 항목

사용자가 시계에서 작업 환경을 시작하고 돌아갈 수 있다. 앱들의 리스트로, 바로가기를 탭하면 앱이 실행된다.

Watch face (시계 화면)

사용자가 스타일을 표현할 수 있는 동적 디지털 캔버스에 표현된 시계 화면이다.

 

 

Wear OS 앱 만들기

프로젝트 생성하기

  1. File > New > New Project를 클릭한다.
  2. Project Template 창에서 Wear OS 탭을 클릭하고 Empty Compose Activity를 선택한 후 Next를 클릭한다. (WearOS 가 compose 를 지원하게 된 후로 developer 가이드도 compose 로 전부 맞춰져 있는 모양이다.)
  3. New Project 창에서 프로젝트 이름을 지정하고 표준 프로젝트 정보를 입력한 다음 Finish를 클릭한다.
  4. Android 스튜디오가 데이터 제공자용 앱 모듈로 프로젝트를 만든다.
  5. 앱 모듈의 build.gradle 파일에서 다음을 실행한다.
    • android 섹션에서 compileSdkVersion이 33으로 설정되었는지 확인한다.
    • android 섹션에서 targetSdkVersion이 30으로 설정되었는지 확인한다.
    • dependencies 섹션을 Wear OS 관련 종속 항목으로 바꾼다.
  6. Android 매니페스트 파일에서 [](<https://developer.android.com/guide/topics/manifest/uses-feature-element?hl=ko>) 태그가 정의되어 있는지 확인합니다. 다음 예와 같이 android:name="android.hardware.type.watch"를 정의합니다.
  7. <manifest> ...   <uses-feature android:name="android.hardware.type.watch" /> ... </manifest>
  8. Android 스튜디오 프로젝트를 동기화합니다. 새 모듈에서 코드를 실행하려면 다음 섹션에 나온 단계를 참고하세요.

Wear OS 앱에 대하여

UX 설계 원칙

  • 불편함이나 팔의 피로를 피하기 위해 몇 초 안에 작업을 완료할 수 있도록 앱의 중요한 작업에만 집중하게 한다.
  • 깊은 계층 구조를 피해야한다. (2 level 이상의 depth 구조는 피해야한다.)
  • 스크롤은 시계에서 컨텐츠를 제공하는 자연스러운 동작이.

앱의 개발이 필요할 경우

아래 3가지 경우에 대해서는 앱의 개발이 필요하다.

  • 추가 정보 제공이 필요한 경우
  • 컴플리케이션과 타일보다 더 풍부한 상호작용이 필요할 경우
  • 선호사항 및 설정 조절에 대한 액세스 제공이 필요할 경우

앱 만드는 방법

Wear OS 는 앱을 빌드하는 두가지 고유한 방법을 지원한다.

WearOS를 위한 컴포즈는 최신 선언형 UI toolkit 으로, 제일 권장되는 방법이다. 적은 코드와 앱 개발 프로세스의 가속화로, 선언적 UI 프레임워크의 일반적인 이점을 가지고 있다. 만일 View -based UI 앱이 있는 경우 전체를 다시 작성하지 않고, Compose Interoperability API를 사용하여 점차적으로 Compose를 채택할 수 있다.

 

독립형 WearOS 앱과 비독립형 WearOS 앱

보통은 휴대전화와는 별도로 작동하여 사용자가 Android / iOS 휴대전화에 액세스하지 않고도 시계에서 작업을 전부 할 수 있도록 하는 독립형이 좋지만, 시계 앱에 휴대전화 상호작용이 필요하다면 WearOS 앱을 비독립형으로 표시하고 사용자가 전화 앱을 사용할 수 있도록 할 수도 있다.

abb를 사용하여 동일한 애플리케이션 등록정보에서 각 사용자의 기기 설정에 최적화된 APK 를 자동으로 생성할 수 있기 떄문에 사용자가 앱을 실행하는데 필요한 코드와 리소스만 다운로드할 수 있다. WearOS 앱의 최소 수준은 API 25 (WearOS 2.0)이며 targetAPI 는 28 이상이어야한다. 최신 플랫폼에서 잘 작동할 수 있도록 하기 위해선는 30 (WEAROS 3) 으로 설정하여 Google Play 스토어를 통해 배포할 수 있도록 해야한다.

 

앱을 WearOS 앱으로 정의하기

앱의 매니페스트 파일에서 <uses-feature> 태그를 정의해야한다.

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

 

앱을 독립형 / 비독립형으로 식별하기

  • 독립형: 인증을 비롯한 핵심 기능을 위해 휴대전화 앱이 필요하지 않은 완전히 독립적인 앱으로, 가능하면 전화 앱의 기능은 선택적인 부분만 제공한다.
  • 비독립형: 인증일 비롯한 핵심 기능을 위해 휴대전화 혹은 다른 기기의 앱이 필요한 종속 앱이다.

WearOS 앱의 Android Menifest 파일에서 meta-data 요소에 값을 설정해 앱이 독립형인지 비독립형인지 선언한다.

시계 앱이 완전히 독립형 앱이라면 해당 값을 true 로 설정하여 Google Play 스토어에 이를 표시해야한다.

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

앱이 비독립형이고 종속된 경우 해당 값을 false 로 설정하며, 시계 앱이 연결된 휴대기기에 필요한 앱이 없음을 감지하면 사용자에게 앱을 설치하라는 메시지를 시계에서 표시해야한다.

 

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

WearOS 앱과 전화 앱 간에 코드를 공유 할 수 있다. 네트워크 등을 위한 공통 코드가 공유 라이브러리에 포함될 수 있는데, 이를 별도의 모듈에 포함할 수 있다.

또한, SharedPreferenceAPI, Room 등을 사용해 휴대전화와 같이 데이터를 로컬에 저장할 수 있다.

 

다른 기기에서 앱을 감지하기

시계 앱과 전화 앱은 서로의 사용 여부를 감지할 수 있다. CapabilityClient 를 사용하여 페어링된 기기에 존재를 알릴 수 있는데 정적 혹은 동적으로 사용자의 WearOS 네트워크 노드 (휴대전화/페어링된 시계나 클라우드)에 있을 때 기능 알리기 를 이용해 실행할 수 있다.

앱 중 하나가 다른 앱을 감지할 수 없는 경우 영향을 받는 기기에서 PlayStore 등록 정보를 열라는 메시지를 사용자에게 표시할 수 있는데, 이는 연결된 스마트폰 앱이 있어야 작동하는 비독립형 시계 앱을 위한 솔루션이다.

우선, 이를 위해서는 기기에서 PlayStore 를 사용할 수 있는지 PhoneDeviceType 을 이용해 확인하고 진행되어야한다. 더 자세한 내용은 GitHub에서 이 기능을 보여주는 샘플 앱과  Wear OS API 참조를 확인할 수 있다.

 

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

각 모바일/wearos 모듈에서 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>
<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 를 사용해 페어링된 휴대전화에 앱이 설치되어있는지 확인한다.
  2. 설치되어있지 않으면 PhoneDeviceType.getPhoneDeviceType() 메서드를 사용해 휴대전화 유형을 확인한다.
  3. PhoneDeviceType.DEVICE_TYPE_ANDROID 가 반환되면 휴대전화가 Android 임을 알 수 있고, WearOS 기기에서 RemoteActivityHelper.startRemoteActivity() 를 전화 앱의 마켓 URL (market://details?id=com.example.android.wearable.wear.finddevices)과 함께 사용해 휴대전화의 Playstore를 연다.
  4. PhoneDeviceType.DEVICE_TYPE_IOS 가 반환되면 휴대전화가 iOS 휴대전화이며 Playstore 를 사용할 수 없음을 알 수 있다. Wear OS 기기에서 RemoteActivityHelper.startRemoteActivity()를 앱의 iTunes URL(예: https://itunes.apple.com/us/app/yourappname)과 함께 호출하여 iPhone에서 App Store를 연다.
    1. iOS 기기에 앱이 설치되어있는지 확인할 수 없으므로 App Store 열기를 수동으로 트리거하는 매커니즘을 사용하는 것을 권장한다.

 

Android 휴대전화에서 앱 감지하기

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

  1. NodeClient 를 사용해 사용자의 휴대전화에 연결된 모든 시계를 찾는다.
  2. CapabilityClient 를 사용해 앱이 설치되어있는 사용자 시계를 확인한다.
  3. 앱이 사용자의 모든 시계에 설치되어있지 않으면 RemoteActivityHelper.startRemoteActivity() 메서드를 사용해 사용자가 휴대전화에서 나머지 WearOS 기기의 PlayStore 를 열도록 허용한다.

 

필요한 데이터만 가져오기

일반적으로 시계가 블루투스나 LTE 연결을 통해 연결된 경우, 시계에 따라 앱에 액세스 할 수 있는 대역폭이 초당 4KB 에 불과할 수 있다. 따라서, 큰 이미지는 축소하고, 필요한 데이터만 응답하는지 확인해야한다.

 

 

반응형
Comments