O Wear OS 6 apresenta uma nova API, o Watch Face Push, que cria oportunidades para casos de uso de publicação de mostradores de relógio mais avançados.
Identificar quando usar o envio de mostrador do relógio
O Watch Face Push é uma API no Wear OS que permite ao desenvolvedor adicionar, atualizar ou remover mostradores de relógio diretamente. Não é necessário para o desenvolvimento padrão de mostradores de relógio.
Os mostradores de relógio usados com o Watch Face Push precisam ser escritos usando o Formato do mostrador do relógio. Isso pode incluir mostradores de relógio criados com o Watch Face Designer, o Watch Face Studio ou qualquer outra ferramenta que produza mostradores de relógio usando o Formato do mostrador do relógio.
Embora a API Watch Face Push possa ser usada de várias maneiras, a tabela a seguir orienta você pelos principais casos de uso:
Caso de uso | Solução recomendada | Complexidade |
---|---|---|
Quero criar e publicar mostradores de relógio individuais. | Use o Formato do mostrador do relógio, seja diretamente ou com uma ferramenta como o Watch Face Designer ou o Watch Face Studio, e publique no Google Play. | Baixo |
Quero criar um app para smartphone que permita aos usuários selecionar mostradores de relógio de uma coleção selecionada ou criar e personalizar mostradores para instalação diretamente no relógio Wear OS. | Crie um app para relógio e smartphone usando a API Watch Face Push no relógio. | Alta |
Finalidade
O caso de uso canônico da API Watch Face Push é a criação de um app de marketplace. Com ele, os usuários podem selecionar mostradores de relógio de uma coleção organizada no smartphone e controlar diretamente a instalação desses mostradores no smartwatch conectado.
Considerações
Para detalhes sobre como criar mostradores de relógio, consulte as orientações do Formato do mostrador do relógio: os mostradores implantados usando o Watch Face Push são mostradores regulares do Formato do mostrador do relógio.
Ao criar o mostrador do relógio, tenha em mente as seguintes considerações.
Nomes de pacote
Os mostradores de relógio instalados usando o Watch Face Push precisam obedecer à seguinte convenção:
<app name>.watchfacepush.<watchface name>
... em que <app name>
é o nome do pacote do app que chama a API
Push de mostrador do relógio.
Por exemplo, para um app com o nome do pacote com.example.mymarketplace
, os seguintes são nomes de pacotes de mostrador de relógio válidos:
com.example.mymarketplace.watchfacepush.watchface1
com.example.mymarketplace.watchfacepush.watchface2
com.example.mymarketplace.watchfacepush.another_watchface
A API rejeita mostradores de relógio que não estão em conformidade com essa convenção.
Conteúdo do pacote
O sistema aplica estritamente o conteúdo do APK. É tecnicamente possível produzir APKs do Formato do mostrador do relógio que contenham arquivos de metadados inofensivos e outros artefatos, que podem ser aceitáveis para o Google Play, mas não passam na validação de envio do mostrador do relógio (veja abaixo).
Cada APK de mostrador do relógio precisa conter apenas os seguintes arquivos/caminhos:
/AndroidManifest.xml
/resources.arsc
/res/**
/META-INF/**
Além disso, o arquivo AndroidManifest.xml
precisa conter apenas as seguintes tags:
<manifest>
<uses-feature>
<uses-sdk>
<application>
<property>
<meta-data>
Por fim, o pacote precisa especificar um minSdk
de pelo menos 33
, e a tag
<application>
precisa especificar o atributo android:hasCode="false"
.
Validação
Ao contrário dos mostradores de relógio comuns distribuídos pelo Google Play, o app Marketplace é responsável por verificar se cada mostrador de relógio por push está bem formado e tem bom desempenho.
O Watch Face Push usa as seguintes verificações de validação para verificar a qualidade de cada mostrador do relógio:
- Todos os mostradores de relógio instalados ou atualizados pela API Watch Face Push precisam passar pela ferramenta de validação Watch Face Push.
- Use apenas a ferramenta de validação oficial para gerar tokens de validação para uso com a API.
- A ferramenta de validação precisa estar atualizada quando você a executa.
Não é necessário revalidar um APK que não mudou. Os tokens não expiram, mesmo quando a versão da ferramenta de validação usada é substituída.
Ao mesmo tempo, recomendamos que você execute a validação de novo de vez em quando, porque o validador é atualizado periodicamente.
Executar o validador
O validador está disponível de três formas:
- Uma ferramenta de CLI
- Uma biblioteca para uso com a JVM.
- Uma biblioteca para uso no Android.
Uso do validador de linha de comando
- Obtenha o validador do repositório Maven do Google.
Execute a ferramenta da seguinte maneira:
java -jar validator-push-cli-1.0.0-alpha07.jar \ --apk_path=<your watch face>.apk \ --package_name=<your marketplace package name>
Se a solicitação for bem-sucedida, a saída vai incluir um token de validação, que você precisa fornecer à API Watch Face Push ao adicionar ou atualizar um mostrador do relógio.
Se ocorrer um erro, a saída vai incluir detalhes sobre qual verificação específica falhou.
Uso do validador de biblioteca
Inclua os repositórios do Google e do Jitpack. Ambos são necessários para usar a biblioteca de validação.
repositories { ... google() maven { url = uri("https://jitpack.io") content { includeGroup("com.github.xgouchet") } } }
Inclua a dependência do validador no seu projeto:
// For use on JVM implementation("com.google.android.wearable.watchface.validator:validator-push:1.0.0-alpha07") // For use on Android implementation("com.google.android.wearable.watchface.validator:validator-push-android:1.0.0-alpha07")
Execute o validador:
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()}") // ... } }
Para um exemplo de como usar essa biblioteca, consulte a amostra do GitHub. Consulte também a biblioteca Portable Asset Compiler Kit (Pack), útil para criar APKs no dispositivo e usar com o validador baseado em Android.
Tamanho do APK
Tome cuidado especial com as aparências de relógio Watch Face Push para minimizar o tamanho do APK: o APK da aparência de relógio provavelmente será transmitido do app para smartphone ao app para smartwatch por Bluetooth, o que pode ser lento.
Um APK muito grande pode levar um tempo considerável para ser transmitido, o que é uma experiência ruim para o usuário e também consome a bateria.
- Use bibliotecas adequadas, como
pngquant
, para manter os tamanhos de arquivo de imagem no mínimo- Inclua isso no processo de criação da sua coleção de mostradores de relógio
- Verifique se as dimensões da imagem são adequadas para a escala em que você a usa.
- Corte as imagens adequadamente para remover qualquer plano de fundo ao redor.
- Reduza o tamanho dos arquivos de fontes
- Por exemplo, se você usar uma fonte específica apenas para mostrar a hora, no formato
HH:MM
, use uma ferramenta comopyftsubset
para limitar o arquivo de fonte a conter apenas os glifos necessários. Isso pode reduzir muito o tamanho do arquivo de fonte e do APK resultante. Confira esta postagem do blog para detalhes sobre como minimizar o tamanho do arquivo de fonte, em outros casos.
- Por exemplo, se você usar uma fonte específica apenas para mostrar a hora, no formato
Consulte as orientações para otimizar o uso da memória e confira mais sugestões sobre como manter o tamanho do APK no mínimo.
Assinatura de APKs
Como um APK normal, você precisa assinar todos os mostradores do relógio. Crie uma chave diferente da que você usa com o app principal e use essa chave em todos os mostradores de relógio.
Arquitetura
Considere os quatro componentes principais do sistema:
- Armazenamento baseado na nuvem: no app canônico do Marketplace, você cria e armazena seus mostradores de relógio na nuvem, prontos para uso pelos usuários. Os mostradores do relógio têm as seguintes propriedades:
- Eles são pré-criados como APKs regulares do Formato do mostrador do relógio.
- Cada APK contém apenas um mostrador de relógio baseado no formato de mostrador de relógio.
- Eles são validados com o processo de validação por push do mostrador do relógio e armazenados com o token de validação associado.
- O app Telefone pode recuperá-los conforme necessário.
- App Telefone: é a principal forma de interação dos usuários com seu sistema. Com ele, é possível:
- Navegar e pesquisar no catálogo de mostradores do relógio
- Instalar ou substituir um mostrador do relógio
- App para smartwatch: geralmente, o app para smartwatch não tem uma interface do usuário significativa. Ela é principalmente uma ponte entre o app para smartphone e as APIs
Push de mostradores do relógio, com a seguinte funcionalidade:
- Usar a API Watch Face Push para instalar/atualizar ou substituir mostradores de relógio
- Solicitar as permissões necessárias e pedir ao usuário
- Fornecer um mostrador do relógio padrão
- Fornecer um cache mínimo de mostradores de relógio
- Comunicações entre smartphone e relógio: a comunicação entre o smartphone e o app para relógio é
fundamental para o sucesso da experiência geral. Use as APIs da camada de dados do Wear OS, que permitem:
- Detecção de instalação: usando recursos e o
CapabilityClient
, o app para smartphone pode detectar a ausência do app para smartwatch e vice-versa. Em seguida, você pode iniciar uma intent para a Play Store e instalar o formato ausente. - Gerenciamento de estado: usando o
DataClient
ouMessageClient
, você mantém o smartphone sincronizado com o estado do relógio. Por exemplo, sincronizando o estado do mostrador ativo. - Transmissão de APKs: usando
ChannelClient
ouMessageClient
, envie APKs do smartphone para o smartwatch. - Invocação remota: usando o
Messageclient
, o smartphone pode instruir o relógio a chamar a API Watch Face Push, por exemplo, para instalar um mostrador de relógio.
- Detecção de instalação: usando recursos e o
Consulte as orientações da API Data Layer para mais detalhes.