개발/Swift
Contact Framework 사용하여 연락처 불러오기
덤벨로퍼
2024. 9. 3. 15:05
연락처를 불러 오기 위해서는 연락처 권한이 필수임
CNContactStore().requestAccess(for: .contacts) { isGranted, _ in
}
연락처 권한 허용 여부는 이후로 이렇게 확인 가능
CNContactStore.authorizationStatus(for: .contacts) == .authorized
권한 허용 이후에는 contact 를 통해 연락처에 접근 가능함
static private func getNewContacts() async -> [String: String] {
let contactStore = CNContactStore()
guard (try? await contactStore.requestAccess(for: .contacts)) == true else { return [:] }
let keys = [
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
CNContactPhoneNumbersKey
] as? [CNKeyDescriptor] ?? [] //연락처와 full name 만 필요함
let request: CNContactFetchRequest = CNContactFetchRequest(keysToFetch: keys)
request.sortOrder = CNContactSortOrder.userDefault
var newContacts: [String: String] = [:]
try? contactStore.enumerateContacts(with: request, usingBlock: { (contact, _) in
if contact.phoneNumbers.isEmpty { return }
let phoneNumber = contact.phoneNumbers[0].value.stringValue.verifiedPhoneNumberString() // 폰 번호 받아옴
let phoneValidation = NSPredicate(format: "SELF MATCHES %@", Config.RegularExpression.PHONE_KOREA) //유효성 검사 진행
if phoneValidation.evaluate(with: phoneNumber) {
let fullName = contact.familyName + contact.givenName
newContacts[phoneNumber] = fullName
}
})
return newContacts
}