===== Contacts ===== ==== 설명 ==== * 디바이스의 연락처 데이터베이스에 접속하는 기능을 제공한다. ==== 제약사항 ==== * Contacts API의 플랫폼별 제약사항은 다음과 같다. === Android === == Contacts == * categories : 지원하지 않음. 항상 null 값을 리턴한다. (**Android 2.x **) == ContactAddress == * pref : 지원하지 않음. 항상 false 값을 리턴한다. (**Android 2.x **) == ContactField == * pref : 지원하지 않음. 항상 false 값을 리턴한다. == ContactName == * formatted: 부분적으로 지원함. * honorificPrefix, givenName, middleName, familyName and honorificSuffix 순으로 리턴 하지만, 저장되지 않는다. == ContactOrganization == * pref: 지원하지 않음. 항상 false 값을 리턴한다. (**Android 2.x**) === iOS === == Contacts == * displayName : 지원하지 않음. 항상 null 값을 리턴한다. ContactName 객체가 있을 경우에는 name 이나 nickname, “” 을 갖는다. * birthday : 자바스크립트의 Date 객체를 사용해야 한다.. * photos : 호출한 사진은 단말기의 임시폴더에 저장되며, File URL을 리턴한다. 임시 폴더는 앱이 종료될 때 삭제된다. * categories : 지원하지 않음. 항상 null 값을 리턴한다. == ContactAddress == * pref : 지원하지 않음. 항상 false 값을 리턴한다. * formatted : 현재 지원하지 않음. == ContactField == * pref : 지원하지 않음. 항상 false 값을 리턴한다. == ContactName == * formatted: 부분적으로 지원함. Composite Name을 리턴 하지만, 저장되지 않는다. == ContactOrganization == * pref: 지원하지 않음. 항상 false 값을 리턴한다. * type: 지원하지 않음. 항상 null 값을 리턴한다. * name: 부분적으로 지원함. Organization에 대입한 배열중, 첫 번째 ContactOrganization만 유효하다. * department: 부분적으로 지원함. Organization에 대입한 배열중, 첫 번째 ContactOrganization만 유효하다. * title: 부분적으로 지원함. Organization에 대입한 배열중, 첫 번째 ContactOrganization만 유효하다. === DEPRECATED === * 개인정보에 대한 민감성 및 안정성 문제로 더이상 업데이트 하지 않음 ( https://cordova.apache.org/news/2017/11/27/Deprecation-of-cordova-contacts-plugin.html ) * W3C 연락처 API 표준안 ( https://www.w3.org/TR/contacts-api/ ) ==== 환경 설정 ==== === Android === * app/res/xml/config.xml * app/AndroidManifest === iOS === * App/Supporting Files/config.xml ==== 관련 함수 ==== === contacts.create === * 새로운 Contact 객체를 생성한다. * 생성과 동시에 디바이스에 저장되지 않는다. (Contact.save 를 통해 저장할 수 있다.) var contact = navigator.contacts.create(properties); * Quick Example var myContact = navigator.contacts.create({"displayName": "Test User"}); === contacts.find === * 디바이스 내, 연락처 데이터베이스를 검색하여, 각각의 연락처 정보를 갖는 하나 이상의 Contact 객체를 받는다. navigator.contacts.find(contactFields, contactSuccess, contactError, contactFindOptions); ^유형^설명^타입^비고^ |contactFields|검색하고자 하는 연락처 정보를 정의한다.|DOMString[]|[필수]| |contactSuccess|연락처 데이터베이스 검색이 성공하였을 때 실행하는 함수| |[필수]| |contactError|검색에 실패하였을 때 실행하는 함수| |[선택]| |contactFindOptions|검색 조건을 정의한다.| |[선택]| ==== 파라미터 ==== === contactFields === * contacts.find 함수 파라미터로 사용된다. * Contact 객체의 필드로 검색 결과로 나타나는 내용들을 정의하는데 사용된다. ["name", "phoneNumbers", "emails"] === contactSuccess === * contacts.find 함수 실행 성공 후에 수행되며 Contact 배열을 결과 값으로 가진다. * 검색 조건으로 조회된 Contact 객체 배열 function(contacts) { // Do something } === contactError === * contact 관련 함수 실행에 실패하였을 때 수행된다. function(code) { // Do something } ^유형^설명^ |ContactError.UNKNOWN_ERROR|알 수 없는 오류| |ContactError.INVALID_ARGUMENT_ERROR|잘못된 파라미터 오류| |ContactError.TIMEOUT_ERROR|시간 초과 오류| |ContactError.PENDING_OPERATION_ERROR|명령 지연 오류| |ContactError.IO_ERROR|읽기나 쓰기 중 오류| |ContactError.NOT_SUPPORTED_ERROR|지원하지 않음| |ContactError.PERMISSION_DENIED_ERROR|권한 부여에 대한 오류| === contactFindOptions === * contacts.find 함수의 선택적 옵션이다. * 연락처 데이터베이스 검색 후에 나타나는 결과들의 내용을 정의한다. { filter: "", multiple: true, }; ^유형^설명^타입^비고^ |filter|연락처 검색에 사용될 문자열(검색어)|DOMString|기본값 : ""| |mutiple|다중 연락처에 대한 검색 허용 여부|Boolean|기본값 : false| ==== Objects ==== === Contact === * 사용자의 개인 혹은 사무 용도의 연락처 정보를 가지는 객체이다. function onSuccess(contact) { alert("Save Success"); }; function onError(contactError) { alert("Error = " + contactError.code); }; // create a new contact object var contact = navigator.contacts.create(); contact.displayName = "Plumber"; contact.nickname = "Plumber"; //specify both to support all devices // populate some fields var name = new ContactName(); name.givenName = "Jane"; name.familyName = "Doe"; contact.name = name; // save to device contact.save(onSuccess,onError); == 속성 == ^유형^설명^타입^ |id |연락처에 대한 고유한 Id이다. |DOMString | |displayName |사용자의 화면에 출력하는 연락처 이름이다. |DOMString | |name|연락처에 저장된 이름 정보를 모두 포함하고 있다.|ContactName| |nickname |연락처에 저장된 별명이다. |DOMString | |phoneNumbers |전화번호를 배열 형태로 저장하고 있다. |ContactField[] | |emails |관련 연락처에 대한 이메일 정보의 배열이다.  |ContactField[] | |addresses |관련 연락처의 주소에 대한 배열이다. |ContactAddresses[] | |ims |관련 연락처에 대한 메신저 주소 정보의 배열이다. |ContactField[] | |organizations |소속 단체 정보에 대한 배열이다. |ContactOrganization[] | |birthday |관련 연락처에 대한 생일이다. |Date | |note |관련 연락처에 대한 메모이다. |DOMString | |photos |관련 연락처에 대한 사진이다. |ContactField[] | |categories |연락처에 대한 분류 카테고리의 배열이다. |ContactField[] | |urls |연락처에 대한 홈페이지 주소의 배열이다. |ContactField[] | == 함수 == ^함수^설명^비고^ |clone |호출한 Contact 객체를 복제하여 새로운 Contact 객체를 생성하고, 새로운 Contact 객체는 null이기 때문에 새로운 Contact 객체로 저장할 수 있도록 지원한다. | | |remove |연락처 데이터베이스에서 호출한 Contact 객체를 삭제하고 성공 했을 경우에는 Contact 객체를, 실패했을 경우에는 ContactError 객체를 전달받는다. | | |save |신규 Contact 객체 경우에는 디바이스 내, 연락처 데이터베이스에 등록하고, 존재하는 경우 연락처를 수정한다. | | === ContactName === * Contact 객체의 name 속성에 해당하는 관련 속성들의 객체. == 속성 == ^속성^설명^타입^ |formatted |해당 연락처의 전체이름. |DOMString | |familyName |전체 이름에서 ‘성’을 의미한다. |DOMString | |givenName |전체 이름에서 ‘이름’을 의미한다. |DOMString | |middleName |전체 이름에서 성과 이름 사이의 ‘중간 이름’. |DOMString | |honorificPrefix |’Mr.’ 나 ‘Dr.’ 같은 접두 호칭을 의미한다. |DOMString | |honorificSuffix |’Esq.’와 같은 접미 호칭을 의미한다. |DOMString | === ContactField === * Contact 객체의 phone numbers, email address, urls 속성에서 사용하는 필드 객체. == 속성 == ^속성^설명^타입^ |type|필드 유형을 정의한다.(예: ‘home’ 은 집전화, ‘mobile’ 은 휴대전화.)|DOMString| |value|phone number 등과 같은 필드에 대한 값을 정의한다.|DOMString| |pref|’true’ 일 경우 필드 내, 다수의 값들의 대표 값을 지정한다.|boolean| === ContactAddress === * Contact 객체의 주소 속성에 대한 객체. function onSuccess(contacts) { for (var i=0; i == 속성 == ^속성^설명^타입^ |pref |ContactAddress 객체의 대표 값 여부. |boolean | |type |필드 유형을 정의한다. |DOMString | |formatted |출력을 위한 전체 주소. |DOMString | |streetAddress |동 / 읍 / 면 / 가 와 같은 전체 주소. |DOMString | |locality |’시’ / ‘도’ 표기. |DOMString | |region |’주’ / ‘지방’ 표기. |DOMString | |postalCode |우편번호 표기. |DOMString | |country |도시이름 표기. |DOMString | === ContactOrganization === * Contact 객체의 organization 속성에 관련된 객체. function onSuccess(contacts) { for (var i=0; i == 속성 == ^속성^설명^타입^ |pref|ContactOrganization 객체의 대표 값 여부.|boolean| |type|필드 유형을 정의한다.(예: ‘work’ 은 직장.)|DOMString| |name|소속의 이름을 정의한다.|DOMString| |department |소속 부서를 정의한다. |DOMString | |title |소속 내의 직함을 정의한다. |DOMString | === ContactFindOptions === * contacts.find 함수에서 사용되는 검색 조건을 정의하는 객체. // success callback function onSuccess(contacts) { for (var i=0; i == 속성 == ^속성^설명^타입^ |filter|검색어 또는 검색조건을 정의한다.|DOMString| |multiple|검색 결과으로 다수의 연락처를 가져올 것인지의 여부.|Boolean| === ContactError === * 에러가 발생했을 경우, contactError 함수 호출 시, 전달받는 객체. == 속성 == ^속성^설명^ |code|에러코드를 나타낸다.| == Error Code == ^유형^설명^ |ContactError.UNKNOWN_ERROR|알 수 없는 오류| |ContactError.INVALID_ARGUMENT_ERROR|잘못된 파라미터 오류| |ContactError.TIMEOUT_ERROR|시간 초과 오류| |ContactError.PENDING_OPERATION_ERROR|명령 지연 오류| |ContactError.IO_ERROR|읽기나 쓰기 중 오류| |ContactError.NOT_SUPPORTED_ERROR|지원하지 않음| |ContactError.PERMISSION_DENIED_ERROR|권한 부여에 대한 오류| ==== 참고 자료 ==== * Cordova : https://cordova.apache.org/docs/en/7.x/reference/cordova-plugin-contacts/index.html