我正在编写一个应用程序,注册用户应该能够看到他的哪些联系人已注册。最优雅的方法是什么?
我计划创建一个包含从用户本地iOS地址簿中提取的所有本地保存的电子邮件地址的数组,并为这些地址创建查询。有没有更好的方法呢?
修改:如果不下载整个user
列表,这实际上是否可行?我可以使用queryStartingAtValue(emailAddress)
和queryEndingAtValue(emailAddress)
的for循环。但这可能会同时导致数百个查询。
答案 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,
然后做:
从firebase下载联系人子项并将其保存到var
创建循环以检查地址簿中的每个联系人
如果电子邮件在联系人中,则不要做任何事情(这意味着您已经验证过该用户一次)
如果电子邮件不在联系人子代中,则启动单个事件查询以查找特定电子邮件的uid
在查询的回调中,如果它是nsnull,则用户不在应用程序中 如果用户存在,请将用户添加到firebase中的contacts子节点
这样您只需启动未检查的联系人的查询