2017-02-12 3 views
2

Ich bin ein großer Fan von Firebase und das ist der Grund, warum ich mich entschieden habe, es in meiner aktuellen App zu verwenden, aber ich habe einen Punkt, an dem ich nicht mehr weiß, ob es meine Bedürfnisse unterstützen kann.Aufbau einer "Tinder" -App mit "Firebase" + "Geofire", ist es überhaupt möglich?

App-Funktionalität ist die gleiche wie "Tinder" -App, können Sie wischen wie/ungleich auf Personen basierend auf ihrem Geschlecht, Standort und Alter.

Ich habe festgestellt, dass es keinen Grund gibt, mehr als eine Abfrage auf einmal, so dass ich jede Person auf einem Pfad basierend auf seinem Geschlecht speichern, und der "Schlüssel" ist eine "Push-Taste" Firebase generiert. Ich benutze den "Push-Key", weil es indiziert ist, so dass der Benutzer nicht zweimal den gleichen Benutzer wischen wird. (Swiping wird von dem ersten Benutzer beginnen, die das System angeschlossen)

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 

Diese gut funktioniert, aber jetzt nach einem Weg, ich suche nur die Menschen in der Nähe von mir zu bekommen, für die ich hinzugefügt habe „GeoFire“, aber es muss an seinem eigenen "Schlüssel" arbeiten. Und ich kann Benutzer nicht durch Ortsschlüssel speichern, weil sie dann nicht indexiert werden (So wird Benutzer nur einmal für jeden Benutzer wischen).

Geo Standort möchte den db etwas wie folgt aussehen:

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

eine Momentaufnahme aller Nutzer und zu zwischen ihnen Iterieren ist keine Option, da sie vielleicht viele Nutzer sind.

Ist das mit Firebase möglich? Ich strukturiere die Daten nicht richtig? Und wenn ja, wie soll ich?

+2

Downvoter, könnte erklären, warum statt nur Downvoting? Vielen Dank. – MCMatan

+3

Meine Vermutung ist, dass der niederen Wähler dachte, die Frage sei vage; Was ist die eigentliche Frage? Geofire wurde entwickelt, um das zu tun, was Sie zu brauchen scheinen - das Problem ist die Firebase-Struktur, die Sie implementiert haben; Es gibt keinen Grund, alle Weibchen zusammen und alle Männchen zusammen zu gruppieren. Wo sind deine GeoFire-Daten? Wie ordnen Sie einen Standort einem Benutzer zu? All diese Dinge müssen Teil Ihrer Struktur sein und Ihre Abfragen filtern natürlich Benutzer heraus, die sich außerhalb des Bereichs dieses Benutzers befinden. – Jay

+0

@Jay danke für die Antwort, ich habe meine Frage bearbeitet, um genauer zu sein, was ist die Frage, und es geht um Struktur .. – MCMatan

Antwort

2

Wie wäre es mit einem typischen Designmuster in 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 

Mit dieser Struktur sind Sie für alle Männer, Frauen und/oder alle Menschen innerhalb eines Radius des Benutzers (pro Frage) abfragen.

Mit ein wenig Code können Sie alle Frauen im Umkreis des Benutzers abfragen, Personen nach Alter oder Personen mit Namen Gracie.

+0

Hallo, vielen Dank für Ihre Antwort, und ich habe das gefunden: https://groups.google.com/forum/#!msg/firebase-talk/AKj-bNa3igo/mA-VUIFHAAAJ das heißt grundsätzlich von Firebase, dass es keine Möglichkeit gibt, die Datenbank abzufragen, ohne alle Benutzer in den aktuellen Bereich zu werfen und Client-Filter sie .. mein Problem ist, sie vielleicht 5000 Benutzer es ein Gebiet von ein paar Kilometern, und ich bin zu viel Prozess für einen Kunden, um jede einzelne von ihnen zu loopen .. – MCMatan

+1

@MCMatan Es gibt eine Reihe von Möglichkeiten zu Tun Sie, was Sie wollen. Sie könnten zum Beispiel einen GeoFire-Knoten für Männer und einen für Frauen haben. Sie können Ihre Geofire-Knotennamen (Schlüssel) strukturieren, indem Sie das Geschlecht, die UID und das Alter wie männlich kombinieren: uid_0: 35. Siehe [Filterung von Geofire] (http://stackoverflow.com/questions/34347571/filtering-results-with-geofire-firebase?lq=1) und die Antwort von ZenPylon. Und auch [This] (https://github.com/firebase/geofire-js/issues/40) und die Antwort von jwngr. Schließlich ist das Durchlaufen von 5000 sehr schnell, so dass es kein Überfall sein sollte. – Jay

+0

@MCMatan Beachten Sie, dass das, was Jacob sagt, genau ist - es gibt mehrere Möglichkeiten, Firebase nach mehreren Parametern abzufragen. – Jay

Verwandte Themen