Participe da nossa lista de e-mails para receber atualizações e comunicados sobre o "Por perto".

Visão geral

A Nearby Connections é uma API de rede ponto a ponto que permite que os apps descubram, se conectem e troquem dados facilmente com dispositivos próximos em tempo real, independentemente da conectividade de rede. A API está localizada no pacote com.google.android.gms.nearby.connection.

Alguns exemplos de casos de uso:

  • Lousa interativa para colaboração: anote ideias com participantes próximos em uma lousa interativa virtual compartilhada.
  • Jogos multiplayer locais: configure um jogo multiplayer e convide outros usuários próximos para participar.
  • Jogos com várias telas: use um smartphone ou tablet como controle de jogo para exibir jogos exibidos em um dispositivo Android de tela grande próximo, como o Android TV.
  • Transferências de arquivos off-line: compartilhe fotos, vídeos ou qualquer outro tipo de dados rapidamente e sem precisar de uma conexão de rede.

Introdução

O Nearby Connections permite a divulgação, a descoberta e as conexões entre dispositivos próximos de maneira totalmente off-line ponto a ponto. As conexões entre dispositivos são de alta largura de banda, baixa latência e totalmente criptografadas para permitir transferências de dados rápidas e seguras.

Um dos principais objetivos dessa API é oferecer uma plataforma simples, confiável e com alto desempenho. Internamente, a API usa uma combinação de pontos de acesso Bluetooth, BLE e Wi-Fi, aproveitando os pontos fortes de cada um e burlando os pontos fracos deles. Isso abstrai com eficiência os ritmos de Bluetooth e Wi-Fi em várias versões de SO e hardware Android, permitindo que os desenvolvedores se concentrem nos recursos mais importantes para os usuários.

Por conveniência, os usuários não recebem uma solicitação para ativar o Bluetooth ou o Wi-Fi. O recurso Conexões próximas ativa esses recursos conforme necessário e restaura o dispositivo ao estado anterior depois que o app é concluído usando a API, garantindo uma experiência tranquila para o usuário.

Perspectiva geral sobre APIs

O uso da API é dividido em duas fases: pré-conexão e pós-conexão.

Na fase de pré-conexão, os anunciantes se anunciam, enquanto os Discoverres descobrem anunciantes próximos e enviam solicitações de conexão. Uma solicitação de conexão de um Discoverr para um Anunciante inicia um fluxo de autenticação simétrica que faz com que os dois lados aceitem (ou rejeitem) a solicitação de conexão.

Depois que uma solicitação de conexão é aceita pelos dois lados, ela é considerada estabelecida e os dispositivos entram na fase pós-conexão, em que ambos os lados podem trocar dados.

Publicidade e descoberta

Os anunciantes começam invocando startAdvertising(), transmitindo um ConnectionLifecycleCallback que será notificado sempre que um Discoverer quiser se conectar usando o callback onConnectionInitiated().

Os leitores começam invocando startDiscovery(), transmitindo um EndpointDiscoveryCallback que será notificado sempre que um anunciante próximo for encontrado pelo callback onEndpointFound().

Estabelecer conexões

Quando um Discoverr quer se conectar a um anunciante nas proximidades, ele invoca requestConnection(), transmitindo um ConnectionLifecycleCallback.

Os dois lados são notificados do processo de início de conexão pelo callback ConnectionLifecycleCallback.onConnectionInitiated() e ambos precisam escolher se querem aceitar ou rejeitar a conexão usando uma chamada para acceptConnection() ou rejectConnection(), respectivamente.

Nesse momento, os apps podem solicitar que o usuário aceite a conexão. Consulte Autenticar uma conexão para saber mais.

Depois que os dois lados responderem, cada um será notificado sobre o resultado pelo callback ConnectionLifecycleCallback.onConnectionResult(). Se ambos os lados tiverem aceitado a conexão, o ConnectionResolution fornecido no callback terá sucesso, a conexão será considerada estabelecida e será possível iniciar a transferência dos payloads.

Troca de dados

Depois que uma conexão é estabelecida, o uso adicional da API é simétrico. Portanto, não há mais distinção entre Anunciante e Discoverer.

Agora os dois lados podem trocar dados como objetos Payload. Há três tipos de payloads compatíveis:

  • BYTES Matrizes de bytes limitadas a 32 mil. Elas são boas para enviar itens como metadados ou mensagens de controle.
  • FILE Arquivos de qualquer tamanho. Eles são transferidos do app para a interface de rede, com cópia mínima entre os limites do processo.
  • STREAM Um stream de dados gerado instantaneamente, como no caso de áudio/vídeo gravado, sem tamanho final conhecido.

Os remetentes usam o método sendPayload() para enviar um payload. Esse método pode ser invocado várias vezes, mas como garantimos a entrega em ordem, o segundo Payload será colocado na fila para envio até que o primeiro seja concluído.

Os destinatários podem esperar que o callback PayloadCallback.onPayloadReceived() seja invocado quando um novo payload de entrada for recebido.

Os remetentes e os destinatários podem esperar que o callback PayloadCallback.onPayloadTransferUpdate() seja invocado para atualizá-los sobre o progresso dos payloads de saída e de entrada, respectivamente.

As conexões estabelecidas são full-duplex, o que significa que anunciantes e descobertores podem enviar e receber payloads simultaneamente.

Desconectando

Por fim, disconnectFromEndpoint() se desconecta de um endpoint remoto específico e o stopAllEndpoints() se desconecta de todos os endpoints conectados. Os endpoints remotos são notificados sobre desconexão usando o ConnectionLifecycleCallback.onDisconnected().

Coleta de dados

Ao usar o SDK de proximidade do Google Play Services, a análise de uso é coletada para melhorar a experiência.

  • Métricas de desempenho: a latência de descoberta e conexão, a confiabilidade e a capacidade de processamento são coletadas ao procurar e se conectar a dispositivos usando o SDK do Nearby.
  • Informações do dispositivo: o modelo do dispositivo, o país, a versão do build e o nome do pacote do app são coletados e associados às métricas de desempenho para identificar frações regionais e específicas do dispositivo.

Os usuários finais podem permitir ou negar a coleta em Configurações > Google > Uso e diagnósticos.