Firebase:如何识别已注册的联系人?

时间:2016-06-04 14:30:54

标签: ios swift firebase

我正在编写一个应用程序,注册用户应该能够看到他的哪些联系人已注册。最优雅的方法是什么?

enter image description here

我计划创建一个包含从用户本地iOS地址簿中提取的所有本地保存的电子邮件地址的数组,并为这些地址创建查询。有没有更好的方法呢?

修改:如果不下载整个user列表,这实际上是否可行?我可以使用queryStartingAtValue(emailAddress)queryEndingAtValue(emailAddress)的for循环。但这可能会同时导致数百个查询。

2 个答案:

答案 0 :(得分:4)

在NoSQL数据库中,您经常会以应用程序想要使用它的方式对数据进行建模。

在这种情况下,您的应用似乎需要根据用户的电子邮件地址查询用户是否存在。为此,我添加了一个电子邮件到uid数据的列表:

emailToUid
  "test@mail,com": "P0...wklsh1"
  "MJQZ1347": "Aj1278a..."

这实际上是一个自创的索引,允许您检查是否使用了电子邮件地址而无需运行查询。

现在,您可以遍历联系人,并查看该电子邮件地址是否有用户:

ref.child("emailToUid").child(email).observeSingleEventOfType(.Value

这将非常快。由于Firebase与后端通信的方式,使用100个电子邮件地址的单个请求或使用单个电子邮件地址的100个请求之间的差异非常小。有关详情,请参阅我的回答:Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

答案 1 :(得分:0)

你可以有这样的东西

user
  -$user_id
      -email
      -username
      -contacts 
        -contact_uid1:email1,
        -contact_uid2:email2,
        -contact_uid3:email3,

然后做:

  1. 从firebase下载联系人子项并将其保存到var

  2. 创建循环以检查地址簿中的每个联系人

  3. 如果电子邮件在联系人中,则不要做任何事情(这意味着您已经验证过该用户一次)

  4. 如果电子邮件不在联系人子代中,则启动单个事件查询以查找特定电子邮件的uid

  5. 在查询的回调中,如果它是nsnull,则用户不在应用程序中 如果用户存在,请将用户添加到firebase中的contacts子节点

  6. 这样您只需启动未检查的联系人的查询