Для того, чтобы достичь того, что вы ищете, вы вообще хотите иметь точное местоположение т.е. (широта, долгота), из кафе, хранящейся в базе данных. Таким образом, ваша структура размещения будет выглядеть как таковая
"venues" : {
"CrokePark" : {
"latitude": 37.335556, // this is a double
"longitude": -122.009167 // this is a double
"beverages" : {
"drink1" : "Coca-Cola",
"drink2" : "Fanta",
"drink3" : "Dr. Pepper"
}
С этим местоположением вы должны беспокоиться о поиске на этом этапе. Вообще говоря, вы хотите уведомить пользователя, когда он определен радиусом;
r, с места проведения. Два метода приходит в виде
Lousy батарея Слива Метод
Всегда получить обновление своего текущего местоположения, запрос к базе данных, чтобы увидеть, если их текущее местоположение находится в пределах г. Если да, сообщите об этом, прекратите получать их местоположение и запросить Firebase.
Этот метод является самым простым в реализации, но вы искренне должны иметь серьезную проблему с вашими пользователями, если вы выберете его.
Слегка Улучшенная
- Сделать ОДНОГО запрос для текущего местоположения пользователя. Давайте назовем это
let currentLocation = CLLocation2D()
- Сделать ОДНОГО запрос Firebase проверки всех мест, возможно, в пределах г; вы можете даже сказать FrB, чтобы отсортировать их для вас, а затем кешировать результаты. Из-за ограничений памяти вы можете ограничить количество результатов, чтобы сказать 10. Цель состоит в том, чтобы не хранить все данные Firebase в памяти сразу, особенно если она будет массивной. Назовем это
let possibleDestinations = []
- Запустите таймер. Это зависит от того, находится ли ваш пользователь пешком или нет. Если пешком, то 5-10 минутный таймер довольно разумный. Если нет, тогда вам может понадобиться 1-3-минутный таймер.
- Когда
timer == expired
откат к шагу 1
- Является
currentLocation equal or close to any address in possibleDestinations
- Если да; то наш пользователь определенно движется к одному из адресов, которые у нас уже есть, затем
timer.invalidate()
и представить информацию об этом событии от possibleDestinations
- Если нет; вероятно, пользователь перешел свой курс, а затем повторить с шага 2
Очевидно, что второй метод является более сложным, чем первый, но его более удобным для пользователя; с точки зрения потребления батареи и эффективности.
Side Примечание:
Я сделал latitude
и longitude
узлы магазин Double
соответственно так, как вы можете просто передать их в CLLocationDegrees
конструктор. Подробнее info
Поскольку вы, по-видимому, относительно новы к API-интерфейсу Core Location, я бы рекомендовал сначала создать побочный проект и научиться выполнять геозащищенность, прежде чем интегрировать его в ваше приложение. Current Location Tutorial. Geofencing Tutorial.
Показать вашу базу данных в формате JSON структурировать – Dravidian
@Dravidian { "места": { "Кроук Парк": { "напитки": { " drink1": "Coca-Cola", " drink2": "Фанта", "drink3": "доктор Пеппер" }, "заказы": { "Фанта": { "addedByUser": "[email protected]", "завершено": ложь, «имя»: «Аарон» }, «Coca-Cola»: { "addedByUser": "[email protected]", "завершены": ложь, "имя": "Джейк" }} }} } –
Обновления ваш вопрос с вашей структурой – Dravidian