5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firebase/firestoreで位置情報を共有してみた話

Posted at

Firebaseのrealtime database/firestoreを試してみたくて、お互いの端末の位置情報を共有できないかとやってみました。まずやったのは、2台の端末が共有するドキュメントを作って地図にプロットするようにしてみました。ここでは「loc」としました。

位置情報はお互いが常に許可にし、バックグラウンドでも取得するようにし、

public func locationManager(_ manager: CLLocationManager,
                                didUpdateLocations locations: [CLLocation])

で値を取得し(多少ゴミは取り除き)、Firestoreにアップするようにしたところ、

let name = UIDevice.current.name
let data: [String: Any] = [
                    "name":name,
                    "createAt":FieldValue.serverTimestamp(),
                    "latitude":latitude,
                    "longitude":longitude]
                
defaultstore.collection("data").addDocument(data: messageData)
if let err = err {
  print("Error writing document: \(err)")
} else {
  print("Document successfully written!")
}
limit_usage.png

なんと1日持ちませんでした。
この時のLocationManagerの設定は

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = 5
locationManager.activityType = .fitness
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false

です。が、今回上限を超えたのは位置情報の書き込みではなく、読み込み側の方でした。

limit_write.png

ViewControllerのdidLoadで下記のようにそれまでにたまっていたデータも読み込んでいたためと思われます。

defaultstore.collection("data").addSnapshotListener { (snapShot, error) in
  guard let value = snapShot else {
    print("snapShot is nil")
      return
  }
            
  value.documentChanges.forEach{diff in
    if diff.type == .added {
      // 地図にプロット
  }
  }
}

よくよく考えると、過去の居場所は不要なので、FirestoreにはaddDocumentをやめて、setDataでアップデートするように変更。

defaultstore.collection("data").document(name).setData(data) { err in
  if let err = err {
    print("Error writing document: \(err)")
  } else {
    print("Document successfully written!")
  }
}

そして、読み込み側は、.addedに加えて、.modifiedも追加しました。

changed_usage.png

数字は減りましたが、相手の居場所が更新されたと同時に読み取り、地図の位置を更新するっていうのは、2端末でこの数字じゃダメですね。chat程度ならせっかくなのでFirestoneではなく、別のアーキテクチャを考えてみたいと思います。

5
4
1

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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?