GeoFire с Swift
Я планирую использовать GeoFire для фильтрации моих данных о базе данных на основе местоположения. Не уверен, как начать с этим, потому что я только начал развиваться. У меня есть картинка, подпись и т. Д., Которые я создаю в одном классе:
@IBAction func shareDidTap(_ sender: Any) {
if let image = image, let caption = textView.text {
let newMedia = Media(type: "image", caption: caption, createdBy: user, image: image)
newMedia.save(completion: { (error) in
if let error = error {
self.alert(title: "Oops!", message: error.localizedDescription, buttonTitle: "OK")
} else {
self.user.share(newMedia: newMedia)
в отдельном классе "Пользователь" (MVC) я сохраняю его в Firebase с
func share(newMedia: Media) {
DatabaseReference.users(uid: uid).reference().child("media").childByAutoId().setValue(newMedia.uid)
}
Где я могу создать ссылку на GeoFire? Должен ли я использовать Core Location, чтобы получить свой Lat и Lon? Любая помощь будет оценена. Спасибо.
1 ответ
Добавление GeoFire
Установить с помощью стручковpod 'GeoFire', :git => 'https://github.com/firebase/geofire-objc.git'
Затем импортируйте в проект import GeoFire
Создайте ссылку на него, используя
let rootRef = Database.database().reference()
let geoRef = GeoFire(firebaseRef: rootRef.child("user_locations"))
Чтобы получить текущее местоположение пользователя, вы можете использовать Менеджер местоположений через какао: https://github.com/varshylmobile/LocationManager
Я предполагаю, что вы хотите, чтобы носитель, сохраненный в базе данных, имел местоположение. Затем вы используете GeoFire для сохранения местоположения, используя GeoFire.setlocation
Вызывайте это, когда вы сохраняете свое сообщение в базе данных, GeoFire обрабатывает структуру базы данных, добавляя местоположения, используя ваш идентификатор сообщения.
пример:
geoFire!.setLocation(myLocation, forKey: userID) { (error) in
if (error != nil) {
debugPrint("An error occured: \(error)")
} else {
print("Saved location successfully!")
}
}
Затем вы запрашиваете базу данных местоположений, используя CircleQuery
Вы можете указать радиус, в котором вы хотите запрашивать базу данных в пределах определенного местоположения (пользовательского местоположения).
пример:
let query = geoRef.query(at: userLocation, withRadius: 1000)
query?.observe(.keyEntered, with: { key, location in
guard let key = key else { return }
print("Key: " + key + "entered the search radius.")
})
Я использовал действительно хороший учебник: https://www.youtube.com/watch?v=wr19iKENC-k&t=600s
Посмотрите на их канал и запрос GeoFire
для других видео, которые могут помочь вам в дальнейшем.