Idioma: HTML | XAML

Proximidade e toque (aplicativos do Tempo de Execução do Windows em C#/VB/C++ e XAML)

Applies to Windows and Windows Phone

Finalidade

Observação  

Proximidade é projetada para desenvolvedores que desejam incorporar conexões fáceis em seus aplicativos por meio de um toque. Isso pode incluir um jogo de vários jogadores, por exemplo, no qual dois usuários tocam em seus dispositivos para estabelecerem juntos uma sessão de jogo compartilhada. Ou, pode ser um aplicativo no qual os clientes tocam no dispositivo para receber um link para um local onde podem obter mais informações ou fazer uma compra. Para fazer uma conexão entre dois dispositivos usando um gesto de toque, ambos os dispositivos devem ter um dispositivo de proximidade, como um rádio NFC (Near Field Communication).

Também é possível conectar dois computadores executando o mesmo aplicativo, se estiverem dentro da distância sem fio, usando navegação entre pares com Wi-Fi Direct. Do mesmo modo, você pode conectar dois Windows Phones que estão executando seu aplicativo, se estiverem dentro do alcance de Bluetooth, usando a navegação de pares. Depois de estarem ligados, os dispositivos podem compartilhar conteúdo como fotos ou links, criar uma experiência de jogo com vários participantes ou publicar e assinar mensagens.

Nesta seção

TópicoDescrição

Guia de início rápido: conectando aplicativos usando toque ou busca

Este tópico percorre o código necessário para tornar seu aplicativo capaz de conectar a outra instância de seu aplicativo que está executando em outro dispositivo, usando a proximidade.

Guia de início rápido: publicando e assinando mensagens com toque

Este tópico mostra como usar o PublishMessage e as APIs de proximidade SubscribeForMessage para trocar mensagens entre dois dispositivos usando toque.

Testando e solucionando problemas de proximidade em aplicativos

Este tópico traz diretrizes para os desenvolvedores de aplicativos testarem e solucionarem problemas de proximidade em um aplicativo antes de enviá-lo para a loja.

 

Mapa: Como este tópico está relacionado aos outros? Veja:

Audiência de desenvolvedores

Você pode usar proximidade para habilitar uma troca de dados rápida durante um gesto de tocar ou pode usar um toque para configurar um canal de comunicação de longo prazo usando rede de Infraestrutura, Wi-Fi Direct ou Bluetooth.

Observação  

Windows Phone: configurar um canal de comunicação usando Wi-Fi Direct não é permitido. Só é possível configurar um canal de comunicação de longo prazo usando uma rede de infraestrutura ou Bluetooth.

O suporte a proximidade é oferecido pelas classes do Tempo de Execução do Windows que estão no namespace Windows.Networking.Proximity. Você pode usar a classe ProximityDevice para se comunicar com outros dispositivos a uma distância de 4 centímetros ou menos e trocar uma pequena quantidade de dados durante o toque. Você pode usar a classe PeerFinder para se comunicar com aplicativos pares e configurar uma conexão de soquete de longo prazo. Um aplicativo par é uma instância adicional de um aplicativo que está executando em outro dispositivo.

Por exemplo, o código a seguir usa o método estático GetDefault da classe ProximityDevice para obter uma referência ao dispositivo de proximidade da máquina local. Associando manipuladores de eventos aos eventos DeviceArrived e DeviceDeparted, você pode informar quando um dispositivo entra ou deixa a proximidade em que está, o alcance é de 4 centímetros ou menos de seu 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 obter um exemplo de código mostrando como estabelecer uma conexão de rede entre dispositivos que são tocados simultaneamente, veja Guia de início rápido: Usando toque ou navegação para conectar aplicativos. Para obter um exemplo de código mostrando como compartilhar pequenas mensagens entre dispositivos que são tocados simultaneamente, veja Guia de início rápido: Usando toque para publicar ou assinar mensagens. Para obter um exemplo de código mostrando como criar conexões de aplicativos entre vários pares e verificar de forma dinâmica se há aplicativos pares no alcance usando os objetos PeerFinder, ProximityDevice e PeerWatcher, veja o Exemplo de proximidade.

Importante  

Para usar toque em seu aplicativo, você deve ativar o recurso de proximidade no manifesto do pacote de seu aplicativo.

Importante  

As APIs de Proximidade não oferecem autenticação, criptografia nem integridade de mensagem. Não use a proximidade para trocar informações confidenciais dos usuários, como senhas, dados financeiros, mensagens de texto, emails, fotos ou números de identificação do governo.

Como determinar se a proximidade é permitida

Conforme mencionado anteriormente, um computador ou telefone deve ter um dispositivo instalado que implementa a interface de Proximidade do Windows para usar o recurso de proximidade. (Para obter informações sobre como implementar a interface de Proximidade do Windows, consulte Especificação de Implementação da Proximidade a Curta Distância do Windows 8.) Você pode determinar se há um dispositivo instalado que permite Proximidade verificando a propriedade PeerFinder.SupportedDiscoveryTypes para ver se as conexões Triggered são permitidas, verificando se o método GetDefault retorna NULL ou usando o método the GetDeviceSelector para obter uma lista de todos os dispositivos de proximidade instalados e assegurando que a lista mencione pelo menos um dispositivo.

A proximidade só é habilitada quando o aplicativo é executado em primeiro plano

Todas as operações ProximityDevice e PeerFinder são desabilitadas quando o aplicativo passa para segundo plano. Você só pode publicar e assinar mensagens ou conexões de soquete abertas quando o aplicativo é executado em primeiro plano. Se você abrir uma conexão de soquete e seu aplicativo passar para segundo plano, a conexão de soquete vai permanecer aberta.

Ativando aplicativos usando proximidade

Quando você usa o PeerFinder e toca para conectar seu aplicativo a um aplicativo par em outro dispositivo, é pedido ao usuário do outro dispositivo que ative o aplicativo, quando o aplicativo ainda não está em execução ou não está em primeiro plano. Quando o aplicativo já está sendo executado em primeiro plano, o evento de ativação é acionado sem antes avisar o usuário. Você também pode ativar um aplicativo que não esteja sendo executado em primeiro plano chamando a sobrecarga do método PeerFinder.Start que obtém o parâmetro da cadeia de caracteres. O parâmetro da cadeia de caracteres do método Start inclui uma mensagem que é enviada ao aplicativo par. O aplicativo é ativado com a mensagem transmitida para os argumentos de ativação.

Quando você ativa um aplicativo par usando o gesto de toque, o aplicativo é acionado com uma ativação Kind de Launch. Se você ativar o aplicativo enviando uma mensagem usando o método PeerFinder.Start, o texto da mensagem poderá ser recuperado da propriedade Arguments dos argumentos de início Quando o aplicativo é ativado para abrir um StreamSocket, a propriedade Arguments retorna a cadeia de caracteres Windows.Networking.Proximity.PeerFinder:StreamSocket. Nesse caso, defina a propriedade TriggeredConnectionStateChanged como um manipulador de eventos e chame o método PeerFinder.Start para concluir a conexão de soquete. O exemplo a seguir foi tirado do código de exemplo em Guia de início rápido: Conectando aplicativos usando toque ou navegação e se baseia no código no evento OnLaunched para passar os argumentos de início.


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);
        }
    }
}


