티스토리 뷰
사용자의 연락처에 접근하는 방법입니다.
1. info.plist에 다음을 추가해주세요.
NSContactsUsageDescription
2.import ContactsUI
import ContactsUI
3. CNContactPickerDelegate
CNContactStore()에서 정보를 가져옵니다.
가져오기 위해서 key를 설정해야합니다.
FirstName - 이름 - CNContactGivenNameKey
LastName - 성 - CNContactFamilyNameKey
Company - 직장 - CNContactOrganizationNameKey
phone - 휴대전화 - CNContactPhoneNumbersKey
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
let store = CNContactStore()
let keysToFetch = [
CNContactGivenNameKey,
CNContactFamilyNameKey,
CNContactPhoneNumbersKey,
CNContactOrganizationNameKey,
] as [CNKeyDescriptor]
do {
let predicate = CNContact.predicateForContacts(withIdentifiers: [contact.identifier])
let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
guard let contact = contacts.first else { return }
if contact.familyName.count == 0 && contact.givenName.count == 0 {
nameLabel.text = "\\(contact.organizationName)"
} else {
nameLabel.text = "\\(contact.familyName)\\(contact.givenName)"
}
if let phone = contact.phoneNumbers.first {
phoneLabel.text = "\\(phone.value.stringValue)"
}
} catch {
print("Failed to fetch, error: \\(error)")
}
}
1) unifiedContacts()를 이용해서 fetch한 후에 사용해야 합니다.
2) keysToFetch에 없는 내용은 요청할 수 없습니다.
3) 이름이 없을 경우 직장명으로 이름이 설정됩니다.
4) 여러개의 연락처를 저장한 경우 첫 번째의 연락처로 설정합니다.
4. 연락처 요청
let status = CNContactStore.authorizationStatus(for: .contacts)
let vc = CNContactPickerViewController()
vc.delegate = self
switch status {
case .authorized:
present(vc, animated: true, completion: nil)
default:
CNContactStore().requestAccess(for: .contacts) { [weak self] success, error in
guard let self = self else { return }
if success {
DispatchQueue.main.async {
self.present(vc, animated: true, completion: nil)
}
} else {
guard let url = URL(string: UIApplication.openSettingsURLString) else { return }
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
}
}
1) 연락처 권한을 확인합니다.
2) 연락처 권한이 있는 경우 연락처 picker를 보여줍니다.
3) 연락처 권한이 없는 경우 요청을 하고 거절 시 설정으로 이동시킵니다.
'iOS' 카테고리의 다른 글
[iOS] What are Frameworks? 번역 / 프레임워크란? (0) | 2021.12.14 |
---|---|
[iOS] PinLayout 문서 번역(1) (0) | 2021.11.29 |
[iOS] AVCam: Building a Camera App 번역 / iOS 카메라 앱 만들기 (0) | 2021.10.25 |
[iOS] UIImagePickerController 번역 (0) | 2021.10.22 |
[iOS] Choosing a Capture Device 번역 (0) | 2021.10.22 |
댓글
공지사항