Aplicativos do Windows
Recolher sumário
Expandir sumário

Diretrizes para aplicativos com reconhecimento de localização (aplicativos da Windows Store em C#/VB/C++ e XAML)

Este tópico mostra as práticas recomendadas para criar um aplicativo com reconhecimento de localização. Ele também lista os requisitos do seu aplicativo para garantir uma boa experiência do usuário.

Mapa: Como este tópico está relacionado aos outros? Veja:

Diretrizes de desempenho

Esta seção descreve as várias formas de garantir que o aplicativo obtenha os dados de localização necessários, sem usar mais recursos do que o necessário.

Usar solicitações de localização única quando atualizações não são necessárias

Alguns aplicativos precisam obter os dados de localização apenas uma vez e não precisam receber atualizações de localização. Por exemplo, um aplicativo que adiciona uma marca de localização geográfica a uma fotografia ou email não precisa receber eventos de atualização de localização. Esse tipo de aplicativo deve solicitar a localização usando o método GetGeopositionAsync, conforme descrito em Detectando a localização de um usuário.

Assine os eventos de localização, quando apropriado

Use os eventos PositionChanged e StatusChanged para detectar o movimento que ultrapassou um limite específico ou as atualizações contínuas de localização assim que elas ocorrem.

Ajustar o limite de movimento

Alguns aplicativos precisam de atualizações de localização somente quando o usuário percorreu uma longa distância. Por exemplo, um aplicativo que fornece notícias locais ou atualizações do clima talvez não precise de atualizações de localização, a menos que a localização do usuário tenha sido alterada para uma cidade diferente. Nesse caso, você deve ajustar o movimento mínimo exigido para um evento de atualização de localização configurando a propriedade MovementThreshold. Isso tem o efeito de filtrar os eventos PositionChanged. Esses eventos surgem apenas quando a alteração na posição excede o limite de movimento. Quando você define a propriedade MovementThreshold, ela não altera a frequência com a qual a origem dos dados de localização (por exemplo, o Provedor de Localização do Windows ou um dispositivo GPS conectado) calcula a localização.

Definir o intervalo de relatórios

Use uma propriedade de intervalo de relatórios para se alinhar à experiência do aplicativo e minimizar o uso de recursos do sistema. Por exemplo, um aplicativo meteorológico talvez precise atualizar dados apenas a cada 15 minutos.

A maioria dos aplicativos, desde que não sejam aplicativos de navegação em tempo real, não exige um fluxo constante de alta precisão para as atualizações de localização. Se o seu aplicativo não exigir o fluxo de dados mais exato possível ou se precisar de atualizações com pouca frequência, defina a propriedade ReportInterval para indicar a frequência mínima de atualizações de local necessária. Assim, a origem da localização pode economizar energia, calculando o local somente quanto necessário.

Os aplicativos que não exigem os dados em tempo real devem definir ReportInterval como 0, para indicar que nenhum intervalo mínimo seja especificado. Em seguida, o aplicativo recebe eventos na frequência em que a fonte de localização mais precisa os envia.

Dispositivos que fornecem dados de localização podem monitorar o intervalo de relatórios solicitado por diferentes aplicativos e fornecer relatórios de dados no menor intervalo solicitado. Dessa forma, o aplicativo com a maior necessidade de precisão recebe os dados necessários. Portanto, é possível que o provedor de localização gere atualizações com uma frequência mais alta do que a solicitada pelo aplicativo, caso outro aplicativo solicite atualizações mais frequentes.

Observação  Não é garantido que a origem de localização honrará a solicitação de intervalo de relatórios fornecido. Nem todos os dispositivos do provedor de localização rastreiam o intervalo de relatórios, mas você ainda deve fornecê-lo para aqueles que rastreiam.

Definir a propriedade DesiredAccuracy

Para ajudar a economizar energia, defina a propriedade DesiredAccuracy para indicar a plataforma de localização, independentemente de o seu aplicativo precisar ou não de dados com a maior exatidão possível. Quando nenhum aplicativo exige dados de alta precisão, o sistema pode economizar energia não habilitando os provedores de GPS.

Defina DesiredAccuracy como HIGH para permitir que o GPS adquira os dados.

Os aplicativos que usam informações de localização exclusivamente para direcionamento de anúncios devem definir DesiredAccuracy como Default e usar somente um padrão de chamada de disparo único para minimizar o consumo de energia.

Usar a propriedade Geocoordinate.Accuracy

Aplicativos que possuem requisitos de precisão específicos, como aplicativos de navegação, devem utilizar a propriedade Geocoordinate.Accuracy para determinar se os dados de localização disponíveis atendem aos requisitos do aplicativo.

Considerar o atraso de inicialização

Na primeira vez que um aplicativo solicita dados de localização, pode haver um pequeno atraso de um a dois segundos enquanto o provedor de localização é iniciado. Você deve considerar isso no design da interface do usuário do seu aplicativo. Por exemplo, você pode querer evitar o bloqueio de outras tarefas que dependem da conclusão da chamada de GetGeopositionAsync.

Considerar o comportamento em tela de fundo

Se um aplicativo da Windows Store para Windows 8 não tiver foco, ele não receberá eventos de atualização de localização enquanto estiver suspenso em segundo plano. Se o aplicativo fizer rastreamento de atualizações de localização registrando-as, lembre-se disso. Quando o aplicativo entrar novamente em foco, ele receberá apenas eventos novos. Ele não obterá as atualizações realizadas enquanto estava inativo.

Modo de espera conectado

Quando o PC está conectado no modo de espera, objetos Geolocator sempre podem ser instanciados. No entanto, o objeto Geolocator não encontrará sensores a serem agregados e, portanto, as chamadas para GetGeopositionAsync atingirão seu tempo limite após 7 segundos, os ouvintes de evento PositionChanged nunca serão chamados e os ouvintes de eventos StatusChanged serão chamados uma vez com o status NoData.

Usar sensores raw e fusion com eficiência

O Windows 8 dá suporte a dois tipos de sensores: raw e fusion. Os sensores raw incluem o acelerômetro, o girômetro e o magnetômetro. Os sensores fusion incluem orientação, inclinômetro e bússola. Os sensores fusion obtêm os dados de combinações dos sensores raw. As APIs   do Tempo de Execução do Windows podem acessar cada um desses sensores, com exceção do magnetômetro. Os sensores fusion são mais precisos e estáveis do que os sensores raw, mas usam mais energia. Você deve usar os sensores certos para a finalidade certa. Para saber mais, veja Escolhendo os sensores certos que serão usados.

Diretrizes de experiência do usuário

Esta seção contém diretrizes que garantem que a localização funcione da maneia esperada pelos usuários, no seu aplicativo.

Comece a usar o objeto de localização somente quando o aplicativo exige os dados de localização

O primeiro acesso do aplicativo ao objeto de localização aciona a solicitação de consentimento. Isso ocorre na primeira vez que um aplicativo chama GetGeopositionAsync ou registra um manipulador de eventos para o evento PositionChanged. Se o objetivo principal de um aplicativo não exigir acesso a dados de localização, talvez seja confuso para o usuário receber, assim que o aplicativo é iniciado, uma solicitação de permissão para uso do dispositivo. Siga estas diretrizes para obter uma boa experiência do usuário.

DiretrizExemplo

Se a localização não for essencial para o seu aplicativo, acesse-a somente quando o usuário solicitá-la especificamente.

Um aplicativo de rede social tem um botão para "Fazer check-in com a minha localização". Esse aplicativo não deve acessar a localização até que o usuário clique no botão.

Se um aplicativo requer a localização para sua função principal, ele pode acessar o dispositivo quando o aplicativo iniciar.

Um aplicativo para colocar o usuário no mapa requer a localização para sua finalidade principal. Para mostrar uma localização do usuário imediatamente, é correto para o aplicativo usar a localização ao ser iniciado.

 

Utilize o thread principal da interface do usuário para o primeiro uso do objeto Geolocator.

O primeiro uso do objeto Geolocator para obter os dados de localização deve ser feito no thread de interface do usuário principal, para mostrar uma solicitação de consentimento para o usuário. O primeiro uso do Geolocator pode ser a primeira chamada ao GetGeopositionAsync ou o primeiro registro de um manipulador para o evento PositionChanged. A solicitação de consentimento é descrita em Diretrizes para usar dispositivos confidenciais. Isso significa que, em um aplicativo em JavaScript, o primeiro uso do objeto Geolocator não deve ocorrer em um manipulador de ativação.

Informar o usuário sobre como os dados de localização serão usados

Forneça ao usuário informações sobre como o seu aplicativo utiliza os dados de localização.

Fornecer a interface do usuário para atualizar manualmente a localização

O aplicativo deve fornecer um controle de interface do usuário para permitir que os usuários atualizem a localização atual.

Exiba o andamento enquanto aguarda para obter dados da localização

Enquanto aguarda o recebimento dos dados da localização, seu aplicativo deve exibir uma barra de andamento. Para obter mais informações sobre o uso do controle de progresso, consulte Guia de início rápido: adicionando controles de progresso.

Detectando alterações nas configurações de localização

O usuário pode desativar a funcionalidade de localização usando o botão Configurações ou o Painel de Controle. Veja Configurações de localização para saber como alterar as configurações de localização na interface do usuário. Consulte Diretrizes para usar dispositivos confidenciais para saber como lidar com alterações do usuário nas configurações.

  • Para saber quando o usuário desabilita ou reabilita os serviços de localização:
    • Manipule o evento StatusChanged. A propriedade Status do argumento para o evento StatusChanged tem o valor Disabled quando o usuário desabilita os serviços de localização.
    • Verifique os códigos de erro retornados de GetGeopositionAsync. Se o usuário tiver desabilitado os serviços de localização, as chamadas para GetGeopositionAsync falharão, apresentando um erro ACCESS_DENIED, e a propriedade LocationStatus terá o valor Disabled.
  • Se você tem um aplicativo cujos dados de localização são essenciais, —por exemplo, um aplicativo de mapa—, certifique-se de fazer o seguinte:

Observe que a API de localização retornará os dados quando estiver disponível. Ela pode retornar primeiro um local com um raio de erro maior e atualizar o local com mais informações precisas assim que estiver disponível. Os aplicativos que exibem o local do usuário normalmente desejariam atualizar o local quando informações precisas estiverem disponíveis.

Mostrar mensagens de erro ou caixas de diálogo apropriadas quando os serviços de localização forem desabilitados ou não estiverem disponíveis

Quando o acesso aos dados de localização é revogado pelo usuário, ou quando, por qualquer motivo, os dados não estão disponíveis para o aplicativo, apresente ao usuário as mensagens de erro apropriadas. Se for preciso notificar o usuário de que os serviços de localização foram desativados, siga as diretrizes de erro descritas em Diretrizes para usar dispositivos confidenciais, mas também faça o seguinte:

  • Nossa sugestão é que você use esta mensagem: "Seus serviços de localização estão desativados no momento. Use o botão Configurações para reativá-los."
  • Não permita que as mensagens de erro interrompam o fluxo do aplicativo. Se os dados de localização não forem essenciais ao aplicativo, exiba a mensagem como texto embutido. Aplicativos de redes sociais ou de jogos estão nessa categoria.
  • Se os dados de localização forem essenciais à funcionalidade do seu aplicativo, exiba a mensagem como um menu suspenso ou como uma caixa de diálogo. Aplicativos de mapeamento e navegação estão nessa categoria.
  • Não tente exibir o botão Configurações de modo programático.

Veja Diretrizes para usar dispositivos confidenciais na seção Erros em Criando o layout da sua interface do usuário para ver exemplos de mensagens de erro embutidas, em caixas de diálogo e em menus suspensos.

Limpar os dados de localização armazenados em cache e liberar o objeto Geolocator quando o usuário desabilita o acesso às informações de localização

Libere o objeto Geolocator se o usuário desativar o acesso às informações de localização por meio do botão Configurações ou usando as configurações do PC. O aplicativo receberá os resultados de ACCESS_DENIED em todas as chamadas de API de localização.

No caso de o aplicativo salvar ou armazenar dados de localização em cache, limpe todos os dados do cache quando o usuário revogar o acesso às informações de localização.

Ofereça um jeito alternativo de inserir manualmente as informações de localização quando os dados da localização não estiverem disponíveis via serviços de localização.

Fornecer a interface do usuário para reabilitar os serviços de localização

Seu aplicativo deve oferecer uma interface do usuário para reabilitar os serviços de localização—por exemplo, um botão Atualizar que crie uma nova instância do objeto Geolocator e tente obter a localização novamente.

  • Se o usuário reabilitar o acesso à localização após desabilitá-lo, não haverá nenhuma notificação para o aplicativo. A propriedade Status não será modificada e não haverá qualquer evento StatusChanged. O aplicativo deve criar um novo objeto Geolocator e chamar GetGeopositionAsync para tentar obter os dados de localização atualizados ou reinscrever-se nos eventos PositionChanged. Se o status indicar que a localização foi reabilitada, limpe qualquer interface do usuário por meio da qual o aplicativo tenha notificado o usuário anteriormente sobre a desabilitação dos serviços de localização, e responda adequadamente ao novo status.
  • O aplicativo também deve tentar mais uma vez obter os dados de localização na ativação, ou quando o usuário tentar explicitamente usar a funcionalidade que exige localização, ou em qualquer outro momento adequado ao cenário.

Diretrizes para a representação gráfica da localização

Faça seu aplicativo usar o parâmetro de precisão que você recebe pela API de localização para indicar claramente a localização atual do usuário. Existem três bandas principais de precisão—um raio de erro de aproximadamente 10 metros, outro de aproximadamente 100 metros e um terceiro superior a 1 quilômetro. Usando as informações de precisão você pode assegurar que seu aplicativo exiba a localização com precisão no contexto dos dados disponíveis.

  • Para uma precisão de aproximadamente 10 metros (resolução do GPS), a localização pode ser indicada por um ponto ou pino no mapa. Com essa precisão, as coordenadas de latitude e longitude e o endereço também podem ser mostrados.

    Exemplo de mapa exibido com precisão de GPS de aproximadamente 10 metros.

  • Para uma precisão entre 10 e 500 metros (aproximadamente 100 metros), a localização é, em geral, recebida com resolução Wi-Fi. Em tais casos, recomendamos que o aplicativo mostre um raio de erro. Para aplicativos que mostram orientações que não exigem um ponto central, esse ponto pode ser mostrado com um raio de erro em volta dele.

    Exemplo de mapa exibido com precisão de Wi-Fi de aproximadamente 100 metros.

  • Se a precisão retornada for superior a um quilômetro, você provavelmente está recebendo as informações de localização com resolução de nível IP. Em regra, esse nível de precisão é muito baixo para a identificação de um ponto específico no mapa. Seu aplicativo provavelmente não mostrará qualquer representação geográfica de um pino ou círculo e, em vez disso, ampliará a imagem até o nível de representação da cidade no mapa, ou para a área adequada baseada no raio de erro (por exemplo, nível de região).

    Exemplo de mapa exibido com precisão de Wi-Fi de aproximadamente um quilômetro.

Quando a precisão da localização mudar de uma banda para outra, faça uma transição suave entre as diferentes representações gráficas. Isso pode ser feito das seguintes maneiras:

  • Suavizando a animação da transição e mantendo a transição rápida e fluida
  • Aguardando alguns relatórios consecutivos para confirmar a mudança na precisão, para ajudar a evitar ampliações indesejadas e muito frequentes.

Diretrizes para a representação textual da localização

Alguns tipos de aplicativos—por exemplo, aplicativos de previsão de tempo ou de informações locais—precisam de formas de representar textualmente a localização em diferentes bandas de precisão. Verifique se a localização está sendo exibida claramente e somente no nível de precisão fornecidos nos dados.

  • Para uma precisão de aproximadamente 10 metros (resolução de GPS), os dados de localização recebidos são suficientemente precisos e podem ser comunicados ao nível do nome do bairro. Também é possível usar o nome da cidade, estado ou província e país/região.
  • Para uma precisão de aproximadamente 100 metros (resolução de Wi-Fi), os dados de localização recebidos são moderadamente precisos, por isso recomendamos a exibição de informações como o nome da cidade. Evite usar o nome do bairro.
  • Para uma precisão superior a um quilômetro (resolução de IP), exiba somente o nome do estado ou província ou do país/região.

Considerações de privacidade

A localização geográfica de um usuário são informações de identificação pessoal (PII). O site a seguir oferece orientação para proteção da privacidade do usuário.

Tópicos relacionados

Amostra de Local Geográfico
Windows.Devices.Geolocation
Diretrizes para usar dispositivos sensíveis
Roteiro para criação de aplicativos usando C#, C++ ou VB

 

 

Mostrar:
© 2016 Microsoft