Únete a nuestra lista de distribución para recibir actualizaciones y anuncios de Nearby.

Recientes

Conexiones de Nearby es una API de red entre pares que permite que las apps descubran, intercambien datos y se conecten con los dispositivos cercanos con facilidad en tiempo real, sin importar la conectividad de red. La API se encuentra en el paquete com.google.android.gms.nearby.connection.

Estos son algunos ejemplos de casos de uso:

  • Pizarra colaborativa: Anota ideas con participantes cercanos en una pizarra virtual compartida.
  • Juegos multijugador locales: Configura un juego multijugador e invita a otros usuarios cercanos a unirse.
  • Videojuegos multipantalla: Usa un teléfono o una tablet como control de juegos para jugar en un dispositivo Android cercano con pantalla grande, como Android TV.
  • Transferencias de archivos sin conexión: Comparte fotos, videos o cualquier otro tipo de datos con rapidez y sin necesidad de una conexión de red.

Introducción

Conexiones de Nearby permite la publicidad, el descubrimiento y las conexiones entre dispositivos cercanos de forma completamente física entre pares. Las conexiones entre dispositivos son de ancho de banda alto, baja latencia y están completamente encriptadas para permitir transferencias de datos rápidas y seguras.

Un objetivo principal de esta API es proporcionar una plataforma simple, confiable y de buen rendimiento. De forma interna, la API usa una combinación de hotspots de Bluetooth, BLE y Wifi, y aprovecha las ventajas de cada uno, a la vez que elude sus respectivas debilidades. De esta manera, se abstraen de manera efectiva los diversos componentes de Bluetooth y Wifi en una variedad de versiones y hardware del SO Android, lo que permite a los desarrolladores enfocarse en las funciones que son importantes para sus usuarios.

Para tu comodidad, no se les solicita a los usuarios que activen Bluetooth ni Wi-Fi. Conexiones cercanas habilita estas funciones según sea necesario y restablece el dispositivo a su estado anterior una vez que la app termina de usar la API, lo que garantiza una experiencia del usuario fluida.

Descripción general de la API

El uso de la API se divide en dos fases: previa y posterior a la conexión.

En la fase de conexión previa, los anunciantes se anuncian a sí mismos, mientras que los Descubres descubren anunciantes cercanos y envían solicitudes de conexión. Una solicitud de conexión de un Discoverer a un anunciante inicia un flujo de autenticación simétrica que hace que ambas partes acepten o rechacen la solicitud de conexión de manera independiente.

Después de que ambas partes aceptan una solicitud de conexión, esta se considera establecida y los dispositivos entran en la fase posterior a la conexión, durante la cual ambas partes pueden intercambiar datos.

Publicidad y descubrimiento

Los anunciantes comienzan por invocar a startAdvertising() y pasan un ConnectionLifecycleCallback que recibirá una notificación cada vez que un Discoverer quiera conectarse mediante la devolución de llamada onConnectionInitiated().

Los descubrimientos comienzan por invocar startDiscovery() y pasar un EndpointDiscoveryCallback que recibirá una notificación cada vez que se encuentre un anunciante cercano a través de la devolución de llamada onEndpointFound().

Estableciendo conexiones

Cuando un Discoverer desea conectarse a un anunciante cercano, este descubre requestConnection() y pasa su propia ConnectionLifecycleCallback.

Luego, se notifica a las dos partes sobre el proceso de inicio de la conexión a través de la devolución de llamada ConnectionLifecycleCallback.onConnectionInitiated(), y ambas deben elegir si desean aceptar o rechazar la conexión a través de una llamada a acceptConnection() o rejectConnection(), respectivamente.

En este punto, de manera opcional, las apps pueden solicitar al usuario que acepte la conexión. Consulta Autentica una conexión para obtener más información.

Una vez que las dos partes hayan respondido, cada una recibirá una notificación del resultado a través de la devolución de llamada ConnectionLifecycleCallback.onConnectionResult(). Si ambas partes aceptan la conexión, el ConnectionResolution proporcionado en la devolución de llamada se realizará correctamente, la conexión se considerará establecida y la transferencia de cargas útiles comenzará.

Intercambia datos

Después de que se establece una conexión, el uso adicional de la API es simétrico, por lo que ya no hay una distinción entre el anunciante y el Discoverer.

Ambos lados ahora pueden intercambiar datos como objetos Payload. Hay 3 tipos de cargas útiles compatibles:

  • BYTESLos arreglos de bytes se limitan a 32,000; son buenos para enviar, por ejemplo, metadatos o mensajes de control.
  • FILEArchivos de cualquier tamaño; estos se transfieren desde la app a la interfaz de red con una copia mínima entre límites del proceso.
  • STREAMUna transmisión de datos que se genera en el momento, como en el caso de audio o video grabado, sin ningún tamaño final conocido de antemano.

Los remitentes usan el método sendPayload() para enviar una carga útil. Este método se puede invocar varias veces, pero como garantizamos la entrega en orden, la segunda carga útil se pondrá en cola para enviar hasta que se complete la primera carga útil.

Los receptores pueden esperar que se invoque la devolución de llamada PayloadCallback.onPayloadReceived() cuando se recibe una nueva carga útil entrante.

Tanto los remitentes como los receptores pueden esperar que se invoque la devolución de llamada PayloadCallback.onPayloadTransferUpdate() para actualizarlos sobre el progreso de las cargas útiles salientes y entrantes, respectivamente.

Las conexiones establecidas son de dúplex completo, lo que significa que los anunciantes y los Descubres pueden enviar y recibir cargas útiles de forma simultánea.

Desconectando

Por último, disconnectFromEndpoint() se desconecta de un extremo remoto en particular, y stopAllEndpoints() se desconecta de todos los extremos conectados. Los extremos remotos reciben una notificación de desconexión mediante ConnectionLifecycleCallback.onDisconnected().

Recopilación de datos

Cuando usas el SDK de Servicios de Google Play para Nearby, se recopilan estadísticas de uso a fin de mejorar la experiencia.

  • Métricas de rendimiento: La latencia de descubrimiento y conexión, la confiabilidad y la capacidad de procesamiento se recopilan cuando se buscan y se conectan a dispositivos mediante el SDK de Nearby.
  • Información del dispositivo: El modelo, el país, la versión de compilación y el nombre del paquete de la aplicación del dispositivo se recopilan y se asocian con las métricas de rendimiento para identificar segmentos regionales y específicos del dispositivo.

Los usuarios finales pueden permitir o rechazar esta colección desde Configuración > Google > Uso y diagnóstico.