iOS 讀取通訊錄

iOS9之前

#import <AddressBook/AddressBook.h>

// 先創建一個通訊錄的對象。
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, nil);
// 從iOS6之後,讀取用戶通訊錄需要先獲得權限。
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
    // 當granted爲YES時,表示用戶同意訪問通訊錄。
    if (granted) {
        // 獲取權限提醒只會在第一次使用的時候出現。
        // 獲取權限之後可以在這裏馬上遍歷通訊錄,或者在其他任何地方。

        // 獲取通訊錄中的所有人。
         CFArrayRef peopleArray = ABAddressBookCopyArrayOfAllPeople(addressBook);
         for(int i = 0; i < CFArrayGetCount(peopleArray); i++){
             // 獲取第 i 個人
             ABRecordRef person = CFArrayGetValueAtIndex(peopleArray, i);
             // 用 ABRecordCopyValue 方法, 根據不同的 key 去獲取通訊錄中的人的屬性、信息。
             // 至於屬性的 key 我就不列出來了,可以去看看 ABPerson.h 。
             // 如獲取 FirstName :
             NSString *personName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
             // 有些屬性爲一個Array, 需要再次遍歷, 如獲取電話號碼就會有多個號碼的情況:
             ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
             for (int j = 0; j < ABMultiValueGetCount(phones); j++){
                 NSString *phoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phones, j));
                 NSString *phoneNumber = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j);
             }
         }
    }
    else {
        // 用戶不同意應用訪問通訊錄。
    }
}

iOS9 - Contacts Framework

#import <Contacts/Contacts.h>


// 一樣先要獲得通訊錄的權限。
// 新建一個 CNContactStore 的對象。
CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts 
                completionHandler:^(BOOL granted, NSError * _Nullable error) {
    // 同樣granted爲YES時表示用戶同意訪問通訊錄。
    if(granted){
        // Contacts Framework 讀取的方式和數據庫檢索方式有點相似,需要先寫一個條件去匹配提取。

// 匹配的方式有四種 :
        // + (NSPredicate *)predicateForContactsMatchingName:(NSString *)name;

        // + (NSPredicate *)predicateForContactsWithIdentifiers:(NSArray<NSString*> *)identifiers;

        // + (NSPredicate *)predicateForContactsInGroupWithIdentifier:(NSString *)groupIdentifier;

        // + (NSPredicate *)predicateForContactsInContainerWithIdentifier:(NSString *)containerIdentifier;

        // 如按名字的方式去匹配。
        NSPredicate *predicate = [CNContact predicateForContactsMatchingName:@"czbin"];
        // 根據條件去提取信息
        NSArray *contacts = [store unifiedContactsMatchingPredicate:predicate 
                                                        keysToFetch:@[CNContactGivenNameKey] 
                                                              error:nil];

        // 也可以根據一個請求(CNContactFetchRequest)去遍歷通訊錄中的聯繫人
        CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:@[CNContactGivenNameKey]];
        [store enumerateContactsWithFetchRequest:request 
                                           error:nil 
                                      usingBlock:^(CNContact *contact, BOOL *stop) {
            // 每一個 CNContact 對象就是一個聯繫人
            NSLog(@"%@",contact);
        }];
    }
}];

// 其中提取信息時的 keysToFetch 爲指定需要提取聯繫人的信息。
// 有以下的值 :
            // CNContactIdentifierKey           
            // CNContactNamePrefixKey           
            // CNContactGivenNameKey            
            // CNContactMiddleNameKey           
            // CNContactFamilyNameKey           
            // CNContactPreviousFamilyNameKey   
            // CNContactNameSuffixKey           
            // CNContactNicknameKey             
            // CNContactPhoneticGivenNameKey    
            // CNContactPhoneticMiddleNameKey   
            // CNContactPhoneticFamilyNameKey   
            // CNContactOrganizationNameKey     
            // CNContactDepartmentNameKey       
            // CNContactBirthdayKey             
            // CNContactNonGregorianBirthdayKey 
            // CNContactNoteKey                 
            // CNContactImageDataKey
            // CNContactThumbnailImageDataKey   
            // CNContactImageDataAvailableKey
            // CNContactTypeKey                    
            // CNContactPhoneNumbersKey            
            // CNContactEmailAddressesKey          
            // CNContactPostalAddressesKey         
            // CNContactDatesKey                   
            // CNContactUrlAddressesKey            
            // CNContactRelationsKey               
            // CNContactSocialProfilesKey          
            // CNContactInstantMessageAddressesKey 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章