Enviar e sincronizar dados no Wear OS

Com o Wear OS by Google, você tem várias maneiras diferentes de enviar e sincronizar dados no relógio. Recomendamos que você envie e sincronize os dados diretamente da rede, já que isso permite que o app seja considerado independente.

Enviar e sincronizar dados diretamente da rede

Crie apps para Wear OS que se comuniquem diretamente com a rede. Você pode usar as mesmas APIs utilizadas no desenvolvimento para dispositivos móveis, mas não se esqueça das especificidades do Wear OS.

Enviar e sincronizar dados com a API Wearable Data Layer

A API Wearable Data Layer, que faz parte do Google Play Services, oferece um canal de comunicação opcional para os apps.

Essa API só está disponível em relógios Wear OS e dispositivos Android pareados. No caso de relógios Wear OS pareados com smartphones iOS, os apps podem consultar outras APIs baseadas na nuvem quando há uma conexão de Internet disponível.

A API Wearable Data Layer exige estas dependências:

Inclua a dependência abaixo no arquivo build.gradle do módulo do Wear:

  dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:18.1.0'
  }
  

Recomendamos que os apps para wearables enviem e sincronizem dados diretamente de uma rede ou de um smartphone conectado. No entanto, caso você queira estabelecer uma comunicação direta entre dispositivos em um formato do tipo RPC, ou caso não consiga se conectar diretamente a uma rede para transferir dados, é possível usar a API Wearable Data Layer das maneiras apresentadas a seguir.

Anunciar e consultar funções remotas
O CapabilityClient dá informações sobre quais nós na rede do Wear OS têm suporte às funções personalizadas do app. Os nós representam dispositivos móveis e wearables que estão conectados à rede. Uma capability é um recurso que um app define no build ou configura dinamicamente no momento da execução.
Por exemplo, um app Android para dispositivos móveis pode anunciar que tem suporte a um controle remoto de reprodução de vídeo. Quando a versão para wearables do app está instalada, ele pode usar o CapabilityClient para verificar se a versão para dispositivos móveis foi instalada e se há suporte para esse recurso. Se for o caso, o app para wearables pode usar uma mensagem com o botão de iniciar/pausar no outro dispositivo para controlar o vídeo.
Isso também pode funcionar no sentido contrário, ou seja, o app para wearables pode listar as funções a que ele oferece suporte.
Enviar mensagens
O MessageClient pode enviar mensagens e, por isso, é útil para chamadas de procedimento remoto (RPC), como controlar o player de mídia de um dispositivo portátil usando o wearable ou iniciar uma intent no wearable usando o dispositivo portátil. As mensagens também são ótimas para enviar solicitações unidirecionais ou para um modelo de comunicação de solicitação ou resposta.
Se o dispositivo portátil e o wearable estiverem conectados, o sistema vai colocar a mensagem na fila de entrega e retornar um código de resultado positivo. Se não estiverem conectados, o sistema retornará um erro. Um código de resultado positivo não indica que a mensagem foi entregue, já que os dispositivos podem se desconectar depois que o código é recebido.
Transferir dados
O ChannelClient pode transferir dados de um dispositivo portátil para um wearable. O ChannelClient oferece os seguintes recursos:
  • Transferência de arquivos de dados entre dois ou mais dispositivos conectados quando não há uma conexão de Internet disponível, sem precisar da sincronização automática que ocorre ao usar objetos Asset anexados a objetos DataItem. Se comparado ao DataClient, o ChannelClient economiza espaço em disco, já que o primeiro cria uma cópia dos recursos no dispositivo local antes de sincronizá-los com os dispositivos conectados.
  • Envio seguro de um arquivo grande demais para ser enviado usando um MessageClient.
  • Transferência de dados transmitidos de um dispositivo para o outro, como dados de voz do microfone.
Sincronizar dados
Um DataClient expõe uma API para que os componentes leiam ou gravem em um DataItem ou Asset.
Um DataItem é sincronizado em todos os dispositivos conectados a uma rede do Wear OS. É possível definir itens de dados enquanto eles não estão conectados a um nó. Esses itens são sincronizados quando os nós ficam on-line.
Os itens de dados criados por um aplicativo são particulares e só podem ser acessados por esse mesmo app em outros nós. Em geral, esses itens são pequenos. Use Assets para a transferência de objetos de dados maiores e mais persistentes, como imagens.
O Wear OS permite conectar vários wearables a um dispositivo portátil. Por exemplo, quando o usuário salva uma anotação em um dispositivo portátil, ela aparece automaticamente em todos os dispositivos Wear OS dele. Para ajudar a sincronizar dados entre dispositivos, os servidores do Google hospedam um nó da nuvem na rede de dispositivos. O sistema sincroniza os dados com dispositivos diretamente conectados, com o nó da nuvem e com os dispositivos wearable conectados ao nó da nuvem por Wi-Fi.

