iOS保存聯(lián)系人到系統(tǒng)通訊錄

1、首先判斷當前通訊錄是否存在這個聯(lián)系人

// 判斷通訊錄是否存在某個聯(lián)系人
+ (BOOL)isExistContactNameByName:(NSString *)contactName{
    ABAddressBookRef addBook = nil;
    
    __block BOOL isExist = NO;
    CFErrorRef error = nil;
    addBook = ABAddressBookCreateWithOptions(NULL, &error);
    
    dispatch_semaphore_t sema=dispatch_semaphore_create(0);
    // 申請權限
    ABAddressBookRequestAccessWithCompletion(addBook, ^(bool granted, CFErrorRef error) {
        if (granted) {
            CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addBook);
            CFIndex number = ABAddressBookGetPersonCount(addBook);
            for (NSInteger index = 0; index < number; index++) {
                //獲取聯(lián)系人對象的引用
                ABRecordRef  people = CFArrayGetValueAtIndex(allPeople, index);
                //獲取當前聯(lián)系人名字
                NSString*firstName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonFirstNameProperty));
                
                if ([firstName isEqualToString:contactName]) {
                    isExist = YES;
                }
            }
        }
        dispatch_semaphore_signal(sema);
    });
    //等待信號觸發(fā)
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    
    return isExist;
}

2、判斷是否存在這個聯(lián)系人且有通訊錄權限

- (void)saveYdCallAnswerPhoneToAdrBook{
    NSString *ydContactName = @"億點連接呼轉測試";
    NSString *ydContactNote = @"這是億點連接的電話測試號碼";
    if (![SSAdrBookHelper isExistContactNameByName:ydContactName] &&
        ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
        
        [SSAdrBookHelper createAddBookRecordByPhoneArr:self.ydPhoneArray
                                              andTitle:ydContactName
                                               andNote:ydContactNote];
    }
}

3、存入聯(lián)系人

// 往通訊錄添加一條新聯(lián)系人
+ (void)createAddBookRecordByPhoneArr:(NSArray *)phoneArr andTitle:(NSString *)title andNote:(NSString *)note{
    CFErrorRef error = NULL;
    if (!phoneArr || !title) {return;}
    
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    ABRecordRef newRecord = ABPersonCreate();

    ABRecordSetValue(newRecord, kABPersonFirstNameProperty, (__bridge CFTypeRef)title, &error);
    
    //創(chuàng)建一個多值屬性(電話)
    ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType);
//    ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)obj, (__bridge CFStringRef)@"億點連接呼轉測試", NULL);
    
    [phoneArr enumerateObjectsUsingBlock:^(NSString *phone, NSUInteger idx, BOOL * _Nonnull stop) {
    // 添加手機號碼
        ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)phone, kABPersonPhoneMobileLabel, NULL);
    }];
    
    ABRecordSetValue(newRecord, kABPersonPhoneProperty, multi, &error);
    
    //添加email
//    ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);
//    ABMultiValueAddValueAndLabel(multiEmail, (__bridge CFTypeRef)([self.infoDic objectForKey:@"email"]), kABWorkLabel, NULL);
//    ABRecordSetValue(newRecord, kABPersonEmailProperty, multiEmail, &error);
    
    // 添加備注
    ABRecordSetValue(newRecord, kABPersonNoteProperty, (__bridge CFTypeRef)note, &error);
    
    //添加記錄到通訊錄操作對象
    ABAddressBookAddRecord(addressBook, newRecord, &error);
    
    //保存通訊錄操作對象
    ABAddressBookSave(addressBook, &error);

    CFRelease(multi);
    CFRelease(newRecord);
    CFRelease(addressBook);
}

效果如下:

image
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容