Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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万回 とのことです。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした