Condividi tramite


Supporto di prossimità e tocco (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Scopo

Nota  

La prossimità è progettata per gli sviluppatori che vogliono incorporare le connessioni semplici nelle app tramite tocco. Le applicazioni potrebbero, ad esempio, includere un'esperienza di gioco con più utenti, in cui due utenti mettono in collegamento i propri computer con un tocco per stabilire una sessione di gioco condiviso. Oppure potrebbe trattarsi di un'app in cui i clienti toccano un computer e ricevono il collegamento a una posizione dove possono ottenere altre informazioni o fare acquisti. Per stabilire una connessione tra i due dispositivi usando il tocco, entrambi i dispositivi devono avere un dispositivo di prossimità, ad esempio un dispositivo di comunicazione radio NFC.

 

L'uso della prossimità ti consente di ottimizzare le tue app per l'uso di NFC (Near-Field Communications) e per connettere due dispositivi senza che sia necessaria una rete, tramite Wi-Fi Direct. La prossimità e le comunicazioni NFC ti consentono di connettere dispositivi con un semplice gesto tocco. Se due dispositivi si trovano nel raggio di massimo 4 centimetri o vengono uniti con un tocco, il sistema operativo di ognuno di essi rileva la presenza dell'altro. Puoi inoltre connettere due dispositivi che eseguono l'applicazione e si trovano entro la portata di connessione wireless usando la navigazione peer-to-peer con Wi-Fi Direct. Una volta connessi, puoi usare i due dispositivi per condividere contenuti, ad esempio foto o collegamenti, creare un'esperienza multiplayer o pubblicare e sottoscrivere messaggi.

Importante  

Per consentire le connessioni tramite tocco, nel dispositivo deve essere installato un dispositivo di prossimità, ad esempio un dispositivo di comunicazione radio NFC. Per consentire la navigazione peer-to-peer, un dispositivo deve avere un dispositivo Wi-Fi che supporti Wi-Fi Direct.

 

Contenuto della sezione

Argomento Descrizione

Guida introduttiva: Connessione di app mediante il tocco o la ricerca

Quando usi la prossimità, puoi creare una connessione tra due dispositivi con un semplice gesto tocco oppure ricercando i dispositivi a portata di connessione wireless. Non devi necessariamente essere connesso a una rete. Basta semplicemente unire due dispositivi con un tocco o stabilire la connessione usando Wi-Fi Direct.

Guida introduttiva: Pubblicazione e sottoscrizione di messaggi tramite tocco

Con Prossimità puoi pubblicare e sottoscrivere messaggi tra due dispositivi e scrivere tag statici in un dispositivo con un semplice tocco. Se due dispositivi si trovano a una distanza di 3-4 centimetri l'uno dall'altro, Prossimità invia una notifica al sistema. Questo argomento illustra come usare Prossimità per pubblicare o sottoscrivere un messaggio.

Test e risoluzione dei problemi relativi alla prossimità nelle app

In questo argomento vengono illustrate le linee guida per gli sviluppatori di app per il test e la risoluzione dei problemi relativi alla prossimità in un'app prima di inviare l'app a Windows Store.

 

Pubblico di sviluppatori

La prossimità è progettata per essere usata dagli sviluppatori che vogliono espandere la propria applicazione per consentire facili connessioni tramite tocco o la ricerca di altri dispositivi che eseguono l'app o applicazioni peer entro la portata di connessione wireless. Le applicazioni potrebbero, ad esempio, includere un gioco multiplayer in cui due utenti mettono in collegamento i propri dispositivi con un tocco per stabilire una sessione di gioco condiviso. Oppure un'app potrebbe prevedere che i clienti tocchino un dispositivo e ricevano il collegamento a una posizione dove possono ottenere altre informazioni o fare acquisti.

Puoi usare la prossimità per consentire un rapido scambio di dati durante un gesto tocco. In alternativa, puoi usare il tocco per impostare un canale di comunicazione a lungo termine tramite la rete in modalità infrastruttura, Wi-Fi Direct o Bluetooth.

Nota  

Per le app di Windows Phone Store, l'impostazione di un canale di comunicazione tramite Wi-Fi Direct non è supportata. Puoi configurare solo un canale di comunicazione a lungo termine usando la rete in modalità infrastruttura o Bluetooth.

La prossimità è supportata dalle classi che in Windows Runtime si trovano nello spazio dei nomi Windows.Networking.Proximity. Puoi usare la classe ProximityDevice per comunicare con altri dispositivi che si trovano in un raggio di 4 centimetri o meno e scambiare una piccola quantità di dati durante il tocco. Puoi usare la classe PeerFinder per comunicare con app peer e impostare una connessione socket a lungo termine. Un'app peer è un'altra istanza di un'applicazione in esecuzione su un dispositivo separato.

Il codice seguente, ad esempio, usa il metodo statico GetDefault della classe ProximityDevice per ottenere un riferimento al dispositivo di prossimità per il computer locale. Associando i gestori eventi agli eventi DeviceArrived e DeviceDeparted, puoi segnalare quando un dispositivo entra o esce dall'area di prossimità.

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/>";
}

