objective c - Retrieve all contacts phone numbers in iOS -
so far saw methods multiple phone numbers if show picker user can select people , phone number. want retrieving contacts' numbers. possible?
try works ios 6 ios 5.0 or older:
first add following frameworks in link binary libraries
- addressbookui.framework
- addressbook.framework
then import
#import <addressbook/abaddressbook.h> #import <addressbookui/addressbookui.h>
then use following code
requesting permission access address book
abaddressbookref addressbook = abaddressbookcreatewithoptions(null, null); __block bool accessgranted = no; if (&abaddressbookrequestaccesswithcompletion != null) { // on ios 6 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); abaddressbookrequestaccesswithcompletion(addressbook, ^(bool granted, cferrorref error) { accessgranted = granted; dispatch_semaphore_signal(semaphore); }); dispatch_semaphore_wait(semaphore, dispatch_time_forever); dispatch_release(semaphore); } else { // on ios 5 or older accessgranted = yes; [self getcontactswithaddressbook:addressbook]; } if (accessgranted) { [self getcontactswithaddressbook:addressbook]; }
retrieving contacts addressbook
// contacts. - (void)getcontactswithaddressbook:(abaddressbookref )addressbook { contactlist = [[nsmutablearray alloc] init]; cfarrayref allpeople = abaddressbookcopyarrayofallpeople(addressbook); cfindex npeople = abaddressbookgetpersoncount(addressbook); (int i=0;i < npeople;i++) { nsmutabledictionary *dofperson=[nsmutabledictionary dictionary]; abrecordref ref = cfarraygetvalueatindex(allpeople,i); //for username , surname abmultivalueref phones =(__bridge abmultivalueref)((__bridge nsstring*)abrecordcopyvalue(ref, kabpersonphoneproperty)); cfstringref firstname, lastname; firstname = abrecordcopyvalue(ref, kabpersonfirstnameproperty); lastname = abrecordcopyvalue(ref, kabpersonlastnameproperty); [dofperson setobject:[nsstring stringwithformat:@"%@ %@", firstname, lastname] forkey:@"name"]; //for email ids abmutablemultivalueref email = abrecordcopyvalue(ref, kabpersonemailproperty); if(abmultivaluegetcount(email) > 0) { [dofperson setobject:(__bridge nsstring *)abmultivaluecopyvalueatindex(email, 0) forkey:@"email"]; } //for phone number nsstring* mobilelabel; for(cfindex j = 0; j < abmultivaluegetcount(phones); j++) { mobilelabel = (__bridge nsstring*)abmultivaluecopylabelatindex(phones, j); if([mobilelabel isequaltostring:(nsstring *)kabpersonphonemobilelabel]) { [dofperson setobject:(__bridge nsstring*)abmultivaluecopyvalueatindex(phones, j) forkey:@"phone"]; } else if ([mobilelabel isequaltostring:(nsstring*)kabpersonphoneiphonelabel]) { [dofperson setobject:(__bridge nsstring*)abmultivaluecopyvalueatindex(phones, j) forkey:@"phone"]; break ; } } [contactlist addobject:dofperson]; } nslog(@"contacts = %@",contactlist); }
to retrive other information
// personal information properties kabpersonfirstnameproperty; // first name - kabstringpropertytype kabpersonlastnameproperty; // last name - kabstringpropertytype kabpersonmiddlenameproperty; // middle name - kabstringpropertytype kabpersonprefixproperty; // prefix ("sir" "duke" "general") - kabstringpropertytype kabpersonsuffixproperty; // suffix ("jr." "sr." "iii") - kabstringpropertytype kabpersonnicknameproperty; // nickname - kabstringpropertytype kabpersonfirstnamephoneticproperty; // first name phonetic - kabstringpropertytype kabpersonlastnamephoneticproperty; // last name phonetic - kabstringpropertytype kabpersonmiddlenamephoneticproperty; // middle name phonetic - kabstringpropertytype kabpersonorganizationproperty; // company name - kabstringpropertytype kabpersonjobtitleproperty; // job title - kabstringpropertytype kabpersondepartmentproperty; // department name - kabstringpropertytype kabpersonemailproperty; // email(s) - kabmultistringpropertytype kabpersonbirthdayproperty; // birthday associated person - kabdatetimepropertytype kabpersonnoteproperty; // note - kabstringpropertytype kabpersoncreationdateproperty; // creation date (when first saved) kabpersonmodificationdateproperty; // last saved date // address information properties kabpersonaddressproperty; // street address - kabmultidictionarypropertytype kabpersonaddressstreetkey; kabpersonaddresscitykey; kabpersonaddressstatekey; kabpersonaddresszipkey; kabpersonaddresscountrykey; kabpersonaddresscountrycodekey;
further reference read apple docs
update: need add description why need access contacts in apps-info.plist
privacy - contacts usage description
or
<key>nscontactsusagedescription</key> <string>write reason why app needs contact.</string>
for getting user image.
uiimage *contactimage; if(abpersonhasimagedata(ref)){ contactimage = [uiimage imagewithdata:(__bridge nsdata *)abpersoncopyimagedata(ref)]; }
note:
the addressbook framework deprecated in ios 9
, replaced new , improved contacts framework
Comments
Post a Comment