【发布时间】:2020-09-03 17:56:59
【问题描述】:
我正在尝试快速将来自 Firestore 的电话号码列表与用户的通讯录进行比较和匹配。这行得通,但速度很慢,尤其是来自 firestore 的更多数字,我认为逻辑完全错误,需要修复。
// Array of Strings containing all the phone numbers that are registered on the app are passed through the function.
func searchForContactUsingPhoneNumber(phoneNumberArray: [String]) -> [CNContact] {
var result: [CNContact] = []
let phoneNumberKit = PhoneNumberKit()
// go through all contacts in the address book for contact in self.contacts {
if !contact.phoneNumbers.isEmpty {
let parsedNumberArray = try? phoneNumberKit.parse(phoneNumberArray, withRegion: "GB", ignoreType: true)
for singleNumber in parsedNumberArray! {
let databaseNumber = singleNumber.nationalNumber
//go through every number of each contach
for phoneNumber in contact.phoneNumbers {
let fulMobNumVar = phoneNumber.value
let number = fulMobNumVar.value(forKey: "digits") as? String
let parsedNumber = try? phoneNumberKit.parse(number!, withRegion: "GB", ignoreType: true)
let contactNumber = parsedNumber?.nationalNumber
//compare phoneNumber of contact with given users phone number
if contactNumber == databaseNumber {
result.append(contact)
}
}
}
}
}
return result
}
编辑
有 3 个电话号码列表:
firestore 中的一个列表,其中存储已在应用程序上注册的用户的每个电话号码。当任何新用户在应用程序上注册时,他们的电话号码就会添加到该列表中。将此列表与用户自己的电话通讯簿进行比较。
第二个列表是用户通讯录(联系人)。如果 firebase 中的电话号码与地址簿匹配,则该号码将添加到特定用户文档中 firebase 内的第三个列表中。
第三个列表是我正在尝试生成的特定于应用程序的列表,其中包含用户通讯录和所有电话号码的大列表之间的匹配项。
【问题讨论】:
-
代码的用途是什么?换句话说,声明是在地址簿和firebase之间比较和匹配电话号码 - 为什么?是否需要获取firebase中的号码并将其添加到联系人或获取不在firebase中的联系人号码并添加它们?或者是其他东西?我在问,因为答案取决于用例。在高层次上,您可以获取联系人中的所有数字并将它们放入一个集合中,对 Firebase 中的所有数字执行相同的操作,并使用这些集合,您可以通过一行代码找到它们的交集或对称差.
-
感谢您的回复!目的是当用户通讯录中的号码与 firebase 中的号码列表匹配时,匹配的电话号码将添加到应用程序中的用户联系人列表中。匹配的号码将添加到 Firestore 中的用户联系人列表中。尝试重新创建与 WhatsApp 类似的功能,用户通讯录中拥有 WhatsApp 的每个号码都将出现在用户 WhatsApp 联系人列表中。
-
所以有三个电话号码列表; 1)用户联系人 2)存储在 Firestore 中的号码列表 3)存储在应用程序联系人中?存储在 Firestore 中的数据与存储在应用程序联系人中的数据有什么区别 - 您不是将应用程序数据存储在 Firestore 中吗? 2)中的数字来自哪里?最后一个问题; 1) 和 2) 中一般有多少电话号码?
-
抱歉没有说清楚。是的,有 3 个电话号码列表。 Firestore 上有 1 个列表 (LIST A),其中存储了在应用程序上注册的用户的每个电话号码。当任何新用户在应用程序上注册时,他们的电话号码就会添加到该列表中。此列表与用户自己的电话通讯簿(列表 2)进行比较。如果 firebase 中的电话号码与地址簿匹配,则该号码将添加到特定用户文档 (LIST3) 内 firebase 内的第三个列表中。列表 1 将包含更多的数字。
-
完美。我更新了你的问题。有很多方法可以做到这一点,所以我会尽快回答。
标签: ios swift firebase google-cloud-firestore