Per un codice di esempio che mostra come creare una connessione di rete tra dispositivi collegati con un tocco o connessi mediante navigazione peer-to-peer, vedi Guida introduttiva: Collegamento di applicazioni tramite tocco o esplorazione. Per un codice di esempio che mostra come condividere piccoli messaggi tra dispositivi collegati con un tocco, vedi Guida introduttiva: Pubblicazione e sottoscrizione di messaggi tramite tocco. Per ottenere un esempio di codice che mostri come creare connessioni ad app multipeer e analizzare dinamicamente le app peer nell'intervallo usando gli oggetti PeerWatcher, ProximityDevice e PeerWatcher, vedi Esempio di prossimità.

Importante  

Per usare il tocco nell'app, devi abilitare la funzionalità di prossimità nel manifesto del pacchetto dell'app.

 

Importante  

Le API di prossimità non forniscono autenticazione. È consigliabile evitare lo scambio di dati sensibili con queste API.

 

Come determinare se è supportata la prossimità

Come indicato in precedenza, per poter usare la funzionalità Prossimità è necessario che sul dispositivo sia installato un dispositivo che implementa l'interfaccia di prossimità di Windows (per informazioni sull'implementazione di tale interfaccia, vedi la specifica per l'implementazione della prossimità near field di Windows 8). Per stabilire se è installato un dispositivo che supporta la prossimità, verifica la proprietà PeerFinder.SupportedDiscoveryTypes per capire se sono supportate connessioni Triggered, verifica se il metodo GetDefault restituisce NULL oppure ottieni un elenco di tutti i dispositivi di prossimità e assicurati che faccia riferimento ad almeno un dispositivo. Per informazioni su come ottenere un elenco di tutti i dispositivi di prossimità installati, fai riferimento al metodo GetDeviceSelector.

La prossimità è abilitata solo quando l'app è in esecuzione in primo piano

Tutte le operazioni ProximityDevice e PeerFinder vengono disabilitate se l'app viene spostata in background. Puoi pubblicare e sottoscrivere messaggi o aprire connessioni socket solo se l'app è in esecuzione in primo piano. Se si apre una connessione socket e si sposta quindi l'app in background, la connessione socket resta aperta.

Attivazione di app mediante prossimità

Se usi PeerFinder e tocchi l'app per connetterla a un'app peer su un altro dispositivo, Windows richiederà all'utente dell'altro dispositivo di attivare l'app, se non è già in esecuzione o non è in primo piano. Se l'app è già in esecuzione in primo piano, l'evento di attivazione verrà generato senza alcuna richiesta per l'utente. Puoi attivare un'app che non è in esecuzione in primo piano anche chiamando l'overload del metodo PeerFinder.Start che accetta un parametro di tipo stringa. Il parametro di tipo stringa per il metodo Start contiene un messaggio inviato all'app peer. L'app verrà attivata con il messaggio passato agli argomenti di attivazione.

Quando si attiva un'app peer con un tocco, viene generato l'evento Activated. La proprietà Kind di attivazione è Launch. Se attivi l'evento inviando un messaggio tramite il metodo PeerFinder.Start, il testo del messaggio potrà essere recuperato dalla proprietà Arguments degli argomenti di avvio. Se l'app viene attivata per aprire una classe StreamSocket, la proprietà Arguments restituirà la stringa Windows.Networking.Proximity.PeerFinder:StreamSocket. In tal caso, imposta la proprietà TriggeredConnectionStateChanged su un gestore eventi appropriato e chiama il metodo PeerFinder.Start per completare la connessione socket.

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

Per un esempio di un'app che viene attivata da un gesto tocco e completa automaticamente una connessione socket, vedi Guida introduttiva: Collegamento di applicazioni tramite tocco o navigazione.

Protocollo di comunicazione socket

Quando invii informazioni a un'app peer usando un oggetto StreamSocket, è compito tuo definire il protocollo per la condivisione delle informazioni. Potresti ad esempio usare un formato XML, coppie nome/valore delimitate e così via. Quando la classe PeerFinder crea una connessione socket tra app peer, connette le app indipendentemente dalla loro versione. Di conseguenza, puoi trovarti ad avere due versioni diverse della tua app che comunicano tra loro. Ad esempio, se un'app ricevente si aspetta due valori a 4 byte e una versione più recente dell'app invia i dati come valori a 8 byte per adattarsi a dati di dimensioni maggiori, l'app ricevente che si aspetta valori a 4 byte incontrerà un errore durante l'elaborazione dei dati. Devi quindi fare in modo che le versioni più recenti della tua app siano ancora in grado di comunicare con le versioni meno recenti tramite il protocollo di comunicazione. Questo significa che le versioni meno recenti della tua app devono essere in grado di ignorare le nuove informazioni inviate da una versione più recente senza incontrare problemi.

Suggerimento  

Quando le app peer comunicano, è spesso necessario determinare quale app invierà il primo messaggio e quale app rimarrà in ascolto. Un modo per determinare se la tua app è il mittente o il listener consiste nel confrontare streamSocket.information.localAddress.canonicalName con streamSocket.information.remoteHostName.canonicalName. Verificando se il nome host locale è maggiore del nome host remoto, riceverai sempre un risultato opposto tra due istanze dell'app.

 

Argomenti correlati

Guida introduttiva: Collegamento di applicazioni tramite tocco o navigazione

Guida introduttiva: Pubblicazione e sottoscrizione di messaggi tramite tocco

Linee guida ed elenco di controllo per la prossimità

Test e risoluzione dei problemi relativi alla prossimità nelle app

Windows.Networking.Proximity namespace

Esempi

Esempio di prossimità