Linee guida per le app che riconoscono la posizione (app di Windows Store in C#/VB/C++ e XAML)

In questo argomento vengono descritte le procedure consigliate per la creazione di un'app in grado di riconoscere la posizione. Sono elencati inoltre i requisiti che devono essere soddisfatti dalla tua app per garantire una buona esperienza utente.

Roadmap: che relazione c'è tra questo argomento e gli altri? Vedi:

Linee guida sulle prestazioni

Questa sezione descrive vari modi per fare in modo che l'app ottenga i dati sulla posizione di cui ha bisogno senza usare più risorse del necessario.

Usa le richieste una tantum sulla posizione quando non sono necessari aggiornamenti

Alcune app hanno bisogno di acquisire i dati sulla posizione una sola volta e non necessitano di aggiornamenti. Ad esempio, un'app che aggiunge un tag di rilevamento della posizione geografica a una foto o a un messaggio di posta elettronica non ha bisogno di ricevere eventi di aggiornamento della posizione. Questo tipo di app dovrebbe richiedere la posizione mediante il metodo GetGeopositionAsync, come descritto in Rilevamento della posizione di un utente.

Sottoscrivere gli eventi relativi alla posizione se appropriato

Usa gli eventi PositionChanged e StatusChanged per rilevare gli spostamenti oltre una specifica soglia o per aggiornamenti continui della posizione quando si verificano.

Regolare la soglia di spostamento

Alcune app richiedono aggiornamenti della posizione solo quando l'utente ha compiuto uno spostamento significativo. Ad esempio, un'app che fornisce notizie locali o aggiornamenti meteo non ha bisogno di aggiornamenti della posizione a meno che l'utente non si sia spostato in un'altra città. In questo caso, è consigliabile regolare lo spostamento minimo richiesto per un evento di aggiornamento della posizione impostando la proprietà MovementThreshold. L'effetto è quello di escludere gli eventi PositionChanged. Questi eventi vengono generati solo quando la variazione di posizione è superiore alla soglia di spostamento. L'impostazione della proprietà MovementThreshold non ha effetto sulla frequenza con cui l'origine dei dati sulla posizione (ad esempio Localizzatore geografico di Windows o un dispositivo GPS collegato) calcola la posizione.

Impostare l'intervallo di report

Usa una proprietà di intervallo di report in modo coerente con l'esperienza offerta dall'app e con l'obiettivo di ridurre al minimo l'uso delle risorse di sistema. Per i dati di un'applicazione meteo potrebbe ad esempio essere sufficiente una frequenza di aggiornamento di 15 minuti.

La maggior parte delle app, eccetto le applicazioni di navigazione in tempo reale, non richiede un flusso costante di aggiornamenti della posizione particolarmente accurati. Se l'app non richiede un flusso di dati della massima precisione oppure richiede raramente aggiornamenti, imposta la proprietà ReportInterval per indicare la frequenza minima di aggiornamento della posizione necessaria per l'app. L'origine di posizione può quindi risparmiare energia calcolando la posizione solo quando è necessario.

Per le app che richiedono dati in tempo reale, ReportInterval deve essere impostato su 0 per indicare che non è specificato alcun intervallo minimo. L'app riceve quindi eventi alla frequenza con cui vengono inviati dall'origine di posizione più accurata.

I dispositivi che forniscono dati sulla posizione possono tenere traccia dell'intervallo di report richiesto da varie app e inviare report di dati con l'intervallo più breve specificato. In questo modo l'app che ha più bisogno di precisione riceverà i dati necessari. È quindi possibile che il localizzatore geografico generi aggiornamenti più spesso rispetto a quanto richiesto dalla tua app, nel caso un'altra app abbia richiesto aggiornamenti più frequenti.

Nota  Non è garantito che l'origine della posizione soddisfi la richiesta in base all'intervallo di report specificato. Anche se non tutti i localizzatori geografici tengono traccia dell'intervallo di report, dovresti comunque specificarlo per quelli che lo fanno.

Impostare la proprietà DesiredAccuracy

Per risparmiare energia, imposta la proprietà DesiredAccuracy dell'app in modo da indicare alla piattaforma di rilevamento della posizione se l'app ha o meno bisogno di dati molto precisi. Se nessuna app richiede dati ad alta precisione, il sistema può risparmiare energia non attivando i provider GPS.

Imposta DesiredAccuracy su HIGH per consentire al GPS di acquisire i dati.

Le app che usano informazioni sulla posizione unicamente a scopi pubblicitari devono impostare DesiredAccuracy su Default e usare solo un modello di chiamata a singolo tentativo per ridurre il consumo energetico.

Usare la proprietà Geocoordinate.Accuracy

Le app con requisiti specifici di precisione, ad esempio le app di navigazione, devono utilizzare la proprietà Geocoordinate.Accuracy per stabilire se i dati sulla posizione disponibili soddisfano tali requisiti.

Considera il ritardo di avvio

La prima volta che un'app richiede dati sulla posizione, può verificarsi un piccolo ritardo di uno-due secondi durante l'avvio del localizzatore geografico, di cui dovresti tenere conto nella progettazione dell'interfaccia utente dell'app. Ad esempio, può essere utile evitare di bloccare altre attività in attesa del completamento della chiamata a GetGeopositionAsync.

Considera il comportamento in background

Se un'app di Windows Store non ha lo stato attivo, mentre è sospesa in background non riceverà eventi di aggiornamento della posizione. Se l'applicazione tiene traccia degli aggiornamenti della posizione registrandoli, presta attenzione a questo aspetto. Quando l'app riprende lo stato attivo, riceve soltanto i nuovi eventi. L'app non ottiene alcun aggiornamento verificatosi mentre era inattiva.

Standby connesso

Quando il PC si trova nello stato di standby connesso, è sempre possibile creare istanze di oggetti Geolocator. L'oggetto Geolocator non troverà però sensori per l'aggregazione, pertanto dopo 7 secondi si verificherà il timeout delle chiamate a GetGeopositionAsync, i listener di eventi PositionChanged non verranno mai chiamati e i listener di eventi StatusChanged verranno chiamati una sola volta con lo stato NoData.

Usare sensori di tipo Raw e Fusion in modo efficiente

Windows 8 supporta due tipi di sensori, Raw (non elaborati) e Fusion (combinati). I sensori di tipo Raw includono accelerometro, giroscopio e magnetometro. I sensori di tipo Fusion includono orientamento, inclinometro e bussola. I sensori di tipo Fusion ottengono i dati da combinazioni di sensori Raw. Le API di Windows Runtime possono accedere a tutti questi sensori, ad eccezione del magnetometro. I sensori di tipo Fusion sono più accurati e stabili rispetto a quelli di tipo Raw, ma consumano più energia. Devi usare i sensori appropriati per ogni scopo specifico. Per altre info, vedi Scelta dei sensori appropriati da usare.

Linee guida per l'esperienza utente

Questa sezione contiene linee guida per assicurarsi che le funzionalità di rilevamento della posizione nella tua app corrispondano alle aspettative degli utenti.

Inizia a usare l'oggetto di rilevamento della posizione solo quando l'app richiede dati sulla posizione

Il primo accesso dell'app all'oggetto posizione attiverà la richiesta di consenso. Ciò si verifica alla prima chiamata dell'app di GetGeopositionAsync o quando l'app registra per la prima volta un gestore per l'evento PositionChanged. Se lo scopo principale di un'app non richiede l'accesso a dati sulla posizione, la visualizzazione di una richiesta di autorizzazione per l'uso del dispositivo all'avvio dell'app può confondere l'utente. Per garantire un'esperienza utente soddisfacente, segui queste linee guida.

Linea guidaEsempio

Se la posizione non è essenziale per il funzionamento dell'app, non effettuare l'accesso a questi dati se non specificamente richiesto dall'utente.

Un'app di social networking contiene un pulsante che consente all'utente di visualizzare la propria posizione. Questa app non dovrebbe accedere ai dati sulla posizione fino a quando l'utente non fa clic sul pulsante.

Se un'app ha bisogno di accedere alla posizione per la propria funzione principale, può accedere al dispositivo all'avvio.

Un'app per il posizionamento dell'utente su una mappa richiede dati sulla posizione per i suoi scopi principali. Va bene che l'app usi la funzionalità di rilevamento della posizione all'avvio, per mostrare subito la posizione dell'utente.

 

Usa il thread principale dell'interfaccia utente per il primo uso dell'oggetto Geolocator

Il primo uso dell'oggetto Geolocator per il recupero dei dati sulla posizione deve essere effettuato nel thread principale dell'interfaccia utente, in modo da visualizzare una richiesta di consenso all'utente. Il primo uso dell'oggetto Geolocator può essere la prima chiamata di GetGeopositionAsync o la prima registrazione di un gestore per l'evento PositionChanged. La richiesta di consenso è descritta in maggiore dettaglio in Linee guida per l'uso di dispositivi sensibili. Questo significa che in un'app scritta in JavaScript, il primo uso dell'oggetto Geolocator non deve essere eseguito in un gestore di attivazione.

Informare l'utente di come verranno usati i dati sulla posizione

Fornire all'utente informazioni su come i dati sulla posizione vengono usati dall'app.

Implementa elementi di interfaccia utente per l'aggiornamento manuale della posizione

L'app dovrebbe includere un controllo dell'interfaccia utente per consentire agli utenti di aggiornare la posizione corrente.

Visualizza informazioni sullo stato in attesa di ottenere i dati sulla posizione

Mentre è in attesa di ricevere i dati sulla posizione, l'app deve visualizzare una barra di stato. Per altre info sull'uso di un controllo di stato, vedi Guida introduttiva: Aggiunta di controlli di stato.

Rilevamento delle modifiche alle impostazioni di posizione

L'utente può disabilitare la funzionalità di rilevamento della posizione usando il pulsante di accesso rapido Impostazioni o il Pannello di controllo. Per ulteriori informazioni sull'interfaccia utente per la modifica delle impostazioni di rilevamento della posizione, vedi Impostazioni di rilevamento della posizione. Per istruzioni di progettazione sulla gestione delle modifiche utente alle impostazioni, vedi Linee guida per l'uso di dispositivi sensibili.

  • Per rilevare quando l'utente disabilita o riabilita i servizi di posizione:
    • Gestisci l'evento StatusChanged. La proprietà Status dell'argomento dell'evento StatusChanged ha il valore Disabled se l'utente disabilita il rilevamento della posizione.
    • Controlla i codici di errore restituiti da GetGeopositionAsync. Se l'utente ha disabilitato i servizi di posizione, le chiamate a GetGeopositionAsync hanno esito negativo con errore ACCESS_DENIED e la proprietà LocationStatus avrà il valore Disabled.
  • Se disponi di un'app per la quale i dati sulla posizione sono essenziali—ad esempio un'app per mappe—, assicurati di eseguire le operazioni seguenti:

Tieni presente che l'API di rilevamento della posizione restituirà i dati man mano che diventano disponibili. Può prima restituire la posizione con un raggio d'errore più esteso e quindi aggiornarla con informazioni più accurate non appena sono a disposizione. Le app che visualizzano la posizione dell'utente in genere devono aggiornare la posizione in base alla disponibilità di informazioni sempre più precise.

Mostra messaggi di errore o finestre di dialogo appropriati quando i servizi di posizione vengono disabilitati o non sono disponibili

Quando l'utente revoca l'accesso ai dati sulla posizione oppure i dati non sono disponibili per l'app, visualizza un messaggio di errore appropriato per l'utente. Se è necessario notificare all'utente che il rilevamento della posizione è stato disabilitato, segui le linee guida per gli errori descritte in Linee guida per l'uso di dispositivi sensibili, nonché le seguenti:

  • È consigliabile usare un messaggio del tipo: "I servizi di posizione sono attualmente disabilitati. Usa il pulsante di accesso rapido Impostazioni per riabilitarli".
  • Fai in modo che i messaggi di errore non interrompano il flusso dell'app. Se i dati sulla posizione non sono essenziali per l'app, visualizza il messaggio come testo in linea. Rientrano in questa categoria le app di giochi o social networking.
  • Se i dati sulla posizione sono essenziali per il funzionamento dell'app, visualizza il messaggio come riquadro a comparsa o finestra di dialogo. Rientrano in questa categoria le app di navigazione e mappe.
  • Non tentare di visualizzare il pulsante di accesso rapido Impostazioni a livello di codice.

Per esempi di errori in linea, finestre di dialogo e riquadri a comparsa, vedi Linee guida per l'uso di dispositivi sensibili e la sezione relativa agli errori in Layout dell'interfaccia utente.

Cancella le informazioni sulla posizione memorizzate nella cache e rilascia l'oggetto Geolocator quando l'utente disabilita l'accesso a informazioni sulla posizione

Rilascia l'oggetto Geolocator se l'utente disabilita l'accesso alle informazioni sulla posizione tramite il pulsante di accesso rapido Impostazioni o le impostazioni del PC. L'app riceverà quindi risultati di tipo ACCESS_DENIED per tutte le chiamate all'API di rilevamento della posizione.

Se l'app salva o memorizza nella cache i dati sulla posizione, eliminali quando l'utente revoca l'accesso a tali informazioni.

Fornisci un modo alternativo per immettere manualmente dati sulla posizione quando non sono disponibili servizi di rilevamento.

Implementa elementi di interfaccia utente per riabilitare i servizi di posizione

L'app deve fornire elementi di interfaccia utente che consentano di riabilitare i servizi di posizione,—ad esempio un pulsante di aggiornamento che ricrei un'istanza dell'oggetto Geolocator e tenti nuovamente di rilevare la posizione.

  • Se l'utente riabilita l'accesso alla posizione dopo averlo disabilitato, l'app non riceve alcuna notifica. La proprietà Status non viene modificata e non si verifica alcun evento StatusChanged. L'app deve creare un nuovo oggetto Geolocator e chiamare GetGeopositionAsync per provare a ottenere i dati aggiornati sulla posizione oppure ripetere la sottoscrizione agli eventi PositionChanged. Se successivamente lo stato indica che il rilevamento della posizione è stato riabilitato, elimina tutti gli elementi di interfaccia visualizzati in precedenza per notificare agli utenti che era disabilitato e rispondi in modo appropriato al nuovo stato.
  • L'app dovrebbe inoltre ritentare di rilevare la posizione all'attivazione quando l'utente tenta esplicitamente di usare funzionalità che richiedono la posizione o in qualunque altra circostanza appropriata.

Linee guida per la rappresentazione grafica della posizione

Imposta l'app in modo che usi il parametro della precisione ricevuto tramite l'API di rilevamento della posizione per indicare chiaramente sulla mappa la posizione corrente dell'utente. Sono disponibili tre bande principali per la precisione,—un raggio di errore di circa 10 metri, uno di circa 100 metri e uno superiore a un chilometro. Grazie alle informazioni sulla precisione l'app visualizzerà in modo accurato la posizione nel contesto dei dati disponibili.

  • Con una precisione di circa 10 metri (risoluzione GPS), la posizione può essere indicata da un punto o una puntina sulla mappa ed è possibile visualizzare le coordinate di latitudine e longitudine, oltre che i nomi delle strade.

    Esempio di mappa visualizzata con precisione GPS pari a circa 10 metri.

  • Con una precisione compresa tra 10 e 500 (circa 100 metri), la posizione viene in genere ricevuta tramite la risoluzione Wi-Fi. In tal caso ti consigliamo di impostare l'app in modo che visualizzi un raggio di errore. Per le app che visualizzano indicazioni stradali, intorno al punto corrispondente alla posizione corrente deve essere visualizzato un raggio di errore.

    Esempio di mappa visualizzata con precisione Wi-Fi pari a circa 100 metri.

  • Se la precisione restituita è maggiore di un chilometro, le informazioni sulla posizione vengono probabilmente ricevute con risoluzione a livello di IP. Si tratta di un livello di precisione spesso troppo basso per indicare un punto specifico su una mappa. L'app deve evitare di visualizzare la rappresentazione geografica di una puntina o di un cerchio, ma ingrandire la mappa fino a visualizzare la città più vicina o l'area appropriata sulla base del raggio di errore, ad esempio l'area geografica.

    Esempio di mappa visualizzata con precisione Wi-Fi pari a circa 1 chilometro.

Quando la precisione della posizione passa da una banda a un'altra, offri un passaggio graduale tra le diverse rappresentazioni grafiche. Puoi farlo in due modi:

  • Rendendo uniforme l'animazione del passaggio in modo che sia rapido e fluido.
  • Attendendo alcune segnalazioni consecutive per confermare il nuovo livello di precisione, per evitare ingrandimenti indesiderati o troppo frequenti.

Linee guida per la rappresentazione della posizione in formato testo

Alcuni tipi di app—ad esempio un'app meteo o una per le informazioni locali—devono poter rappresentare la posizione delle diverse bande di precisione in formato testo. Assicurati di visualizzare la posizione in modo chiaro e solo fino al livello di precisione specificato nei dati.

  • Con la precisione pari a circa 10 metri (risoluzione GPS), i dati sulla posizione sono abbastanza accurati e possono essere comunicati a livello di quartiere. È anche possibile usare il nome della città, della provincia e dell'area geografica o del paese.
  • Con la precisione pari a circa 100 metri (risoluzione Wi-Fi), i dati sulla posizione sono sufficientemente accurati da poter essere visualizzati fino al livello del nome della città. Evita di usare il nome del quartiere.
  • Con la precisione maggiore a 1 chilometro (risoluzione IP), visualizza solo il nome della provincia oppure del paese o dell'area geografica.

Considerazioni sulla privacy

La posizione geografica di un utente è un'informazione personale. Nel sito Web indicato di seguito sono disponibili indicazioni utili per la protezione della privacy degli utenti.

Argomenti correlati

Esempio di georilevazione
Windows.Devices.Geolocation
Linee guida per l'uso di dispositivi sensibili
Roadmap per la creazione di app con C#, C++ o VB

 

 

Mostra:
© 2014 Microsoft