Détecter des événements de clôture virtuelle en arrière-plan (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Cette rubrique vous guide tout au long des étapes nécessaires pour configurer une tâche en arrière-plan afin de détecter des notifications Geofence dans votre application.

Feuille de route : comment cette rubrique s’articule-t-elle par rapport aux autres ? Voir :

Introduction

Une fois vos clôtures virtuelles (parfois appelées « géorepères ») créées, vous devrez ajouter la logique afin de gérer ce qui se passe quand un événement de géorepérage survient. En fonction de la propriété MonitoredStates que vous avez configurée, il est possible que vous receviez un événement quand :

  • l’utilisateur a entré une région d’intérêt ;
  • l’utilisateur a quitté une région d’intérêt ;
  • la clôture virtuelle a expiré ou a été supprimée. Notez qu’aucune application en arrière-plan n’est activée pour un événement de suppression.

Cette rubrique décrit comment configurer une tâche en arrière-plan afin d’alerter votre application lorsqu’un événement de clôture virtuelle survient. Vous pouvez également gérer des événements directement depuis votre application lorsqu’elle est en cours d’exécution. Pour en savoir plus, voir Gérer des notifications de clôture virtuelle au premier plan et Recommandations en matière de géorepérage.

La détection d’un événement de géorepérage en arrière-plan implique plusieurs étapes :

  • Déclarez la tâche en arrière-plan dans le manifeste de votre application.
  • Inscrivez la tâche en arrière-plan dans votre application. Si votre application nécessite un accès à Internet (par exemple, pour accéder à un service cloud), vous pouvez définir un indicateur à cet effet lorsque l’événement est déclenché. Vous pouvez aussi définir un indicateur pour vous assurer que l’utilisateur est présent au moment du déclenchement de l’utilisateur et être certain que ce dernier en soit informé.
  • Tandis que votre application est exécutée au premier plan, invitez l’utilisateur à lui accorder des autorisations d’emplacement.

S’inscrire pour des événements de changement d’état de géorepérage

Dans le manifeste de votre application, dans l’onglet Déclarations, ajoutez une déclaration pour une tâche en arrière-plan d’emplacement. Pour ce faire :

  • Ajoutez une déclaration de type Tâches en arrière-plan.
  • Définissez une tâche de propriété de type Emplacement.
  • Dans votre application, définissez un point d’entrée à entrer au moment où l’événement est déclenché.

Inscrire la tâche en arrière-plan

Le code suivant inscrit la tâche de clôture virtuelle en arrière-plan. Rappelez-vous : au moment de créer la clôture virtuelle, nous avons vérifié les autorisations d’emplacement. Pour en savoir plus, voir Configurer une clôture virtuelle.

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

Rubriques associées

Feuilles de route

Feuille de route pour les applications en JavaScript

Conception de l’expérience utilisateur des applications

Tâches

Configurer une clôture virtuelle

Gérer des notifications de clôture virtuelle au premier plan

Gérer des notifications de clôture virtuelle à partir d’une tâche en arrière-plan

Référence

Geoshape

Geofence

Geolocator

Autres ressources

Exemple de géolocalisation Windows 10

Exemple de géolocalisation Windows 8.1

Recommandations en matière de géorepérage