Criptografando dados enviados por soquetes de rede

Se você abre um StreamSocket que usa proximidade e você enviar informações confidenciais pela rede, pode criptografar os dados enviados por soquete. Para saber sobre como configurar a criptografia, veja a propriedade SessionKey e o método CreateSymmetricKey.

Protocolo de comunicação de soquetes

Quando você envia informações a um aplicativo par usando um objeto StreamSocket, pode decidir qual protocolo prefere usar para o compartilhamento dessas informações. Por exemplo, você pode usar um formato XML, pares de nomes/valores delimitados e assim por diante. Quando a classe PeerFinder cria uma conexão de soquete entre aplicativos pares, ela conecta esses aplicativos independentemente da versão deles. Como resultado, você pode ter duas versões diferentes do seu aplicativo comunicando-se entre si. Por exemplo, se um aplicativo receptor espera dois valores de 4 bytes, e uma versão mais recente do aplicativo envia os dados como dois valores de 8 bytes para acomodar dados maiores, o aplicativo receptor que espera valores de 4 bytes irá se deparar com um erro durante o processamento dos dados. É necessário ter cautela para garantir que versões mais recentes do seu aplicativo ainda possam se comunicar com versões mais antigas dele usando seu protocolo de comunicação. Ou seja, verifique se as versões mais antigas do seu aplicativo podem ignorar novas informações enviadas de uma versão mais recente sem gerar problemas.

Dica  

Quando aplicativos pares se comunicam, você geralmente precisa determinar qual aplicativo enviará a primeira mensagem e qual aplicativo será o ouvinte. Uma maneira de determinar se o seu aplicativo é o emissor ou o ouvinte é comparar StreamSocket.Information.LocalAddress.CanonicalName com StreamSocket.Information.RemoteHostName.CanonicalName. Testando se o nome do host local é maior que o nome do host remoto, você sempre receberá um resultado oposto entre duas instâncias do seu aplicativo.

Tópicos relacionados

Guia de início rápido: Usando toque ou navegação para conectar aplicativos
Guia de início rápido: Usando toque para publicar ou assinar mensagens
Guidelines for proximity
Testando e solucionando problemas de proximidade em aplicativos
Windows.Networking.Proximity namespace
Mapa para a criação de aplicativos usando C#, C++ ou VB
Exemplos
Exemplo de proximidade

 

 

Mostrar:
© 2014 Microsoft