Dear Android: Episode 1 – NSD and WiFi Direct

TREVOR JOHNS: Hola y bienvenido
a Dear Android, el programa anteriormente conocido
como Horario de oficina para desarrolladores de Android. Nos cansamos un poco de que los desarrolladores
siempre intentaran mostrarnos haciéndonos una
pregunta que no podíamos responder todas las semanas. Así que decidimos probar un nuevo
formato para variar. Seleccionaremos las mejores
preguntas sobre desarrollo de aplicaciones para Android de
Internet, incluido Google+, y las responderemos
aquí en YouTube.

Si estás viendo esto en vivo,
que es todos los miércoles a las 2:00 p.m. hora del Pacífico,
estaremos unos minutos después de cada episodio para
responder cualquier pregunta sobre el episodio actual. Dejando eso de lado,
sigamos adelante y pasemos a la pregunta de esta semana, que
proviene de Dancio en Stack Overflow, que es un usuario
de Polonia. Me pregunta: si tengo un
servicio personalizado que estoy transmitiendo a través de Bonjour y me gustaría
transmitirlo o descubrirlo usando Wi-Fi
o Bluetooth, ¿es esto posible en Android? Para responder a esta pregunta,
tenemos a Alex Lucas, miembro de nuestro
equipo de relaciones con desarrolladores de Android, quien escribió muchos de los documentos sobre el
descubrimiento de servicios de red y Wi-Fi en nuestro
sitio para desarrolladores.

Alex, ¿podrías ayudarnos a
responder esta pregunta? ÁLEX LUCAS: Absolutamente. Entonces, para dividir la pregunta en
dos subpartes, ¿los servicios tipo Bonjour funcionarán
con Bluetooth y funcionarán con Wi-Fi? La respuesta es sí a Wi-Fi,
no a Bluetooth. Gracias por sintonizarnos. Ese es nuestro programa. TREVOR JOHNS: Nos vemos, Alex. ALEX LUCAS: Adiós. Así que probablemente deberíamos
responder esta pregunta con un poco más de detalle. Para comenzar con la
parte de Bluetooth, Bluetooth es un protocolo realmente excelente para muchas
aplicaciones de dispositivo a dispositivo, como transmitir música
o comunicarse con monitores de frecuencia cardíaca. Pero en Android, en
realidad no es compatible con TCP. Entonces, lo que eso significa es que no puedes
crear un socket TCP y conectarlo a través de Bluetooth
a otros dispositivos.

Debido a que el descubrimiento de servicios de red
, o al menos la implementación de Android del
descubrimiento de servicios de red, se ejecuta sobre TCP, esto crea una
incompatibilidad fundamental entre Bluetooth y TCP. Dicho esto, en realidad
funciona a través de wifi. TREVOR JOHNS: Muy bien. Entonces, antes de entrar en más
detalles, demos algunos antecedentes sobre qué
es exactamente NSD. Entonces, NSD es el descubrimiento de servicios de red
, que es la implementación de
DNS de multidifusión de Android, utilizando el protocolo de descubrimiento de servicios DNS. Y lo que esto hace es
permitir que las aplicaciones transmitan su existencia
en la red local, junto con los detalles de conexión de esa
aplicación a cualquier otro dispositivo en la misma proximidad,
que sería cualquier otro dispositivo, nuevamente, en la
misma red local.

Esto es útil para cosas
como aplicaciones sociales, juegos o incluso
servicios de redes como impresoras o servidores web. De esa manera podrás saber
qué dispositivos hay cerca. ALEX LUCAS: Cuando NSD transmite
esta información a través de la red, hay cuatro
piezas fundamentales de información que
enviará. Uno de ellos es el
identificador del dispositivo. El identificador del dispositivo
suele ser el nombre del usuario o el nombre del host del dispositivo. Otro elemento
será el nombre del servicio. El nombre del servicio suele
ser el nombre de la aplicación. Por ejemplo, si tienes un
juego llamado Replica Island que quieres jugar con otros
usuarios a través de la red, y Replica Island tiene
incorporado el descubrimiento de servicios de red, el nombre del servicio probablemente
será algo así como Replica Island.

Otro elemento será la
dirección del host, que en realidad no es necesario que ingrese
usted mismo en tiempo de ejecución. Android simplemente lo
resolverá por usted y lo enviará junto con los paquetes NSD. El último elemento
será el puerto. Y quería hacer una
nota especial sobre el puerto, que es que para las aplicaciones móviles,
lo más fácil de hacer cuando estás diseñando el juego o
la aplicación, no es elegir tu propio
puerto en tiempo de ejecución o codificar uno en Lo que desea hacer es obtener
un socket de servidor y configurarlo en el puerto cero.

Y lo que eso hará es
decirle al marco de trabajo de Android, solo dame cualquier
puerto que esté disponible en el sistema. Cuando el socket del servidor
le devuelve el número de puerto, usted ingresa ese número de puerto
en la transmisión de descubrimiento de servicios de red. Lo útil de esto es
que si usted, por ejemplo, ha decidido que quiere que el puerto 53
sea el que ejecute su aplicación , y algún otro
desarrollador de aplicaciones decide que quiere que el puerto 53 sea
el que ejecute su aplicación , entonces Nunca
habría un conflicto.

Y nunca habría un
problema en el que el usuario tuviera que elegir entre su aplicación
o la aplicación de otra persona ejecutándose
en un momento dado. TREVOR JOHNS: Bien,
es un buen hecho. Significa que no tiene que
solicitar o reservar la portabilidad desde la IANA. Ahora todavía tienes que ir
y registrar el nombre de tu servicio , pero es tan simple
como completar un formulario simple. Y las posibilidades de que haya
un conflicto son prácticamente inexistentes. ALEX LUCAS: Sí, muy pequeño. En realidad, no necesita la
reserva de la IANA cuando realiza pruebas internas. Pero tan pronto como dejes que tu
aplicación esté disponible en Internet, es
una muy buena idea registrarse. TREVOR JOHNS: Sí, es
simplemente una buena práctica. Muy bien, ahora hablamos un poco
antes sobre Bluetooth. Y aunque no puedes usar
NSD con Bluetooth, hay otra respuesta que queremos
darte, una respuesta mejor. Y eso se llama
Wi-Fi Direct. Wi-Fi Direct es una versión peer-to-peer
de Wi-Fi. Por lo tanto, permite que los dispositivos se comuniquen
entre sí sin tener que pasar por
un punto de acceso.

Esto proporciona muchos de los mismos
beneficios que Bluetooth, conexiones entre dispositivos, pero
con las ventajas de Wi-Fi, lo que significa mayor velocidad
y mayor alcance. Está disponible en dispositivos
con Android 4 o superior. Ese es Panal. Y si ejecuta
Android 4.1, Jelly Bean, también obtendrá
descubrimiento de servicios. Ahora bien, a diferencia del
caso tradicional de descubrimiento de servicios de red , que acabamos de
abordar, el descubrimiento de servicios Wi-Fi Direct funcionará incluso
cuando no esté conectado a una red. Así que piensa en eso
por un segundo. Se pueden detectar los dispositivos que ejecutan su aplicación
cerca , incluso si
no están conectados a la misma red que usted.

Eso es genial. ALEX LUCAS: Lo que más me gusta
de eso, lo que eso significa básicamente, es que estás en
una sala de cine esperando que comiencen las vistas previas. Digamos que has ido a una
función de medianoche o algo así. Tienes una hora para matar. Puedes abrir la aplicación
y ver quién más en el cine o en la fila está
jugando el mismo juego que tú y conectarte con ellos y
jugar sin tener idea de quiénes son. TREVOR JOHNS: Te brinda
proximidad física.

ÁLEX LUCAS: Correcto. Proximidad física, lo cual es
fantástico, porque sabes que el cine no va a
tener red wifi allí. Probablemente, muchos de ellos hoy en día,
en realidad, están diseñados para bloquear llamadas entrantes,
señales y demás. TREVOR JOHNS: Por favor, no uses
eso como excusa para jugar durante la película. ÁLEX LUCAS: Correcto. No juegues durante la película. Hay muchas vistas previas útiles
que te dicen que es simplemente una mala idea. Es de mala educación. Habría una pantalla brillante
frente a las personas detrás de ti. Y no estamos sugiriendo eso. Pero cuando tengas tiempo para matar
en la fila, o antes de las vistas previas, noquearte.

Ahora queremos señalar que
sigue siendo importante implementar el descubrimiento de servicios de red
cuando esté conectado a una red. Hay un par de razones
para esto. Uno de ellos es que Wi-Fi Direct
no funcionará en absoluto cuando estés conectado a una
red, debido a la forma en que funciona la tecnología subyacente
. O estás conectado a una
red o estás navegando en busca de dispositivos Wi-Fi
Direct. El otro punto es que
hay muchos servicios y hardware que transmiten servicios
diseñados para ser descubiertos en una red. Ejemplos de esto son
las cámaras de red y las impresoras de red. La mayoría de las empresas no configurarán
sus impresoras de red para que sean accesibles mediante Wi-Fi Direct. Porque eso significa que cualquiera que
estuviera cerca y físicamente , que no
necesariamente tuviera permiso para usar esa impresora, podría
imprimir lo que quisiera. Entonces, estar en la red y
exigir que el usuario esté en la red proporciona una especie de
sistema de permisos o simplemente una pequeña área de seguridad.

Entonces, realmente tu mejor opción
es implementar tanto Wi-Fi Direct como NSD. Y de esa manera, tu aplicación
tendrá lo mejor de ambos mundos y aumentará las posibilidades
de que tus usuarios puedan conectarse entre sí,
sin importar las circunstancias. Para utilizar el descubrimiento del servicio Wi-Fi Direct
, la clase necesaria que
querrás usar es el administrador P2P de Wi-Fi , que proporciona una
implementación de DNS-SD similar a la forma en que
lo hace el NSD estándar. Para obtener más información sobre cómo
implementar realmente el descubrimiento de servicios de red y el
descubrimiento de servicios a través de Wi-Fi Direct, tenemos una clase de capacitación
disponible en desarrollador.android.com/training. Y realmente le recomendamos que
vaya allí y lea el tutorial. También proporcionamos algún
código de muestra. Y le guiará a través de un
ejemplo del mundo real de cómo implementar esta funcionalidad en
una aplicación preexistente.

TREVOR JOHNS: Y si tiene
alguna pregunta sobre NSD o Wi-Fi Direct, únase a nosotros a través de
Hangout después de la transmisión en vivo , donde podremos
ayudarlo a responder esas preguntas. Y si tiene alguna pregunta
para la transmisión de la próxima semana, publíquela en Stack Overflow o
envíenosla a través de Android Developers en Google+, y
elegiremos las mejores para la transmisión de la próxima semana. Y con eso, nos vemos a
todos la próxima semana. Gracias por acompañarnos. ALEX LUCAS: Adiós chicos..

As found on YouTube