Firebase 位置情報を保存する

マッチングアプリを作る際に、位置情報からその範囲内にいるユーザーを取得したいと思う事があります。 今回はその準備として位置情報をFirebaseに保存しておくまでの手順をご紹介します。

大抵の場合、位置情報を扱う為の型として Geometry を用いるのですが、


今は位置情報を扱う為の型がないのは確か。ごめんね。 でも少なくとも俺たちが忙しいっていうのも理解して欲しい。


しかし、wilhuffさんによると、やる事のリストには確実に入っているので時間が解決するでしょうとの事です。 嬉しい事に、しっかりと位置情報を利用したクエリーを将来的に用意するようです。

コメント


GeoFirestoreライブラリで解決

代わりにFirebaseで位置情報を扱える様に GeoFirestore というライブラリを公開してあるので それを使えばよしなに解決できそうです。

Geofirestore

Realtime location queries with Firebase Cloud Firestore.



セットアップ

cocoapodsでインストールしていきます。

pod ‘Geofirestore'

インストールをしたら、Firestoreに新しく位置情報を保存しておく為のコレクションを作成しておきます。

新しいコレクションを作成


追加

位置情報を保存してくれる関数を作成。

import Geofirestore
import CoreLocation

private func storeGeoPoint(location: CLLocation, id: String, isSuccess: @escaping (Bool) -> Void) {
    let geoFirestoreRef = Firestore.firestore().collection("user_locations")
    let geoFirestore = GeoFirestore(collectionRef: geoFirestoreRef)

    geoFirestore.setLocation(location: location, forDocumentWithID: id) { (err) in
        if let err = err {
            print("Error store location: \(err)")
            isSuccess(false)
        } else {
            isSuccess(true)
        }
    }
}

FireStoreを見るとうまく入っています。

保存されているIDが同じ


削除

削除する時はこの様に書くとできます。

geoFirestore.removeLocation(forDocumentWithID: "ドキュメントID")


終わりに

次回別記事として、ある位置情報から特定範囲内のユーザーのみを取り出す事をしたいと思います。 思った以上にマッチングアプリを しかも無料で 作れる事にびっくりです。 サーバーレスは遊びには最高ですね。

1 コメント

  1. 勉強されてもらっています.
    素人質問で申し訳ないのですが、「位置情報を保存してくれる関数」をどこに書くとアプリを起動した際に自動で保存されるのでしょうか?

    返信削除