【问题标题】:Building a "Tinder" app with "Firebase" + "Geofire", is it even possible? [closed]用“Firebase”+“Geofire”构建一个“Tinder”应用,有可能吗? [关闭]
【发布时间】:2017-06-30 14:40:17
【问题描述】:

我是 Firebase 的忠实粉丝,这也是我决定在我当前的应用中使用它的原因,但我已经到了不知道它是否能满足我的需求的地步。

应用功能与“Tinder”应用相同,您可以根据性别、位置和年龄在人身上滑动喜欢/不喜欢。

我注意到没有理由一次有多个查询,所以我根据每个人的性别将每个人保存在一条路径上,并且“key”是 firebase 生成的“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 实现的吗?我没有以正确的方式构建数据吗?如果是这样,我应该怎么做?

【问题讨论】:

  • 投反对票的人,可以解释为什么不投反对票吗?谢谢。
  • 我的猜测是投反对票的人认为这个问题很模糊;实际的问题是什么? Geofire 旨在满足您的需求——问题在于您实施的 Firebase 结构;没有理由将所有女性和所有男性分组在一起,你的 GeoFire 数据在哪里?您如何将位置与用户相关联?所有这些东西都需要成为您结构的一部分,您的查询自然会过滤掉该用户范围之外的用户。
  • @Jay 感谢您的回复,我已经编辑了我的问题,以便更准确地说明问题是什么,它与结构有关..

标签: javascript reactjs firebase react-native geofire


【解决方案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

使用此结构,您可以查询用户半径范围内的所有男性、女性和/或所有人(根据问题)。

使用一小段代码,您可以查询用户范围内的所有女性、按年龄划分的人或任何名叫 Gracie 的人。

【讨论】:

  • 嗨,感谢您的回复,我发现:groups.google.com/forum/#!msg/firebase-talk/AKj-bNa3igo/… 基本上是由 firebase 说的,如果不抛出当前区域中的所有用户,就无法查询数据库和客户端过滤它们..我的问题是,他们可能在几公里的区域内有 5000 个用户,而对于客户端来说,我的流程太多了,无法循环其中的每一个..
  • @MCMatan 有很多方法可以做你想做的事。例如,您可以为男性设置一个 geoFire 节点,为女性设置一个。您可以通过结合性别、uid 和年龄来构建您的 geofire 节点名称(键),例如 male:uid_0:35。请参阅 Filtering Geofire 和 ZenPylon 的答案。还有This 和 jwngr 的回答。最后,迭代 5000 的速度非常快,所以这不应该是一个阻塞。
  • @MCMatan 请注意,虽然 Jacob 所说的是准确的 - 有多种方法可以查询 Firebase 的多个参数。
  • 非常感谢您的参考,这是一种提高效率的好方法,我正在努力让应用程序为超过 5,000 名用户做好准备,可能在一个区域内有 10,000 名用户,甚至更多.但是,答案不包括不再扔同一个人的选择。为此,我可能会考虑为每个用户添加一个“传递的用户 ID”数组并将其过滤掉......无论如何,谢谢!
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多