Возможно ли создать приложение Tinder с помощью Firebase + Geofire?

Я большой поклонник Firebase, и именно поэтому я решил использовать его в своем текущем приложении, но я дошел до того, что уже не знаю, сможет ли он удовлетворить мои потребности.

Функциональность приложения такая же, как и у приложения «Tinder», вы можете ставить лайки/не лайки людям в зависимости от их пола, местоположения и возраста.

Я заметил, что нет причин иметь более одного запроса за раз, поэтому я сохраняю каждого человека по пути в зависимости от его пола, а «ключ» — это «кнопка нажатия», которую генерирует firebase. Я использую "кнопку нажатия", т.к. она проиндексирована, поэтому пользователь не будет дважды свайпать одного и того же пользователя. (Пролистывание начнется с первого пользователя, присоединившегося к системе)

let lookForGender = "female"
//swipingIndex is the last user index I've swiped.
let baseRef = firebaseApp.database().ref("lookForGender")
                         .startAt(null, currentUser.swipingIndex);

baseRef.once('value', function (snapshot) {
      UsersFeedService.updateState(snapshot);
})

//DB looks like:

"female"
       someIndexKey
            userObject
       someIndexKey
            userObject
"male"
       someIndexKey
            userObject
       someIndexKey
            userObject

Это хорошо работает, но сейчас я ищу способ получить только людей рядом со мной, для этого я добавил «GeoFire», но он должен работать на своем «ключе». И я не могу сохранять пользователей по ключам местоположения, потому что тогда они не будут проиндексированы (поэтому пользователь будет проводить только один раз по каждому пользователю).

Geo location хотел бы, чтобы БД выглядела примерно так:

“location”
     userObject
“location”
     userObject
“location”
     userObject
“location”
     userObject

Получение снимка всех пользователей и повторение между ними не вариант, поскольку их может быть много.

Это то, чего можно достичь с помощью firebase? Я не правильно структурирую данные? И если да, то как мне быть?


person MCMatan    schedule 12.02.2017    source источник
comment
Downvoter, мог бы объяснить, почему вместо того, чтобы просто понизить голосование? Спасибо.   -  person MCMatan    schedule 12.02.2017
comment
Я предполагаю, что тот, кто проголосовал против, посчитал вопрос расплывчатым; в чем собственно вопрос? Geofire был разработан, чтобы делать то, что вам нужно — проблема в структуре Firebase, которую вы реализовали; нет причин группировать всех самок и всех самцов вместе, где ваши данные GeoFire? Как вы связываете местоположение с пользователем? Все эти вещи должны быть частью вашей структуры, и ваши запросы будут естественным образом отфильтровывать пользователей, которые находятся за пределами области этого пользователя.   -  person Jay    schedule 12.02.2017
comment
@ Джей, спасибо за ответ, я отредактировал свой вопрос, чтобы уточнить, в чем заключается вопрос, и он касается структуры ..   -  person MCMatan    schedule 12.02.2017


Ответы (1)


Как насчет типичного шаблона проектирования в firebase?

users
  uid_0
   gender: "male"
   name: "George"
   age: "35"
  uid_1
   gender: "female"
   name: "Gracie"
   age: "32"

_geofire
  uid_0:
    g: "asdaseeefef"
    l: 
      0: 52.2101515118818
      1: -0.3215188181881
  uid_1:
    g: "oposooksok"
    l: 
      0: 50.1234567898788
      1: -0.8789999595988

С помощью этой структуры вы можете запросить всех мужчин, женщин и/или всех людей в радиусе действия пользователя (по вопросу).

С помощью небольшого кода вы можете запросить всех женщин в радиусе действия пользователя, людей по возрасту или кого-либо по имени Грейси.

person Jay    schedule 12.02.2017
comment
Привет, спасибо за ваш ответ. И я нашел это: groups.google.com/forum/#!msg/firebase-talk/AKj-bNa3igo/, по сути, firebase говорит, что невозможно запросить базу данных, не собирая всех пользователей текущая область и клиент, фильтрующий их ... моя проблема в том, что у них может быть 5000 пользователей на площади в несколько километров, и я слишком много работаю для клиента, чтобы зациклить каждого из них ... - person MCMatan; 12.02.2017
comment
@MCMatan Есть несколько способов сделать то, что вы хотите. Например, у вас может быть узел geoFire для мужчин и один для женщин. Вы можете структурировать имена (ключи) узлов Geofire, комбинируя пол, uid и возраст, например male:uid_0:35. См. Фильтрация Geofire и ответ от ZenPylon. А также Это и ответ от jwngr. Наконец, повторение 5000 происходит очень быстро, так что это не должно быть задержкой. - person Jay; 12.02.2017
comment
@MCMatan Обратите внимание: хотя то, что заявляет Джейкоб, является точным, существует несколько способов запросить в Firebase несколько параметров. - person Jay; 12.02.2017
comment
большое спасибо за ссылку, это отличный способ сделать его более эффективным, и я пытаюсь сделать приложение готовым для более чем 5000 пользователей, может быть, 10 000 в регионе и более. Но ответ не распространяется на возможность не бросать тех же людей снова. для этого я, возможно, подумаю о добавлении для каждого пользователя массива переданных идентификаторов пользователей и отфильтрую его тоже ... в любом случае, спасибо! - person MCMatan; 12.02.2017