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, чтобы получить свои собственные широты и долготы? Любая помощь будет оценена. Спасибо.


person Chris    schedule 18.06.2017    source источник


Ответы (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 другие видео, которые могут вам помочь.

person Niall Kiddle    schedule 04.01.2018