Proximidad y pulsar
Idioma: HTML | XAML

Proximidad y pulsación (XAML)

[ 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).

 

De mismo modo, puedes conectar dos equipos en los que se ejecuta tu aplicación (siempre y cuando estén dentro del mismo alcance inalámbrico) mediante la búsqueda de dispositivos del mismo nivel con Wi-Fi Direct. Igualmente, también puedes conectar dos Windows Phone en los que se ejecuta tu aplicación (siempre y cuando estén dentro del mismo alcance de Bluetooth) mediante la búsqueda de dispositivos del mismo nivel. Una vez establecida la conexión, los dispositivos pueden compartir contenido como fotos o vínculos, crear una experiencia de juego multijugador o publicar mensajes y suscribirse a mensajes.

En esta sección

TemaDescripción

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

En este tema veremos el código necesario para que tu aplicación sea capaz de conectarse a otra instancia de tu aplicación que se ejecuta en otro dispositivo mediante la Proximidad.

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

En este tema verás cómo usar las API de Proximidad PublishMessage y SubscribeForMessage para intercambiar mensajes entre dos dispositivos mediante pulsaciones.

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.

 

Guía básica: relación de este tema con los demás. Consulta:

Audiencia del desarrollador

Puedes usar la Proximidad para habilitar un intercambio rápido de datos durante un gesto de pulsar o puedes usar un gesto de pulsar para establecer un canal de comunicaciones a largo plazo, mediante 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 carga 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 una instancia adicional de una aplicación que se está ejecutando 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. Si asocias controladores de eventos con los eventos DeviceArrived y DeviceDeparted, puedes saber cuándo un dispositivo se encuentra o no próximo; es decir, cuándo está dentro de un alcance de 4 centímetros o menos del dispositivo.


Windows.Networking.Proximity.ProximityDevice proximityDevice;

public MainPage()
{
    InitializeComponent();

    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

    if (proximityDevice != null)
    {
        proximityDevice.DeviceArrived += ProximityDeviceArrived;
        proximityDevice.DeviceDeparted += ProximityDeviceDeparted;
    }
    else
    {
        MessageTextBlock.Text += "Failed to initialize proximity device.\n";
    }
}



    Windows.UI.Core.CoreDispatcher _dispatcher = Window.Current.Dispatcher;

private async void ProximityDeviceArrived(object sender)
{
await _dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
            MessageTextBlock.Text += "Proximate device arrived.\n";
});
}

private async void ProximityDeviceDeparted(object sender)
{
await _dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
            MessageTextBlock.Text += "Proximate device departed.\n";
});
}       


Para ver un código de ejemplo que muestra cómo crear una red entre dispositivos juntados con un gesto de pulsar, consulta Inicio rápido: conexión de aplicaciones mediante gesto 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 o 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 PeerFinder, 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

Tal y como hemos dicho antes, un equipo o teléfono debe tener un dispositivo instalado que implemente la interfaz de proximidad de Windows que permita usar la función de Proximidad. (Para más información sobre cómo implementar la interfaz de proximidad de Windows, consulta la especificación de la implementación de transmisión en proximidad de Windows 8). Para saber si hay instalado un dispositivo compatible con la Proximidad, comprueba la propiedad PeerFinder.SupportedDiscoveryTypes para ver si las conexiones Triggered son compatibles, comprueba si el método GetDefault devuelve NULL, o bien usa el método the GetDeviceSelector para obtener una lista de todos los dispositivos de Proximidad instalados y confirmar que devuelve uno al menos.

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 a una aplicación del mismo nivel en otro dispositivo, se 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, la aplicación se activa con un Kind de activación que es Launch. Si activas la aplicación 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. El siguiente ejemplo se ha extraído del código de ejemplo del tema de inicio rápido: conectar aplicaciones mediante gestos de pulsar o exploración y utiliza el código del evento OnLaunched para pasar los argumentos de inicio.


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName;
    Windows.Networking.Proximity.PeerFinder.ConnectionRequested += ConnectionRequested;

    // If activated from launch or from the background, create a peer connection.
    var args = e.Parameter as Windows.ApplicationModel.Activation.LaunchActivatedEventArgs;
    if (args != null && args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Launch)
    {
        if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket")
        {
            AdvertiseForPeersButton_Click(null, null);
        }
    }
}


Cifrar datos enviados a través de sockets de red

Si abres un StreamSocket mediante Proximidad y vas a enviar información confidencial a través de la red, puedes cifrar los datos que se van a enviar a través del socket. Para más información sobre la configuración del cifrado, consulta la propiedad SessionKey y el método CreateSymmetricKey.

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 o suscribirse a mensajes mediante gestos de tocar
Guidelines for Proximity
Pruebas y solución de problemas de la Proximidad en las aplicaciones
Windows.Networking.Proximity namespace
Muestras
Muestra de proximidad

 

 

Mostrar:
© 2017 Microsoft