2017-02-12 9 views
2

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

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

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

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», но он должен работать над своим «ключом». И я не могу сохранить пользователей по ключам местоположения, потому что тогда они не будут проиндексированы (поэтому пользователь будет прокручивать только один раз для каждого пользователя).

Гео расположение хотели бы, чтобы дб выглядеть примерно так:

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

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

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

+2

Downvoter, мог бы объяснить, почему вместо простого downvoting? Благодарю. – MCMatan

+3

Мое предположение заключается в том, что опрошенный избиратель считал, что вопрос неясен; каков реальный вопрос? Geofire был разработан, чтобы делать то, что вам кажется нужным, - проблема в структуре Firebase, которую вы реализовали; нет никакой причины группировать всех женщин вместе и всех мужчин вместе, где ваши данные GeoFire? Как вы связываете местоположение с пользователем? Все эти вещи должны быть частью вашей структуры, и ваши запросы, естественно, отфильтровывают пользователей, которые находятся за пределами этого пользователя. – Jay

+0

@ Я благодарю вас за ответ, я отредактировал свой вопрос, чтобы уточнить, о чем идет речь, и речь идет о структуре .. – MCMatan

ответ

2

Как насчет типичного шаблона дизайна в 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 

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

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

+0

Привет, спасибо за ваш ответ. И я нашел это: https://groups.google.com/forum/#!msg/firebase-talk/AKj-bNa3igo/mA-VUIFHAAAJ, который в основном говорит firebase, что нет способа запросить базу данных, не перебрасывая всех пользователей в текущую область и клиент, фильтрующий их .. моя проблема в том, что они, возможно, 5000 пользователей, это область в несколько километров, и я слишком много для клиента, чтобы зацикливать каждый из них. – MCMatan

+1

@MCMatan Существует несколько способов делай что хочешь. Например, у вас может быть узел geoFire для мужчин и один для женщин. Вы можете структурировать имена узлов (ключей) геофирмов, объединив пол, uid и возраст, например male: uid_0: 35. См. [Фильтрация Geofire] (http://stackoverflow.com/questions/34347571/filtering-results-with-geofire-firebase?lq=1) и ответ от ZenPylon. А также [This] (https://github.com/firebase/geofire-js/issues/40) и ответ от jwngr. Наконец, повторение через 5000 очень быстро, так что это не должно быть удержанием. – Jay

+0

@MCMatan Обратите внимание, что хотя то, что заявляет Джейкоб, является точным - существует несколько способов запроса Firebase для нескольких параметров. – Jay