Rilevare eventi di recinti virtuali in background (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 ]

In questo argomento vengono illustrati i passaggi necessari per configurare un'attività in background che rimanga in ascolto di notifiche di Geofence in un'app.

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

Introduzione

Dopo aver creato i recinti virtuali, devi aggiungere la logica per gestire gli eventi dei recinti virtuali. A seconda degli stati monitorati configurati, può verificarsi un evento quando:

  • L'utente entra in un'area di interesse.
  • L'utente esce da un'area di interesse.
  • Il recinto virtuale scade o viene rimosso. Tieni presente che le app in background non vengono attivate per gli eventi di rimozione.

In questo argomento viene descritto come configurare un'attività in background per indicare all'app che si è verificato un evento di recinto virtuale. Puoi anche gestire gli eventi direttamente dall'app quando è in esecuzione. Per altre info, vedi Gestire le notifiche dei recinti virtuali in primo piano e Linee guida per i recinti virtuali.

Il rilevamento in background di eventi dei recinti virtuali richiede diversi passaggi:

  • Dichiarare l'attività in background nel manifesto dell'app
  • Registrare l'attività in background nell'app Se quando si verifica l'evento l'app deve disporre di connessione Internet, ad esempio per accedere a un servizio cloud, puoi impostare un flag apposito. Puoi anche impostare un flag per accertarti che l'utente sia presente quando viene attivato l'evento in modo che riceva immediatamente la notifica.
  • Quando l'app è in esecuzione in primo piano, richiedi all'utente di concedere le autorizzazioni per i dati sulla posizione.

Registrare gli eventi di modifica dello stato del recinto virtuale

Nel manifesto dell'app, nella scheda Dichiarazioni, aggiungi una dichiarazione per un'attività in background relativa alla posizione. A tale scopo, esegui le operazioni seguenti:

  • Aggiungi una dichiarazione di tipo attività in background.
  • Imposta un tipo di attività Posizione.
  • Imposta un punto di ingresso nell'app da chiamare all'attivazione dell'evento.

Registrare l'attività in background

Il codice seguente consente di registrare le attività in background relative ai recinti virtuali. Ricorda che al momento della creazione del recinto virtuale abbiamo verificato le autorizzazioni per i dati sulla posizione. Per altre informazioni, vedi Configurare un recinto virtuale.

function registerBackgroundTask() {
    try {
        // Request lockscreen access
        Background.BackgroundExecutionManager.requestAccessAsync().done(
            function (backgroundAccessStatus) {
                var builder =  new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

                // Register the background task
                builder.name = sampleBackgroundTaskName;
                builder.taskEntryPoint = sampleBackgroundTaskEntryPoint;
                builder.setTrigger(new Windows.ApplicationModel.Background.LocationTrigger(Windows.ApplicationModel.Background.LocationTriggerType.geofence));

                // If it is important that there is user presence and/or
                // internet connection when OnCompleted is called
                // the following could be called before calling Register()
                // var condition = new SystemCondition(SystemConditionType.userPresent | SystemConditionType.internetAvailable);
                // builder.addCondition(condition);

                geofenceTask = builder.register();

                geofenceTask.addEventListener("completed", onCompleted);

                LocationTriggerBackgroundTask.updateButtonStates(/*registered:*/ true);

                switch (backgroundAccessStatus) {
                    case Background.BackgroundAccessStatus.unspecified:
                    case Background.BackgroundAccessStatus.denied:
                        WinJS.log && WinJS.log("This app is not allowed to run in the background.", "sample", "status");
                        break;

                    default:
                        // Finish by getting an initial position. This will present the location consent
                        // dialog if it's the first attempt for this application to access location.
                        getGeopositionAsync();
                        break;
                }
            },
            function (e) {
                // Did you forget to do the background task declaration in the package manifest?
                WinJS.log && WinJS.log(e.toString(), "sample", "error");
            }
        );
    } catch (ex) {
        // HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) === -2147024846

        if (ex.number === -2147024846) {
            WinJS.log && WinJS.log("Location Simulator not supported.  Could not get permission to add application to the lock screen, this application must be added to the lock screen before the background task will run.", "sample", "status");
        } else {
            WinJS.log && WinJS.log(ex.toString(), "sample", "error");
        }
    }
}

Argomenti correlati

Roadmap

Roadmap per app in JavaScript

Progettazione dell'esperienza utente per le app

Attività

Configurare un recinto virtuale

Gestire le notifiche dei recinti virtuali in primo piano

Gestire le notifiche dei recinti virtuali mediante un'attività in background

Riferimenti

Geoshape

Geofence

Geolocator

Altre risorse

Esempio di georilevazione per Windows 10

Esempio di georilevazione per Windows 8.1

Linee guida per la funzionalità per i recinti virtuali