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.watchface1
com.example.mymarketplace.watchfacepush.watchface2
com.example.mymarketplace.watchfacepush.another_watchface
이 규칙을 준수하지 않는 시계 모드는 API에 의해 거부됩니다.
패키지 콘텐츠
APK 콘텐츠는 엄격하게 적용됩니다. 워치 페이스 형식이 다음 제약 조건을 준수하도록 주의해야 합니다. 무해한 메타데이터 파일과 기타 아티팩트가 포함된 워치 페이스 형식 APK를 기술적으로 생성할 수 있습니다. 이러한 APK는 Google Play에서 허용될 수 있지만 워치 페이스 푸시 유효성 검사 (아래 참고)를 통과하지는 않습니다.
각 시계 화면 APK에서 다음 파일/경로만 허용됩니다.
/AndroidManifest.xml
/resources.arsc
/res/**
/META-INF/**
또한 AndroidManifest.xml
파일에서는 다음 태그만 허용됩니다.
<manifest>
<uses-feature>
<uses-sdk>
<application>
<property>
<meta-data>
마지막으로 패키지는 33
이상의 minSdk
를 지정해야 하며 <application>
태그는 android:hasCode="false"
속성을 지정해야 합니다.
유효성 검사
Google Play를 통해 배포되는 일반 시계 화면과 달리 워치 페이스 푸시에서는 각 시계 화면이 형식이 올바르고 성능이 우수한지 확인하는 것이 마켓 앱의 책임입니다.
Google Play에서는 다음 유효성 검사 확인을 사용하여 시계 화면 푸시를 사용하는 각 시계 화면의 품질을 확인합니다.
- 워치 페이스 푸시 API를 통해 설치되거나 업데이트되는 모든 워치 페이스는 워치 페이스 푸시 유효성 검사 도구를 통과해야 합니다.
- API와 함께 사용할 유효성 검사 토큰은 공식 유효성 검사 도구로만 생성할 수 있습니다.
- 사용된 검증 도구는 검증 실행 시 최신 상태여야 합니다.
변경되지 않은 APK를 다시 검증할 필요는 없습니다. 사용된 검사 도구의 버전이 대체되더라도 토큰은 만료되지 않습니다.
또한 검사기가 주기적으로 업데이트되므로 가끔 유효성 검사를 다시 실행하는 것이 좋습니다.
유효성 검사기 실행
유효성 검사기는 다음 세 가지 형식으로 제공됩니다.
- CLI 도구
- JVM과 함께 사용할 라이브러리
- Android에서 사용할 수 있는 라이브러리
명령줄 유효성 검사기 사용
- Google의 Maven 저장소에서 유효성 검사기를 가져옵니다.
다음과 같이 도구를 실행합니다.
java -jar validator-push-cli-1.0.0-alpha06.jar \ --apk_path=<your watch face>.apk \ --package_name=<your marketplace package name>
성공하면 출력에 검증 토큰이 포함되며, 시계 화면을 추가하거나 업데이트할 때 시계 화면 푸시 API에 제공해야 합니다.
오류가 발생하면 출력에 실패한 특정 검사에 관한 세부정보가 포함됩니다.
라이브러리 유효성 검사기 사용
유효성 검사기 종속 항목에 필요한 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:1.0.0-alpha06") // For use on Android implementation("com.google.android.wearable.watchface.validator-android:1.0.0-alpha06")
유효성 검사기를 실행합니다.
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를 빌드하는 데 유용한 Portable Asset Compiler Kit (Pack) 라이브러리도 참고하세요.
APK 크기
APK 크기가 최소로 유지되도록 시계 화면 푸시 시계 화면에 특히 주의해야 합니다. 시계 화면 APK는 블루투스를 통해 휴대전화 앱에서 시계 앱으로 전송될 수 있으며 이는 느릴 수 있습니다.
APK가 너무 크면 전송하는 데 상당한 시간이 걸릴 수 있으며 이는 사용자 환경이 좋지 않을 뿐만 아니라 배터리 소모도 심합니다.
pngquant
와 같은 적절한 라이브러리를 사용하여 이미지 파일 크기를 최소로 유지합니다.- 시계 화면 컬렉션 빌드 프로세스에 이를 포함하세요.
- 이미지의 크기가 사용될 크기에 적합한지 확인합니다.
- 주변 배경을 삭제하도록 이미지를 적절하게 자릅니다.
- 글꼴 파일 크기 줄이기
- 예를 들어
HH:MM
형식으로 시간을 표시하는 데만 특정 글꼴을 사용하는 경우pyftsubset
과 같은 도구를 사용하여 글꼴 파일에 필요한 글리프만 포함되도록 제한할 수 있습니다. 이렇게 하면 결과 글꼴 파일과 APK의 크기가 크게 줄어들 수 있습니다. 다른 경우에는 이 블로그 게시물에서 글꼴 파일 크기 최소화에 관한 자세한 내용을 확인하세요.
- 예를 들어
APK 크기를 최소로 유지하는 방법에 관한 자세한 제안은 메모리 사용량 최적화 가이드를 참고하세요.
APK 서명
일반 APK와 마찬가지로 모든 시계 화면에 서명이 필요합니다. 기본 앱에 사용된 키와 다른 키를 만들고 모든 시계 페이스에 다른 키를 사용합니다.
아키텍처
시스템의 세 가지 기본 구성요소를 고려해 보세요.
- 클라우드 기반 저장소: 표준 Marketplace 앱에서 시계 화면은 클라우드에 빌드되고 저장되어 사용자가 사용할 수 있습니다. 시계 화면은 다음과 같습니다.
- 일반 워치 페이스 형식 APK로 사전 빌드
- 각각 하나의 워치 페이스 형식 기반 시계 화면만 포함
- 워치 페이스 푸시 유효성 검사 프로세스를 사용하여 검증되었으며 연결된 유효성 검사 토큰과 함께 저장됩니다.
- 필요할 때 휴대전화 앱에서 검색할 수 있습니다.
- 전화 앱: 전화 앱은 사용자가 시스템과 상호작용하는 기본 방법입니다. 이를 통해 다음이 가능합니다.
- 시계 화면 카탈로그 탐색 및 검색
- 시계에 시계 화면 설치 또는 교체하기
- 워치 앱: 워치 앱에는 일반적으로 중요한 사용자 인터페이스가 없을 수 있습니다. 주로 휴대전화 앱과 시계 화면 푸시 API 간의 브리지 역할을 하며 다음과 같은 기능을 제공합니다.
- 워치 페이스 푸시 API를 사용하여 워치 페이스 설치/업데이트 또는 교체
- 필요한 권한 요청 및 사용자에게 메시지 표시
- 기본 시계 화면 제공
- 최소한의 시계 화면 캐시 제공
- 휴대전화-시계 통신: 휴대전화와 시계 앱 통신은 전반적인 환경의 성공에 매우 중요합니다. Wear OS 데이터 레이어 API를 사용하면 다음이 가능합니다.
- 설치 감지: 기능과
CapabilityClient
를 사용하여 전화 앱은 시계 앱이 없는 것을 감지할 수 있고 그 반대도 가능합니다. 그런 다음 Play 스토어에 인텐트를 실행하여 누락된 폼 팩터를 설치할 수 있습니다. - 상태 관리:
DataClient
또는MessageClient
를 사용하여 휴대전화를 시계의 상태와 동기화할 수 있습니다. 예를 들어 휴대전화에서 설정된 시계 화면을 인식하도록 할 수 있습니다. - APK 전송:
ChannelClient
또는MessageClient
를 사용하여 휴대전화에서 시계로 APK를 전송할 수 있습니다. - 원격 호출:
Messageclient
를 사용하여 휴대전화는 시계 화면을 설치하는 등 시계 화면 푸시 API를 호출하도록 시계에 지시할 수 있습니다.
- 설치 감지: 기능과
자세한 내용은 데이터 레이어 API 안내를 참고하세요.