Alle Artikel

Geolocalização no Chrome e Android: como funciona e como diagnosticar

Quando um site mostra a cidade errada ou nunca chega a pedir a localização, a causa pode estar no código, no navegador, no Android, nas definições do site ou na forma como as coordenadas são convertidas numa localidade.

A Geolocation API é uma ponte entre a página e os serviços de localização do dispositivo; não é uma base de dados de moradas nem uma autorização automática.

O que é a Geolocation API

A API expõe navigator. geolocation no navegador e permite pedir uma posição através de getCurrentPosition() ou acompanhar alterações com watchPosition(). O resultado contém latitude, longitude, precisão e um timestamp.

O site recebe coordenadas, não recebe necessariamente o nome da rua, bairro ou cidade. Essa tradução costuma ser feita depois por um serviço de reverse geocoding.

HTTPS e contexto seguro são obrigatórios

A geolocalização é uma funcionalidade protegida. Em produção, a página deve ser servida por HTTPS; localhost é a excepção habitual para desenvolvimento.

Se a página for aberta por HTTP, por um domínio diferente ou dentro de um contexto bloqueado, o navegador pode devolver PERMISSION_DENIED ou não disponibilizar a posição. O certificado tem de ser válido no dispositivo, não apenas no servidor.

A autorização pertence ao site e ao navegador

O utilizador autoriza uma origem concreta, como https://pontoti. pt. Uma permissão dada a pontoti. pt não autoriza automaticamente outro subdomínio.

No Chrome para Android, a permissão pode ser revista no ícone de informação junto ao endereço, em Permissões, ou em Definições → Definições do site → Localização. Também é necessário que o próprio Android permita localização ao Chrome.

Porque é que o Chrome não mostra o pedido

Se a permissão do site já foi recusada, o Chrome pode deixar de apresentar o diálogo normal.

O mesmo pode acontecer se a localização estiver desactivada no Android, se o Chrome não tiver autorização do sistema, se o pedido ocorrer num iframe sem Permissions-Policy adequada, se a página não estiver em HTTPS ou se a origem tiver sido aberta num modo que limita permissões.

Nesses casos, limpar a cache raramente chega: é preciso rever a permissão do site e do sistema.

O pedido deve ter contexto e recuperação

Uma boa experiência explica porque quer a localização e oferece um botão para tentar novamente. A página deve tratar pelo menos três erros: PERMISSION_DENIED, POSITION_UNAVAILABLE e TIMEOUT. Não deve apresentar uma cidade antiga como se fosse a posição actual.

Se já existir uma posição guardada, pode mostrá-la como último estado conhecido enquanto tenta actualizar silenciosamente quando a permissão continua concedida.

getCurrentPosition ou watchPosition

getCurrentPosition() é suficiente para uma leitura pontual, como actualizar o tempo quando a pessoa abre a página. watchPosition() acompanha movimento e pode fornecer uma leitura melhor mais tarde, mas consome mais bateria e exige uma justificação clara.

A opção maximumAge permite usar uma leitura recente em cache; timeout limita a espera; enableHighAccuracy pode tentar uma leitura mais precisa, com possível custo de tempo e energia.

Coordenadas não são uma localidade

Mesmo com coordenadas correctas, o nome apresentado pode parecer errado. Um reverse geocoder pode devolver município, freguesia, bairro, suburb ou uma localidade administrativa diferente da que a pessoa usa no dia-a-dia.

Em Portugal, uma posição junto a Prior Velho pode ser devolvida como Loures, Sacavém e Prior Velho ou outra unidade administrativa, dependendo do ponto exacto e do nível de detalhe pedido.

O serviço deve usar zoom detalhado e escolher conscientemente a etiqueta mais próxima, sem confundir município com cidade.

Permissions-Policy e páginas incorporadas

Se a geolocalização for usada num iframe ou numa arquitectura com conteúdos de terceiros, o servidor pode limitar a funcionalidade através do header Permissions-Policy.

Para uma página própria, uma política explícita como geolocation=(self) reduz ambiguidades e impede que origens não autorizadas usem a API. Uma política demasiado restritiva bloqueia a chamada mesmo que o utilizador queira permitir a localização.

Checklist de diagnóstico no Chrome Android

Confirme: 1) o endereço começa por https://; 2) a localização do Android está activa; 3) Chrome tem permissão de localização no sistema; 4) no ícone junto ao endereço, pontoti.

pt não está em Bloqueado; 5) a página não está em modo incógnito ou dentro de um iframe restrito; 6) o botão de actualizar está a executar getCurrentPosition(); 7) a consola ou telemetria distingue permissão recusada de timeout; 8) as coordenadas são convertidas com reverse geocoding detalhado; 9) a página não mantém uma cidade antiga depois de uma leitura nova.

A implementação PontoTi

No PontoTi, o contexto local guarda a última posição para evitar uma página vazia e tenta actualizá-la quando a permissão já está concedida. A API de localização usa reverse geocoding detalhado para evitar que um município distante substitua a localidade próxima.

Esta abordagem respeita a privacidade: sem permissão não há posição GPS actual; nesse caso, o site só pode mostrar a última localização conhecida ou uma referência baseada no fuso horário, claramente tratada como aproximação.

Konsultierte Quellen