Push de mostrador do relógio

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:

  1. Todos os mostradores de relógio instalados ou atualizados pela API Watch Face Push precisam passar pela ferramenta de validação Watch Face Push.
  2. Use apenas a ferramenta de validação oficial para gerar tokens de validação para uso com a API.
  3. A ferramenta de validação precisa estar atualizada quando você a executa.
  4. 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

  1. Obtenha o validador do repositório Maven do Google.
  2. 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

  1. 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")
            }
        }
    }
    
  2. 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")
    
    
  3. 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

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:

  1. 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:
    1. Eles são pré-criados como APKs regulares do Formato do mostrador do relógio.
    2. Cada APK contém apenas um mostrador de relógio baseado no formato de mostrador de relógio.
    3. 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.
    4. O app Telefone pode recuperá-los conforme necessário.
  2. App Telefone: é a principal forma de interação dos usuários com seu sistema. Com ele, é possível:
    1. Navegar e pesquisar no catálogo de mostradores do relógio
    2. Instalar ou substituir um mostrador do relógio
  3. 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:
    1. Usar a API Watch Face Push para instalar/atualizar ou substituir mostradores de relógio
    2. Solicitar as permissões necessárias e pedir ao usuário
    3. Fornecer um mostrador do relógio padrão
    4. Fornecer um cache mínimo de mostradores de relógio
  4. 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:
    1. 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.
    2. Gerenciamento de estado: usando o DataClient ou MessageClient, você mantém o smartphone sincronizado com o estado do relógio. Por exemplo, sincronizando o estado do mostrador ativo.
    3. Transmissão de APKs: usando ChannelClient ou MessageClient, envie APKs do smartphone para o smartwatch.
    4. 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.

Consulte as orientações da API Data Layer para mais detalhes.