如果标题措辞不当,我道歉。我正在寻求有关在Firebase上执行以下操作的推荐方法的建议。
我正在使用Firebase作为群组协作类应用(想想Whatsapp)。用户使用他的电话号码进行注册,并以用户身份添加到Firebase数据库。用户在Firebase上按如下方式存储
users
-KGvMIPwul2dUYABCDEF
countryCode: 1
id: -KGvMIPwul2dUYABCDEF
mobileNumber: 1231231234
name: Varun Gupta
每当用户打开应用程序时,我想检查用户手机联系人列表中的所有用户是否也在使用我的应用程序并在应用程序中显示这些联系人。电话号码用于检查手机通讯录中的人是否正在使用该应用程序。为此,我将用户联系人列表存储到Firebase,触发Firebase功能以使用我的应用计算联系人,并将它们单独存储在Firebase上。
要确定谁正在使用我的应用,我会根据电话号码以及国家/地区代码和电话号码的组合创建Firebase中所有用户的地图。该值是上述示例的-KGvMIPwul2dUYABCDEF
用户ID。因此,地图将为用户提供以下两个条目
{
1231231234: -KGvMIPwul2dUYABCDEF
11231231234: -KGvMIPwul2dUYABCDEF
}
我为所有用户创建了上述内容,然后我只查询每个联系人,如果地图中有用户电话号码的条目,并找出使用该应用程序的用户列表。
以下是代码的摘录。现在,它是在firebase-queue
工作人员中完成的,但我打算将其移至Firebase功能
// This piece of code is used to read the users in Firebase and create a map as described above
ref.child('users').on('child_added', (snapshot) => {
var uid = snapshot.key;
var userData = snapshot.val();
// Match against both mobileNumber and the combination of countryCode and mobileNumber
// Sanity check
if(userData.mobileNumber && userData.countryCode) {
contactsMap.set(sanitizePhoneNumber(userData.mobileNumber), uid);
contactsMap.set(sanitizePhoneNumber(userData.countryCode + userData.mobileNumber), uid);
}
});
// This piece of code is used to figure out which contacts are using the app
contactsData.forEach((contact) => {
contact.phoneNumbers.forEach((phoneNumber) => {
var contactsMapEntry = contactsMap.get(sanitizePhoneNumber(phoneNumber))
// Don't add user himself to the contacts if he is present in the contacts
if(contactsMapEntry && contactsMapEntry !== uid && !contactsObj[contactsMapEntry]) {
const contactObj = {
name: createContactName(contact),
mobileNumber: phoneNumber.number,
id: contactsMapEntry
}
contactsObj[contactsMapEntry] = contactObj
currentContacts.push(contactObj)
}
});
});
// After figuring out the currentContacts, I do some processing and they are pushed to Firebase which are then synched with the app
我担心的是,随着用户数量的增加,这将开始变慢,因为我正在阅读Firebase中的所有用户,在内存中为每个请求找出正在使用该应用的联系人或我对这种蛮力的方法没问题,不用太担心。
我是否应该考虑复制以下数据
contacts
1231231234: -KGvMIPwul2dUYABCDEF
11231231234: -KGvMIPwul2dUYABCDEF
然后只查询/contacts/{contact phone number}
如果有更好的方法来实现此工作流程,请建议。