Notice
Recent Posts
Recent Comments
Link
투케이2K
100. (ios/swift) 전화번호 주소록 데이터 읽기 수행 실시 - CNContactStore 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[방법 설명]
[소스 코드]
// MARK: [전화번호 주소록에 저장된 데이터 확인 메소드]
let store = CNContactStore() // 전화번호 주소록 접근 객체
func readAddress(){
print("")
print("===============================")
print("[ViewController >> readAddress() :: 전화번호 주소록에 저장된 데이터 읽기 실시]")
print("===============================")
print("")
// [퍼미션 권한 확인]
self.store.requestAccess(for: .contacts) { (granted, error) in
guard granted // MARK: [권한이 부여된 경우]
else { // MARK: [권한이 부여되지 않은 경우]
print("")
print("===============================")
print("[ViewController >> readAddress() :: 전화번호 주소록 접근 권한 비활성 상태]")
print("===============================")
print("")
// [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
DispatchQueue.main.async {
let alert = UIAlertController(title: "알림", message: "전화번호부 접근 권한을 허용해주세요.", preferredStyle: .alert)
let okBtn = UIAlertAction(title: "확인", style: .default) { (action) in
alert.dismiss(animated: true, completion: nil)
// [사용자 앱 설정창 이동 수행 실시]
let settingsURL = NSURL(string: UIApplication.openSettingsURLString)! as URL
UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
}
let noBtn = UIAlertAction(title: "취소", style: .cancel) { (action) in
// [팝업창 닫기]
alert.dismiss(animated: true, completion: nil)
}
alert.addAction(okBtn)
alert.addAction(noBtn)
self.present(alert, animated: true, completion: nil)
}
return
}
print("")
print("===============================")
print("[ViewController >> readAddress() :: 전화번호 주소록 접근 권한 활성 상태]")
print("===============================")
print("")
// [Request 생성 : 전화번호 주소록에서 알아오려는 key 지정]
let request: CNContactFetchRequest = self.getCNContactFetchRequest()
// [주소록 읽을 때 정렬 실시]
request.sortOrder = CNContactSortOrder.userDefault
// Contacts 주소록 읽기 [주소록이 1개씩 읽혀서 usingBlock으로 들어옵니다]
try! self.store.enumerateContacts(with: request, usingBlock: { (contact, stop) in
if contact.phoneNumbers.isEmpty == false { // 휴대폰 번호가 있을 경우만 배열에 추가 실시
// [이름]
let name = contact.familyName + contact.givenName
// [전화번호]
let phone = contact.phoneNumbers[0].value.value(forKey: "digits") ?? ""
// [이메일]
let email = contact.emailAddresses[0].value ?? ""
print("")
print("===============================")
print("[ViewController >> readAddress() :: 전화번호 주소록 데이터 읽기 실시]")
print("name :: ", name)
print("phone :: ", phone)
print("email :: ", email)
print("===============================")
print("")
}
})
}
}
// [Request 객체 생성 - 주소록에서 읽을 key 지정]
private func getCNContactFetchRequest() -> CNContactFetchRequest {
// [주소록에서 읽어올 key 설정]
let keys: [CNKeyDescriptor] = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName), // 이름
CNContactPhoneNumbersKey, // 전화번호
CNContactEmailAddressesKey, // 이메일
CNContactJobTitleKey, // 직장
CNContactImageDataAvailableKey, // 이미지
CNContactThumbnailImageDataKey, // 이미지
CNContactPostalAddressesKey] as! [CNKeyDescriptor]
return CNContactFetchRequest(keysToFetch: keys)
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
102. (ios/swift) [재등록] 외부 앱 설치 확인 및 마켓 이동 실시 - openURL , canOpenURL (0) | 2022.01.21 |
---|---|
101. (ios/swift) 전화번호 주소록 데이터 저장 수행 실시 - CNContactStore (0) | 2022.01.16 |
99. (ios/swift) 웹뷰 (wkwebview) 캐시 초기화 방법 (0) | 2022.01.11 |
98. (ios/swift) 빌드 타겟 , 버전 변경 및 AppDelegate , SceneDelegate 분기 처리 실시 (0) | 2022.01.09 |
97. (ios/swift) 뷰 컨트롤러 클래스 지정 및 스토리보드 아이디 지정 방법 (0) | 2022.01.09 |
Comments