Guias

Adicione um botão "detectar minha localização" sem o aviso do navegador

O pedido de localização nativo do navegador exige precisão de nível GPS e um clique explícito de permissão, que muitos visitantes recusam por reflexo. Um botão “detectar minha localização” não precisa passar por essa caixa de diálogo se uma localização aproximada for suficiente para o que você está construindo.

Detecção pelo lado do servidor

Quando o botão for clicado, envie uma requisição ao seu próprio servidor, que já vê o endereço IP do visitante na conexão. Consulte esse endereço em /v1/ip e use o resultado diretamente, sem nenhuma caixa de diálogo de permissão do navegador em momento algum.

GET /v1/ip
{
  "status": "ok",
  "ip": "198.51.100.23",
  "version": 4,
  "found": true,
  "country": "Italy",
  "country_code": "IT",
  "region": "Lombardy",
  "city": "Milan",
  "postcode": "20121",
  "lat": 45.4642,
  "lon": 9.1900,
  "timezone": "Europe/Rome",
  "asn": 3456,
  "org": "Example ISP"
}

Chamar o endpoint sem o parâmetro ip, como mostrado aqui, consulta o endereço que fez a requisição, que é exatamente o endereço do próprio visitante quando o seu backend faz a chamada em nome dele.

Definindo as expectativas corretamente

A localização baseada em IP tem, no máximo, precisão de cidade, não de GPS. Nomeie o recurso com honestidade, algo como “detectar minha região aproximada” em vez de sugerir precisão absoluta, para que o visitante não se surpreenda quando o resultado for o centro de uma cidade e não a rua exata dele.

Um segundo exemplo: exibição de preços regionais

O mesmo padrão de botão funciona para mostrar preços ou contexto de moeda adequados à região em uma landing page. Como todo preço é cotado em EUR independentemente da localização do visitante, um botão como este serviria para preencher previamente uma estimativa de frete ou um número de contato regional, e não para mudar a moeda exibida, mas a requisição por trás é idêntica: uma consulta de IP que retorna o suficiente para preencher cidade e país imediatamente.

Onde isso se encaixa bem

Essa abordagem se encaixa em localizadores de lojas, conteúdo regional padrão e estimativas de frete, em que uma cidade ou região é tudo o que se precisa. Ela não substitui a localização por GPS em algo como navegação curva a curva, em que o pedido do navegador e a localização real do dispositivo são realmente necessários.

Um erro comum a evitar

Não trate uma rede corporativa ou uma conexão VPN como um caso de erro especial que precisa ser tratado de forma diferente de qualquer outra consulta. O endpoint ainda retorna um resultado, só que centrado no endereço registrado dessa rede, que pode ficar em outra cidade ou até em outro país em relação ao lugar onde o visitante realmente está. A resposta certa é a mesma que você daria para qualquer estimativa baseada em IP: deixe o visitante corrigi-la, em vez de tentar detectar e sinalizar especificamente o tráfego de VPN como incomum.

Recorrendo a uma alternativa com elegância

Se found vier como false, o que pode acontecer para algumas faixas de endereços, peça ao visitante que digite uma localização manualmente em vez de mostrar um erro, já que o objetivo do botão era justamente poupar esse passo, não criar um beco sem saída.

Custo do recurso

Cada clique é uma requisição. Um botão usado ocasionalmente pelos visitantes fica em uma fração mínima das 2.500 requisições gratuitas por dia incluídas em cada chave ou disponíveis a partir de um único endereço sem chave. Visitantes IPv4 e IPv6 são resolvidos pela mesma chamada, então não é preciso um caminho de código separado para nenhuma das versões.

Dispensar a caixa de diálogo de permissão troca precisão por conveniência, que é a troca certa para muitos recursos de localização. A documentação da consulta IPv4 descreve a resposta completa do endpoint.