Diretrizes de aplicativos com cerca geográfica

Observação

MapControl e os serviços de mapa exigem uma chave de autenticação de mapas chamada MapServiceToken. Para saber mais sobre como obter e definir uma chave de autenticação de mapas, consulte Solicitar uma chave de autenticação de mapas.

APIs importantes

Siga estas práticas recomendadas para cerca geográfica em seu aplicativo.

Recomendações

  • Se seu aplicativo precisará de acesso à Internet quando ocorrer um evento de Cerca geográfica, verifique o acesso à Internet antes de criar a cerca geográfica.

    • Se o aplicativo atualmente não oferece acesso à Internet, você pode pedir ao usuário que se conecte à Internet antes de você configurar a cerca geográfica.
    • Se não for possível ter acesso à Internet, evite consumir o poder necessário para as verificações de local da cerca geográfica.
  • Verifique a relevância das notificações de cerca geográfica verificando o carimbo de data/hora e o local atual quando um evento de cerca geográfica indicar mudanças em um estado de Entered ou de Exited. Consulte Verificando o carimbo de data/hora e o local atual a seguir para obter mais informações. (#timestamp) abaixo para saber mais.

  • Crie exceções para gerenciar casos em que um dispositivo não pode acessar informações sobre a localização, nem notificar o usuário se necessário. As informações de localização podem não estar disponíveis porque as permissões estão desativadas, o dispositivo não contém um rádio de GPS, o sinal de GPS está bloqueado ou o sinal de Wi-Fi não está suficientemente forte.

  • Em geral, não é necessário escutar eventos de cerca geográfica no primeiro e no segundo plano ao mesmo tempo. Todavia, se seu aplicativo precisar escutar eventos de cerca geográfica tanto em primeiro quanto em segundo plano:

    • Chame o método ReadReports para descobrir se ocorreu um evento.
    • Cancele seu registro no ouvinte de eventos em primeiro plano quando seu aplicativo não estiver visível para o usuário e registre-o novamente quando ele se tornar visível novamente.

    Consulte Event listeners em segundo e primeiro plano para exemplos de código e mais informações.

  • Não use mais de 1000 cercas geográficas por aplicativo. O sistema na realidade oferece suporte para milhares de cercas geográficas por aplicativo. Você pode manter um bom desempenho do aplicativo para reduzir o uso de memória do aplicativo, usando menos de 1000.

  • Não crie uma cerca geográfica com um raio menor que 50 metros. Se seu aplicativo precisar usar cercas geográficas com raios pequenos, sugira aos usuários para o utilizarem em um dispositivo com rádio GPS para garantir um melhor desempenho.

Diretriz de uso adicional

Verificando o carimbo de data/hora e a localização atual

Quando um evento indica uma alteração em um estado Entered ou Exited, verifique o carimbo de data/hora do evento e sua localização atual. Diversos fatores, como por exemplo o sistema não ter recursos suficientes para executar uma tarefa em segundo plano, o usuário não notar a notificação ou então o dispositivo estar em modo de standby (em Windows), podem afetar o momento em que o evento é processado pelo usuário. Por exemplo, a seguinte sequência pode ocorrer:

  • Seu aplicativo cria um limite geográfico e monitora os eventos que entram e saem dele.
  • O usuário move o dispositivo para dentro do limite geográfico, provocando o disparo de um evento de entrada.
  • Seu aplicativo envia uma notificação ao usuário avisando que ele está agora dentro do limite geográfico.
  • O usuário estava ocupado e não reparou na notificação antes, somente depois de 10 minutos.
  • Durante esses 10 minutos de atraso, o usuário saiu do limite geográfico.

Pelo carimbo de data/hora, você pode dizer qual ação já ocorreu. Pela localização atual, você pode ver que o usuário agora está fora do limite geográfico. Dependendo da funcionalidade de seu aplicativo, convém remover esse evento do filtro.

Ouvintes em primeiro e segundo plano

Em geral, seu aplicativo não precisa escutar eventos de Cerca geográfica em primeiro plano e em uma tarefa em segundo plano ao mesmo tempo. O melhor método caso você precise das duas coisas, é deixar que a tarefa em segundo plano cuide das notificações. Se você configurar ouvintes de cerca geográfica em primeiro e em segundo plano, não será possível saber qual vai ser disparado primeiro, portanto, você sempre deverá chamar o método ReadReports para descobrir se um evento ocorreu.

Se você configurar ouvintes de cerca geográfica em primeiro e segundo plano, cancele o registro do ouvinte de evento em primeiro plano sempre que seu aplicativo não estiver visível para o usuário e registre novamente seu aplicativo quando ele voltar a ficar visível. Veja um código de exemplo que registra o evento de visibilidade.

    Windows.UI.Core.CoreWindow coreWindow;    

    // This needs to be set before InitializeComponent sets up event registration for app visibility
    coreWindow = CoreWindow.GetForCurrentThread();
    coreWindow.VisibilityChanged += OnVisibilityChanged;
 document.addEventListener("visibilitychange", onVisibilityChanged, false);

Quando a visibilidade é alterada, você pode habilitar ou desabilitar os manipuladores de eventos em primeiro plano, conforme mostrado aqui.

private void OnVisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args)
{
    // NOTE: After the app is no longer visible on the screen and before the app is suspended
    // you might want your app to use toast notification for any geofence activity.
    // By registering for VisibiltyChanged the app is notified when the app is no longer visible in the foreground.

    if (args.Visible)
    {
        // register for foreground events
        GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
        GeofenceMonitor.Current.StatusChanged += OnGeofenceStatusChanged;
    }
    else
    {
        // unregister foreground events (let background capture events)
        GeofenceMonitor.Current.GeofenceStateChanged -= OnGeofenceStateChanged;
        GeofenceMonitor.Current.StatusChanged -= OnGeofenceStatusChanged;
    }
}
function onVisibilityChanged() {
    // NOTE: After the app is no longer visible on the screen and before the app is suspended
    // you might want your app to use toast notification for any geofence activity.
    // By registering for VisibiltyChanged the app is notified when the app is no longer visible in the foreground.

    if (document.msVisibilityState === "visible") {
        // register for foreground events
        Windows.Devices.Geolocation.Geofencing.GeofenceMonitor.current.addEventListener("geofencestatechanged", onGeofenceStateChanged);
        Windows.Devices.Geolocation.Geofencing.GeofenceMonitor.current.addEventListener("statuschanged", onGeofenceStatusChanged);
    } else {
        // unregister foreground events (let background capture events)
        Windows.Devices.Geolocation.Geofencing.GeofenceMonitor.current.removeEventListener("geofencestatechanged", onGeofenceStateChanged);
        Windows.Devices.Geolocation.Geofencing.GeofenceMonitor.current.removeEventListener("statuschanged", onGeofenceStatusChanged);
    }
}

Dimensionando suas cercas geográficas

Enquanto o GPS mostra as informações de localização mais precisas, o limite geográfico também usa Wi-Fi ou outros sensores de localização para determinar a posição atual do usuário. Mas o uso desses outros métodos pode afetar o tamanho dos limites geográficos que você pode criar. Se o nível de precisão for baixo, criar cercas geográficas não será útil. Em geral, é recomendado que você não crie uma cerca geográfica com um raio inferior a 50 metros. Além disso, tarefas em segundo plano de cercas geográficas são executadas apenas periodicamente no Windows. Se você utilizar uma cerca geográfica pequena, há a possibilidade de perder totalmente um evento de Enter ou de Exit.

Se seu aplicativo precisar usar cercas geográficas com raios pequenos, sugira aos usuários para o utilizarem em um dispositivo com rádio GPS para garantir um melhor desempenho.