Why?
モバイルアプリやゲームを作っていると、カジュアルにユーザーのおおまかな位置情報が欲しいと思うことは無いでしょうか?
しかし、AndroidやiOSでいちいちGPS使用権限の許可を得るのも大げさ。
そんなときにCloud Functions for Firebaseを使えば、カンタンに、しかも破格の料金1でユーザーの大まかな位置情報を取得することができます。
How?
Cloud Functionsでは、リクエストヘッダ x-appengine-citylatlong
内にアクセスユーザーのおおまかな位置情報を表す緯度経度情報が入っています。ですので、このヘッダ情報を出力するfunctionを定義するだけで、いとも簡単に目的を達成できます。
なお精度に関して手元で検証したところ、現在位置の市区町村の役所の位置が出力されるようです。
例えば港区内でアクセスすると、35.658068,139.751599が返ってきます。
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がとても便利ですね。
-
無料プランの場合は12.5万回/月まで。従量制プランの場合200万回/月の呼び出しまで無料。以降は $0.40/100万回 とのことです。 ↩