Compatibilidad con proximidad y pulsación (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Propósito

Nota  

La proximidad está pensada para los desarrolladores que quieran incluir en su aplicación conexiones sencillas mediante un gesto de pulsar. Podría ser el caso, por ejemplo, de un juego multijugador en el que dos usuarios tocaran físicamente sus dispositivos a la vez para configurar una sesión de juego compartida. También podría tratarse de una aplicación en la que los usuarios pulsaran un dispositivo y recibieran un vínculo a una ubicación donde obtener información o efectuar una compra. Para establecer una conexión entre dos dispositivos con un gesto de pulsar, ambos dispositivos deben tener un dispositivo de Proximidad, como una radio de transmisión de datos en proximidad (NFC).

 

Con la proximidad, puedes mejorar tus aplicaciones para usar transmisión de datos en proximidad (NFC) y conectar dos dispositivos sin la necesidad de tener una red con Wi-Fi Direct. La proximidad y NFC te permiten conectar dispositivos con un simple gesto de tocar. Si dos dispositivos se encuentran a 4 centímetros (o menos) el uno del otro, o se tocan, el sistema operativo de cada dispositivo reconoce al otro. También, mediante la búsqueda de dispositivos del mismo nivel con Wi-Fi Direct, puedes conectar dos dispositivos que ejecutan tu aplicación y que están dentro del alcance inalámbrico. Después puedes conectar los dos dispositivos para compartir contenido como fotos o vínculos, crear una experiencia de juego con varios jugadores o publicar mensajes y suscribirte a mensajes.

Importante  

Un dispositivo debe tener un dispositivo de proximidad, como un dispositivo de radio de transmisión de datos en proximidad (NFC), para que se puedan habilitar las conexiones mediante el gesto de pulsar. Un dispositivo debe tener un dispositivo Wi-Fi que admita Wi-Fi Direct para habilitar la búsqueda de dispositivos del mismo nivel.

 

En esta sección

Tema Descripción

Inicio rápido: conexión de aplicaciones mediante gesto de pulsar o exploración

Al usar la Proximidad, puedes establecer una conexión entre dos dispositivos con un simple gesto de pulsar o explorando en busca de dispositivos que estén dentro del alcance inalámbrico. No necesitas estar conectado a una red. Puedes simplemente juntar dos dispositivos con un gesto de pulsar o conectarte mediante Wi-Fi Direct.

Inicio rápido: publicar mensajes y suscribirse a mensajes mediante gestos de pulsar

Con la Proximidad, puedes publicar y suscribirte a mensajes entre dos dispositivos y escribir etiquetas estáticas en un dispositivo con un simple gesto de pulsar. Si dos dispositivos con proximidad se acercan a unos 3 o 4 centímetros de distancia, la Proximidad notifica a cada sistema. En este tema te mostramos cómo usar la Proximidad para publicar un mensaje o suscribirte a un mensaje.

Pruebas y solución de problemas de la proximidad en las aplicaciones

En este tema se proporcionan instrucciones para que los desarrolladores de aplicaciones prueben y solucionen problemas de proximidad en una aplicación antes de enviarla a la Tienda.

 

Audiencia del desarrollador

La característica de proximidad está diseñada para que la usen los desarrolladores que quieren ampliar su aplicación para que se habiliten las conexiones sencillas mediante un gesto de tocar o mediante la búsqueda de otros dispositivos que ejecuten tu aplicación, o aplicaciones del mismo nivel, dentro del alcance inalámbrico. Por ejemplo, estas aplicaciones pueden incluir un juego con varios jugadores en el que los jugadores hacen que sus dispositivos se toquen a fin de establecer una sesión de juego compartida. O bien, una aplicación puede permitir que los clientes toquen un dispositivo y reciban un vínculo a una ubicación en la que pueden obtener más información o hacer una compra.

Puedes usar la proximidad para permitir un intercambio rápido de datos durante un gesto de pulsar. También puedes usar el gesto de pulsar para establecer un canal de comunicaciones a largo plazo por medio de una red de infraestructura, Wi-Fi Direct o Bluetooth.

Nota  

En las aplicaciones de la Tienda de Windows Phone, no se admite la configuración de un canal de comunicaciones mediante Wi-Fi Direct. Solamente se puede configurar un canal de comunicaciones a largo plazo mediante una red de infraestructura o Bluetooth.

La proximidad es compatible en las clases de Windows en tiempo de ejecución que se encuentran en el espacio de nombres Windows.Networking.Proximity. Puedes usar la clase ProximityDevice para comunicarte con otros dispositivos que estén dentro de un alcance máximo de 4 centímetros e intercambiar una pequeña cantidad de datos durante el gesto de tocar. Puedes usar la clase PeerFinder para comunicarte con aplicaciones del mismo nivel y configurar una conexión de socket a largo plazo. Una aplicación del mismo nivel es otra instancia de una aplicación que se ejecuta en otro dispositivo.

Por ejemplo, en el siguiente código se usa el método estático GetDefault de la clase ProximityDevice para obtener una referencia al dispositivo de proximidad para el equipo local. Mediante la asociación con controladores de eventos con los eventos DeviceArrived y DeviceDeparted, puedes saber cuándo un dispositivo entra en proximidad o sale de ella.

function id(elementId) {
    return document.getElementById(elementId);
}

WinJS.Application.onmainwindowactivated = function (e) {
    if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {

        var proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();

        if (proximityDevice != null) {
            proximityDevice.addEventListener("devicearrived", 
                                             proximityDeviceArrived, false);
            proximityDevice.addEventListener("devicedeparted", 
                                             proximityDeviceDeparted, false);
        }
        else {
            id("MessageBlock").innerHTML += "Failed to initialize proximity device.<br/>";
        }

    }
}
function proximityDeviceArrived() {
    id("MessageBlock").innerHTML += "Proximate device arrived.<br/>";
}

function proximityDeviceDeparted() {
    id("MessageBlock").innerHTML += "Proximate device departed.<br/>";
}

Para obtener un código de ejemplo en el que se puede ver cómo crear una conexión de red entre dispositivos que se juntan con un gesto de pulsar o se conectan mediante búsqueda de dispositivos del mismo nivel, consulta Inicio rápido: conexión de aplicaciones mediante gestos de pulsar o exploración. Para obtener un código de ejemplo que muestra cómo compartir mensajes pequeños entre dispositivos unidos con un gesto de pulsar, consulta Inicio rápido: publicar mensajes y suscribirse a mensajes mediante gestos de tocar. Consulta la muestra de proximidad para ver código de ejemplo que muestra cómo crear conexiones de aplicaciones de varios niveles y examinar dinámicamente las aplicaciones del mismo nivel dentro del alcance mediante los objetos PeerWatcher, ProximityDevice y PeerWatcher.

Importante  

Para usar gestos de pulsar en tu aplicación, debes habilitar la función de Proximidad en el manifiesto de la aplicación.

 

Importante  

Las API de Proximidad no proporcionan autenticación. Deberías evitar intercambiar información confidencial con estas API.

 

Cómo determinar si se admite la proximidad

Como se mencionó anteriormente, un dispositivo debe tener un dispositivo instalado que implemente la interfaz de proximidad de Windows para usar la función de proximidad (para obtener información sobre cómo implementar la interfaz de proximidad de Windows, consulta el tema sobre la especificación de la implementación de transmisión en proximidad de Windows 8). Para determinar si hay un dispositivo compatible con proximidad instalado, comprueba la propiedad PeerFinder.SupportedDiscoveryTypes para ver si las conexiones Triggered son compatibles, comprueba si el método GetDefault devuelve NULL, o bien, obtén una lista de todos los dispositivos de proximidad y asegúrate de que la lista haga referencia al menos a un dispositivo. Para obtener una lista de todos los dispositivos de proximidad instalados, consulta el método GetDeviceSelector.

La proximidad solo se habilita cuando tu aplicación se ejecuta en primer plano

Todas las operaciones ProximityDevice y PeerFinder se deshabilitan si tu aplicación pasa al segundo plano. Solo puedes publicar mensajes y suscribirte para ellos o abrir conexiones de socket si tu aplicación se ejecuta en primer plano. Si abres una conexión de socket y tu aplicación pasa a un segundo plano, la conexión de socket permanecerá abierta.

Activar las aplicaciones mediante proximidad

Al usar PeerFinder y tocar para conectar tu aplicación con una aplicación del mismo nivel en otro dispositivo, Windows solicitará al usuario del otro dispositivo que active la aplicación si es que aún no está en ejecución o no está en primer en plano. Si la aplicación ya está en ejecución en primer plano, se generará el evento de activación sin pedir confirmación al usuario. También puedes activar una aplicación que no esté en ejecución en primer plano llamando a la sobrecarga del método PeerFinder.Start que toma un parámetro de cadena. El parámetro de cadena del método Start contiene un mensaje que se envía a la aplicación del mismo nivel. La aplicación se activará con el mensaje que se pasó a los argumentos de activación.

Cuando activas una aplicación del mismo nivel mediante un gesto de pulsar, se genera el evento Activated. El Kind de activación es Launch. Si activas el evento enviando un mensaje mediante el método PeerFinder.Start, el texto del mensaje puede recuperarse de la propiedad Arguments de los argumentos de inicio. Si tu aplicación se activa para abrir un StreamSocket, la propiedad Arguments devolverá la cadena Windows.Networking.Proximity.PeerFinder:StreamSocket. En este caso, establece la propiedad TriggeredConnectionStateChanged en un controlador de eventos adecuado y llama al método PeerFinder.Start para completar la conexión de sockets.

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") {
            // Call PeerFinder.Start to begin multi-user mode.
        }
        else {
            // Respond to the message string in args.detail.arguments
        }

        args.setPromise(WinJS.UI.processAll());
    }
}

