Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Встроенный в браузер запрос геопозиции требует точности уровня GPS и явного разрешения, а многие посетители отклоняют его по привычке. Кнопке «Определить моё местоположение» вообще не нужно проходить через этот диалог, если для вашей задачи достаточно приблизительного местоположения.
При нажатии кнопки отправьте запрос на собственный сервер, который и так видит IP-адрес посетителя в соединении. Проверьте этот адрес через /v1/ip и используйте результат напрямую, без какого-либо диалога разрешений в браузере.
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"
}Вызов эндпоинта без параметра ip, как показано здесь, определяет адрес, с которого пришёл запрос. Когда ваш бэкенд вызывает его от имени посетителя, это и есть собственный адрес посетителя.
Местоположение по IP в лучшем случае определяется с точностью до города, а не с точностью GPS. Называйте функцию честно, например «Определить мой примерный район», а не намекайте на точное попадание, чтобы посетитель не удивился, когда результатом окажется центр города, а не его улица.
Тот же шаблон с кнопкой подходит для показа цен или валютного контекста с учётом региона на лендинге. Поскольку все цены указываются в EUR независимо от местоположения посетителя, такую кнопку стоит использовать для предзаполнения оценки стоимости доставки или регионального контактного номера, а не для смены отображаемой валюты. Но сам запрос тот же: одно определение IP возвращает достаточно данных, чтобы сразу заполнить город и страну.
Этот подход подходит для поиска магазинов, региональных настроек контента по умолчанию и оценки стоимости доставки, где нужен только город или регион. Он не заменяет GPS-геопозицию для таких задач, как пошаговая навигация, где запрос браузера и реальное местоположение устройства действительно необходимы.
Не считайте подключение через корпоративную сеть или VPN особым случаем ошибки, который нужно обрабатывать иначе, чем любой другой запрос. Эндпоинт всё равно вернёт результат, просто с центром там, где зарегистрирован адрес этой сети, а это может быть другой город или даже другая страна, чем та, где посетитель на самом деле находится. Правильная реакция та же, что и для любой оценки по IP: дайте посетителю возможность исправить результат, а не пытайтесь обнаружить VPN-трафик и специально помечать его как необычный.
Если found возвращается как false, что возможно для некоторых диапазонов адресов, предложите посетителю ввести местоположение вручную, а не показывайте ошибку: весь смысл кнопки в том, чтобы избавить от этого шага, а не завести в тупик.
Каждое нажатие равно одному запросу. Кнопка, которой посетители пользуются время от времени, расходует ничтожную долю из 2 500 бесплатных запросов в день, которые входят в каждый ключ или доступны с одного адреса без ключа. Посетители с IPv4 и IPv6 обрабатываются одним и тем же вызовом, поэтому отдельная ветка кода ни для одной из версий не нужна.
Отказ от диалога разрешений меняет точность на удобство, и для многих функций, связанных с местоположением, это правильный обмен. Полный ответ эндпоинта описан в документации по определению IPv4.