LoginSignup
64
65

More than 5 years have passed since last update.

GPSを使わずにユーザーの位置情報を取得する方法

Last updated at Posted at 2017-08-04

Why?

モバイルアプリやゲームを作っていると、カジュアルにユーザーのおおまかな位置情報が欲しいと思うことは無いでしょうか?
しかし、AndroidやiOSでいちいちGPS使用権限の許可を得るのも大げさ。
そんなときにCloud Functions for Firebaseを使えば、カンタンに、しかも破格の料金1でユーザーの大まかな位置情報を取得することができます。

1-P96fpzo_Tr0PgJwZjEjHxw.png

How?

Cloud Functionsでは、リクエストヘッダ x-appengine-citylatlong 内にアクセスユーザーのおおまかな位置情報を表す緯度経度情報が入っています。ですので、このヘッダ情報を出力するfunctionを定義するだけで、いとも簡単に目的を達成できます。
なお精度に関して手元で検証したところ、現在位置の市区町村の役所の位置が出力されるようです。
例えば港区内でアクセスすると、35.658068,139.751599が返ってきます。

map.png
IPアドレスから位置情報が算出されるため、大きく異なるケースがあるのはご了承ください。

準備

Firebaseにログインしプロジェクトを作成した後、ターミナルで以下を実行します。

# firebase-toolsをインストール
$ npm install -g firebase-tools

$ cd myproject

# Firebaseにログイン
$ firebase login

# Cloud Functions の初期化
$ firebase init functions

これでCloud Functionsを書き始める準備ができました。

コードを書く

myproject/functions/index.js をエディタで開き、以下のコードを追加します。

exports.getLocation = functions.https.onRequest((req, res) => {
    var latlng = req.get("x-appengine-citylatlong");
    res.send(latlng);
});

デプロイ

$ firebase deploy --only functions

上記のコマンドでfunctionがデプロイされ、functionを実行するためのURLが表示されます。以下が結果のサンプルです。もしFunction URLが表示されない場合には、少し待ってからもう一度上記コマンドを実行してみましょう。

=== Deploying to 'sandbox-c9720'...
...
✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/sandbox-c9720/overview
Function URL (getLocation): https://us-central1-sandbox-c9720.cloudfunctions.net/getLocation

こちらが実際にデプロイしたスクリプトです。
https://us-central1-sandbox-c9720.cloudfunctions.net/getLocation
アクセスすると位置情報が出力されるので、GoogleMapsなどで表示して確認してみましょう。

これで、このURLをアプリから叩いて利用することができるようになりました。

まとめ

いかがでしたか?
もともと x-appengine-citylatlong はGoogle App Engineで扱える情報でしたが、Cloud Functionsを使うことで、さらに手軽に実装することができました。
こういう小さな機能を実装するときは、Cloud Functionsがとても便利ですね。


  1. 無料プランの場合は12.5万回/月まで。従量制プランの場合200万回/月の呼び出しまで無料。以降は $0.40/100万回 とのことです。 

64
65
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
65