투케이2K

101. (ios/swift) 전화번호 주소록 데이터 저장 수행 실시 - CNContactStore 본문

IOS

101. (ios/swift) 전화번호 주소록 데이터 저장 수행 실시 - CNContactStore

투케이2K 2022. 1. 16. 11:29

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[방법 설명]

 

[소스 코드]

    // MARK: [전화번호 주소록에 데이터 저장 메소드]
    let store = CNContactStore() // 전화번호 주소록 접근 객체
    func saveAddress(){
        print("")
        print("===============================")
        print("[ViewController >> saveAddress() :: 전화번호 주소록에 데이터 저장 실시]")
        print("===============================")
        print("")

        // [퍼미션 권한 확인]
        self.store.requestAccess(for: .contacts) { (granted, error) in
            guard granted // MARK: [권한이 부여된 경우]
            else { // MARK: [권한이 부여되지 않은 경우]
                print("")
                print("===============================")
                print("[ViewController >> saveAddress() :: 전화번호 주소록 접근 권한 비활성 상태]")
                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 >> saveAddress() :: 전화번호 주소록 접근 권한 활성 상태]")
            print("===============================")
            print("")
            
            // [저장할 사용사 정보 매핑 실시]
            let contact:CNMutableContact = self.getUserContact()

            
            // [전화번호 저장 요청 객체 생성 실시 및 주소록에 추가]
            let request = CNSaveRequest()
            request.add(contact, toContainerWithIdentifier:nil)
            

            // [저장 수행 실시]
            try! self.store.execute(request)
            
            
            // [저장된 정보 확인]
            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 >> saveAddress() :: 전화번호 주소록 데이터 저장 완료]")
            print("name :: ", name)
            print("phone :: ", phone)
            print("email :: ", email)
            print("===============================")
            print("")
        }
    }
    // [저장하려는 사용자 정보 매핑 수행]
    func getUserContact() -> CNMutableContact {

        // [주소록 객체 생성 실시]
        let contact = CNMutableContact()
        
        // [이름 지정 실시]
        contact.familyName = "라"
        contact.givenName = "길동"
        
        // [전화 번호 지정 실시]
        let phone = CNLabeledValue(label:CNLabelPhoneNumberMobile,
                                   value:CNPhoneNumber(stringValue:"010-1234-5678"))
        contact.phoneNumbers = [phone]

        // [이메일 지정 실시]
        let email: NSString = "ra@test.com"
        contact.emailAddresses = [CNLabeledValue(label:CNLabelWork, value:email)]
        
        // [매핑된 정보 리턴 실시]
        return contact
    }
 

[결과 출력]

 

 

반응형
Comments