Consulta Inicio rápido: conexión de aplicaciones mediante gesto de pulsar o exploración si quieres ver un ejemplo de una aplicación que se activa mediante un gesto de pulsación y completa automáticamente una conexión de sockets.

Protocolo de comunicación de sockets

Cuando se envía información a una aplicación del mismo nivel mediante un objeto StreamSocket, depende de ti que definas el protocolo que establezca cómo se comparte esa información. Por ejemplo, puedes usar un formato XML, pares nombre-valor delimitados, etc. Cuando la clase PeerFindercrea una conexión de sockets entre aplicaciones del mismo nivel, conecta la aplicación, independientemente de cuál sea su versión. En consecuencia, puedes tener dos versiones distintas de la aplicación comunicándose entre sí. Por ejemplo, si una aplicación receptora espera dos valores de 4 bytes y una versión más reciente de dicha aplicación envía los datos como dos valores de 8 bytes para dar cabida a una mayor cantidad de información, se producirá un error en la aplicación receptora que espera los valores de 4 bytes cuando procese los datos. Por lo tanto, debes tener cuidado y asegurarte de que las versiones más recientes de tu aplicación se pueden comunicar con versiones anteriores a través del protocolo de comunicación que hayas establecido. Dicho de otro modo, confirma que las versiones anteriores de tu aplicación pueden ignorar sin errores la nueva información enviada por una versión más reciente de la aplicación.

Sugerencia  

Cuando las aplicaciones del mismo nivel se comunican, a menudo hay que indicar qué aplicación enviará el primer mensaje y cuál lo escuchará. Un modo de establecer si la aplicación va a enviar o a escuchar consiste en comparar streamSocket.information.localAddress.canonicalName con streamSocket.information.remoteHostName.canonicalName. Si compruebas que el nombre de host local sea más grande que el nombre del host remoto, siempre recibirás un resultado opuesto entre dos instancias de la aplicación.

 

Temas relacionados

Inicio rápido: conectar aplicaciones mediante gestos de pulsar o exploración

Inicio rápido: publicar mensajes y suscribirse a mensajes mediante gestos de tocar

Directrices y lista de comprobación para proximidad

Pruebas y solución de problemas de la proximidad en las aplicaciones

Windows.Networking.Proximity namespace

Muestras

Muestra de proximidad