Aviso: os itens são transferidos para todos os dispositivos Wear OS disponíveis, mesmo para aqueles que não têm seu app instalado. Se estiver sincronizando uma grande quantidade de dados, verifique se um app "receptor" está instalado e on-line para evitar o desperdício de recursos nos dispositivos portáteis e no Wear OS.

Ouvir eventos importantes da camada de dados (para serviços)
Ao ampliar o WearableListenerService, é possível detectar eventos importantes da camada de dados em um serviço. O sistema gerencia o ciclo de vida do WearableListenerService, vinculando-o ao serviço quando é necessário enviar itens de dados ou mensagens e desvinculando o serviço quando nenhuma ação é necessária.
Detectar eventos importantes da camada de dados (para atividades em primeiro plano)
Implementar o OnDataChangedListener em uma atividade permite detectar eventos importantes da camada de dados quando uma atividade estiver em primeiro plano. Usar essa opção, em vez do WearableListenerService, permite detectar mudanças apenas quando o usuário está usando o app ativamente.

Aviso: essas APIs foram projetadas para a comunicação entre dispositivos portáteis e wearables e, portanto, são as únicas que podem ser usadas para configurar a comunicação entre esses dispositivos. Não tente abrir soquetes de baixo nível para criar um canal de comunicação, por exemplo.

Comparação entre clientes

A tabela a seguir mostra os diferentes requisitos e casos de uso de cada cliente.

Cliente de dados Cliente de mensagem Cliente de canal
Dados com mais de 100 KB Sim Não Sim
Pode enviar mensagens para nós que não estão conectados no momento Sim Não Não
Padrão de comunicação Recurso de rede compartilhado Transmissão de mensagens individuais (com resposta) Streaming individual

Conectividade

A camada de dados tem duas opções de comunicação:

  1. Troca de dados direta quando há uma conexão Bluetooth estabelecida entre o relógio e outro dispositivo.
  2. Troca de dados por uma rede disponível, como LTE ou Wi-Fi.
Figura 1. Exemplo de rede de nós com dispositivos portáteis e wearable.

Todos os clientes da camada de dados podem trocar dados usando o Bluetooth ou o Google Cloud Sync, dependendo das conexões disponíveis nos dispositivos. O Cloud Sync Service é o mecanismo do Google para comunicação e troca de dados entre wearables e smartphones quando o Bluetooth não está disponível.

Segurança

As duas opções de comunicação, Bluetooth e Cloud Sync Service, são criptografadas de ponta a ponta.

O Google Play Services aplica as restrições abaixo para garantir que a comunicação entre o smartphone e o relógio seja segura e exclusiva entre os apps.

  • O nome do pacote precisa ser o mesmo nos dois dispositivos.
  • A assinatura do pacote precisa ser a mesma nos dois dispositivos.

Bluetooth

Quando os dispositivos estão conectados por Bluetooth, a camada de dados usa essa conexão. Ao usar o Bluetooth, há um único canal criptografado entre os dispositivos, que usam a criptografia Bluetooth padrão gerenciada pelo Google Play Services.

Google Cloud

Vamos supor que os dados transmitidos usando a camada de dados possam, em algum momento, usar servidores do Google. Por exemplo, DataClient, MessageClient ou ChannelClient são roteados automaticamente pelo Google Cloud quando o Bluetooth não está disponível. Todos os dados transferidos pelo Google Cloud são criptografados de ponta a ponta.

Geração e armazenamento de chaves

Chaves de ponta a ponta para comunicação baseada na nuvem são geradas pelo smartphone e trocadas diretamente com o relógio quando os dois dispositivos são conectados por Bluetooth. Isso acontece durante a configuração do dispositivo. Os servidores do Google não recebem essas chaves em nenhum momento.

A comunicação por servidores do Google não ocorre até que a geração de chaves de ponta a ponta seja concluída. As chaves são armazenadas no armazenamento de arquivos particular do Google Play Services nos dispositivos pareados.

Backup do dispositivo

As chaves não são armazenadas em backup e não são enviadas para fora do dispositivo. Se novas chaves forem necessárias, como para um novo smartphone, elas serão geradas pelo sistema e compartilhadas com os dispositivos que o usuário ainda tiver.