ガイド

ブラウザの確認ダイアログなしで「現在地を検出」ボタンを追加する

ブラウザに組み込まれた位置情報のプロンプトは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の精度ではありません。ピンポイントの精度をほのめかすのではなく、「おおよその地域を検出」のように機能を正直に表示してください。そうすれば、結果が正確な通りではなく市の中心部だったときに訪問者が驚くことはありません。

2つ目の例:地域別の料金表示

同じボタンのパターンは、ランディングページで地域に合った料金や通貨の情報を表示する場合にも使えます。料金は訪問者の所在地にかかわらずすべてEURで提示されるため、このようなボタンは表示する通貨を変えるためではなく、配送見積もりや地域の問い合わせ先電話番号をあらかじめ入力するために使うことになります。ただし、基になるリクエストは同じで、1回のIP検索で市区町村と国をすぐに埋めるのに十分な情報が返ります。

この方法が適している場面

この方法は、店舗検索、地域別のコンテンツの初期設定、配送見積もりなど、市区町村や地域さえわかれば十分な場面に適しています。ターンバイターンのナビゲーションのように、ブラウザのプロンプトと実際のデバイスの位置が本当に必要な用途では、GPSによる位置情報の代わりにはなりません。

避けるべきよくある間違い

企業ネットワークやVPN接続を、他の検索と異なる扱いが必要な特別なエラーケースとして扱わないでください。エンドポイントはそれでも結果を返します。ただし、その結果はそのネットワークの登録住所がある場所を中心としたもので、訪問者が実際にいる場所とは別の市区町村、場合によっては別の国になることもあります。適切な対応は、IPベースの推定すべてに対するものと同じです。VPNのトラフィックを検出して特に異常として示そうとするのではなく、訪問者が上書きできるようにしてください。

うまくフォールバックする

一部のアドレス範囲では、foundがfalseで返ることがあります。その場合はエラーを表示するのではなく、訪問者に場所を手入力してもらう方法にフォールバックしてください。ボタンの目的はその手間を省くことであり、行き止まりを作ることではないからです。

この機能のコスト

1回のクリックは1リクエストです。訪問者がときどき使う程度のボタンであれば、すべてのキーに含まれる、またはキーなしで1つのアドレスから利用できる1日あたりの無料リクエスト2,500件のごく一部にとどまります。IPv4とIPv6の訪問者はどちらも同じ呼び出しで解決されるため、どちらかのバージョン専用のコードパスは必要ありません。

許可ダイアログを省くことは、精度と引き換えに利便性を得ることであり、多くの位置情報機能にとって正しい選択です。エンドポイントのレスポンス全体はIPv4検索のドキュメントで説明しています。