Wear OS 6에는 새로운 API인 워치 페이스 푸시가 도입되어 더욱 고급 워치 페이스 게시 사용 사례를 만들 수 있습니다.
워치 페이스 푸시를 사용해야 하는 경우 파악
워치 페이스 푸시는 개발자가 워치 페이스를 직접 추가, 업데이트 또는 삭제할 수 있는 Wear OS의 API입니다. 표준 워치 페이스 개발에는 필요하지 않습니다.
워치 페이스 푸시와 함께 사용되는 워치 페이스는 워치 페이스 형식을 사용하여 작성해야 합니다. 여기에는 워치 페이스 디자이너, 워치 페이스 스튜디오 또는 워치 페이스 형식을 사용하는 워치 페이스를 생성하는 기타 도구를 사용하여 디자인된 워치 페이스가 포함될 수 있습니다.
워치 페이스 푸시 API는 여러 가지 방법으로 사용할 수 있지만 다음 표에서는 주요 사용 사례를 안내합니다.
| 사용 사례 | 추천 솔루션 | 복잡성 |
|---|---|---|
| 개별 워치 페이스를 만들어 게시하고 싶습니다. | 워치 페이스 형식(직접 또는 워치 페이스 디자이너나 워치 페이스 스튜디오와 같은 도구를 통해)을 사용하고 Google Play에 게시합니다. | 낮음 |
| 사용자가 엄선된 컬렉션에서 워치 페이스를 선택하거나 Wear OS 시계에 직접 설치할 워치 페이스를 디자인하고 맞춤설정할 수 있는 휴대전화 앱을 만들고 싶습니다. | 시계의 워치 페이스 푸시 API를 사용하여 시계와 휴대전화 모두를 위한 앱을 만듭니다. | 높음 |
목적
워치 페이스 푸시 API의 표준 사용 사례는 마켓플레이스 앱을 만드는 것입니다. 이 앱에서 사용자는 휴대전화의 엄선된 컬렉션에서 워치 페이스를 선택하고 연결된 시계에 이러한 워치 페이스를 직접 설치할 수 있습니다.
고려사항
워치 페이스 빌드에 관한 자세한 내용은 워치 페이스 형식 가이드(워치 페이스 푸시를 사용하여 배포된 워치 페이스는 일반 워치 페이스 형식 워치 페이스임)를 참고하세요.
워치 페이스를 빌드할 때는 다음 고려사항을 염두에 두세요.
패키지 이름
워치 페이스 푸시를 사용하여 설치된 워치 페이스는 다음 규칙을 준수해야 합니다.
<app name>.watchfacepush.<watchface name>
여기서 <app name>은 워치 페이스
푸시 API를 호출하는 앱의 패키지 이름입니다.
예를 들어 패키지 이름이 com.example.mymarketplace인 앱의 경우 다음은 유효한 워치 페이스 패키지 이름입니다.
com.example.mymarketplace.watchfacepush.watchface1com.example.mymarketplace.watchfacepush.watchface2com.example.mymarketplace.watchfacepush.another_watchface
API는 이 규칙을 준수하지 않는 워치 페이스를 거부합니다.
패키지 콘텐츠
시스템은 APK 콘텐츠를 엄격하게 적용합니다. 무해한 메타데이터 파일 및 기타 아티팩트가 포함된 워치 페이스 형식 APK를 생성하는 것은 기술적으로 가능하지만 Google Play에서 허용되더라도 워치 페이스 푸시 유효성 검사를 통과하지 못할 수 있습니다 (아래 참고).
각 워치 페이스 APK에는 다음 파일/경로만 포함되어야 합니다.
/AndroidManifest.xml/resources.arsc/res/**/META-INF/**
또한 AndroidManifest.xml 파일에는 다음 태그만 포함되어야 합니다.
<manifest><uses-feature><uses-sdk><application><property><meta-data>
마지막으로 패키지는 minSdk를 최소 33으로 지정해야 하며
<application> 태그는 android:hasCode="false" 속성을 지정해야 합니다.
유효성 검사
Google Play를 통해 배포되는 일반 워치 페이스와 달리 Marketplace 앱은 각 워치 페이스 푸시 워치 페이스가 올바르게 구성되고 성능이 우수한지 확인해야 합니다.
워치 페이스 푸시는 다음 유효성 검사 체크를 사용하여 각 워치 페이스의 품질을 확인합니다.
- 워치 페이스 푸시 API를 통해 설치되거나 업데이트되는 모든 워치 페이스는 워치 페이스 푸시 유효성 검사 도구를 통과해야 합니다.
- API와 함께 사용할 유효성 검사 토큰 을 생성하려면 공식 유효성 검사 도구만 사용하세요.
- 유효성 검사를 실행할 때 유효성 검사 도구가 최신 상태여야 합니다.
변경되지 않은 APK는 다시 검증할 필요가 없습니다. 사용된 유효성 검사 도구의 버전이 대체되더라도 토큰은 만료되지 않습니다.
동시에 유효성 검사기가 주기적으로 업데이트되므로 유효성 검사를 가끔 다시 실행하는 것이 좋습니다.
유효성 검사기 실행
유효성 검사기는 세 가지 형태로 제공됩니다.
- CLI 도구
- JVM과 함께 사용할 라이브러리
- Android에서 사용할 라이브러리
명령줄 유효성 검사기 사용
- Google's Maven 저장소에서 유효성 검사기를 가져옵니다.
다음과 같이 도구를 실행합니다.
java -jar validator-push-cli-1.0.0-alpha10.jar \ --apk_path=<your watch face>.apk \ --package_name=<your marketplace package name>성공하면 출력에 인증 토큰이 포함됩니다. 워치 페이스를 추가하거나 업데이트할 때 워치 페이스 푸시 API에 제공해야 합니다.
오류가 발생하면 출력에 실패한 특정 체크에 관한 세부정보가 포함됩니다.
라이브러리 유효성 검사기 사용
Google 및 Jitpack 저장소를 포함합니다. 유효성 검사기 라이브러리를 사용하려면 둘 다 필요합니다.
repositories { ... google() maven { url = uri("https://jitpack.io") content { includeGroup("com.github.xgouchet") } } }프로젝트에 유효성 검사기 종속 항목을 포함합니다.
// For use on JVM implementation("com.google.android.wearable.watchface.validator:validator-push:1.0.0-alpha10") // For use on Android implementation("com.google.android.wearable.watchface.validator:validator-push-android:1.0.0-alpha10")유효성 검사기를 실행합니다.
val validator = DwfValidatorFactory.create() val result = validator.validate(watchFaceFile, appPackageName) if (result.failures().isEmpty()) { val token = result.validationToken() println("Validation token: $token") // Validation success - continue with the token // ... } else { // There were failures, handle them accordingly - validation has failed. result.failures().forEach { failure -> println("FAILURE: ${failure.name()}: ${failure.failureMessage()}") // ... } }
이 라이브러리 사용 예는 GitHub 샘플을 참고하세요. Android 기반 유효성 검사기와 함께 사용할 기기 내 APK 빌드에 유용한 휴대용 애셋 컴파일러 키트 (Pack) 라이브러리도 참고하세요.
APK 크기
워치 페이스 푸시 워치 페이스를 사용할 때는 APK 크기를 최소화하는 데 특히 주의하세요. 워치 페이스 APK는 휴대전화 앱에서 워치용 앱으로 블루투스를 통해 전송될 가능성이 높으며, 이 경우 속도가 느릴 수 있습니다.
APK가 너무 크면 전송하는 데 상당한 시간이 걸릴 수 있으며, 이는 사용자 환경이 좋지 않고 배터리가 소모되는 원인이 됩니다.
pngquant와 같은 적절한 라이브러리를 사용하여 이미지 파일 크기를 최소화합니다- 워치 페이스 컬렉션 빌드 프로세스에 이를 포함합니다.
- 이미지 크기가 사용하는 비율에 적합한지 확인합니다.
- 이미지를 적절하게 자르고 주변 배경을 삭제합니다.
- 글꼴 파일 크기를 줄입니다.
- 예를 들어 특정 글꼴을
형식
HH:MM으로 시간을 표시하는 데만 사용하는 경우pyftsubset과 같은 도구를 사용하여 글꼴 파일에 필요한 글리프만 포함되도록 제한할 수 있습니다. 이렇게 하면 결과 글꼴 파일 및 APK의 크기를 크게 줄일 수 있습니다. 다른 경우의 글꼴 파일 크기 최소화에 관한 자세한 내용은 이 블로그 게시물을 참고하세요.
- 예를 들어 특정 글꼴을
형식
APK 크기를 최소화하는 방법에 관한 추가 제안은 메모리 사용량 최적화 가이드를 참고하세요.
APK 서명
일반 APK와 마찬가지로 모든 워치 페이스에 서명해야 합니다. 기본 앱에서 사용하는 키와 다른 키를 만들고 모든 워치 페이스에 다른 키를 사용합니다.
아키텍처
시스템의 네 가지 주요 구성요소를 고려하세요.
- 클라우드 기반 스토리지: 표준 Marketplace 앱에서 사용자가 사용할 수 있도록 클라우드에 워치 페이스를 빌드하고
저장합니다. 워치 페이스에는 다음과 같은 속성이 있습니다.
- 일반 워치 페이스 형식 APK로 미리 빌드됩니다.
- 각 APK에는 단일 워치 페이스 형식 기반 워치 페이스만 포함되어 있습니다.
- 워치 페이스 푸시 유효성 검사 프로세스로 검증되고 연결된 인증 토큰과 함께 저장됩니다.
- 필요에 따라 휴대전화 앱에서 검색할 수 있습니다.
- 휴대전화 앱: 휴대전화 앱은 사용자가 시스템과 상호작용하는 주요 방법입니다. 사용자는 다음 작업을 할 수 있습니다.
- 워치 페이스 카탈로그 탐색 및 검색
- 시계에 워치 페이스 설치 또는 교체
- 워치용 앱: 워치용 앱에는 일반적으로 중요한 사용자 인터페이스가 없을 수 있습니다. 주로 휴대전화 앱과 워치 페이스 푸시 API 간의 브리지 역할을 하며 다음과 같은 기능을 제공합니다.
- 워치 페이스 푸시 API를 사용하여 워치 페이스 설치/업데이트 또는 교체
- 필요한 권한 요청 및 사용자에게 메시지 표시
- 기본 워치 페이스 제공
- 워치 페이스의 최소 캐시 제공
- 휴대전화-시계 통신: 휴대전화 및 워치용 앱 통신은 전반적인 환경의 성공에 매우 중요합니다. 다음과 같은 작업을 허용하는 Wear OS 데이터 레이어 API를 사용합니다.
- 설치 감지: Capabilities 및
CapabilityClient를 사용하여 전화 앱은 워치용 앱의 부재를 감지할 수 있으며 그 반대도 마찬가지입니다. 그런 다음 인텐트를 Play 스토어로 실행하여 누락된 폼 팩터를 설치할 수 있습니다. - 상태 관리:
DataClient또는MessageClient를 사용하여 휴대전화가 시계의 상태와 동기화되도록 유지합니다(예: 활성 워치 페이스의 상태 동기화). - APK 전송:
ChannelClient또는MessageClient를 사용하여 휴대전화에서 시계로 APK를 전송합니다. - 원격 호출:
Messageclient를 사용하여 휴대전화에서 시계에 워치 페이스 푸시 API를 호출하도록 지시할 수 있습니다(예: 워치 페이스 설치).
- 설치 감지: Capabilities 및
자세한 내용은 데이터 레이어 API 가이드를 참고하세요.