Как сохранить контактную информацию из vCard в приложении контактов iPhone - PullRequest
7 голосов
/ 15 ноября 2011

В своем приложении для iPhone я хочу сохранить визитные карточки в контактах моего iPhone, когда я нажимаю на имеющуюся у меня визитную карточку.

Как я могу это сделать?

Я виделприложение в магазине приложений, которое делает это:

http://itunes.apple.com/us/app/read-vcard/id402216831?mt=8

Спасибо

Ответы [ 5 ]

5 голосов
/ 27 октября 2015

Новая платформа контактов, представленная в iOS9, позволяет с помощью Swift4 сохранять данные vCard в контактах iPhone намного проще и проще.

import Contacts

    func saveVCardContacts (vCard : Data) { // assuming you have alreade permission to acces contacts

    if #available(iOS 9.0, *) {

        let contactStore = CNContactStore()

        do {

            let saveRequest = CNSaveRequest() // create saveRequests

            let contacts = try CNContactVCardSerialization.contacts(with: vCard) // get contacts array from vCard

            for person in contacts{

                saveRequest.add(person as! CNMutableContact, toContainerWithIdentifier: nil) // add contacts to saveRequest

            }

            try contactStore.execute(saveRequest) // save to contacts

        } catch  {

            print("Unable to show the new contact") // something went wrong

        }

    }else{

        print("CNContact not supported.") //

    }
}
3 голосов
/ 18 ноября 2011

Ниже приведен код для добавления информации о пользователе в iPhone's Contact.

Как я уже говорил, я ничего не знаю о vCard, но этот код , опубликованный malinois в ответе здесь , может быть полезен:

ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book record 
ABRecordRef person = ABPersonCreate(); // create a person  

NSString *phone = @"0123456789"; // the phone number to add  

//Phone number is a list of phone number, so create a multivalue  
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty); 
ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,phone,kABPersonPhoneMobileLabel, NULL);

ABRecordSetValue(person, kABPersonFirstNameProperty, @"FirstName" , nil); // first name of the new person 
ABRecordSetValue(person, kABPersonLastNameProperty, @"LastName", nil); // his last name 
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, &anError); // set the phone number property 
ABAddressBookAddRecord(addressBook, person, nil); //add the new person to the record

ABRecordRef group = ABGroupCreate(); //create a group 
ABRecordSetValue(group, kABGroupNameProperty,@"My Group", &error); // set group's name 
ABGroupAddMember(group, person, &error); // add the person to the group         
ABAddressBookAddRecord(addressBook, group, &error); // add the group   

ABAddressBookSave(addressBook, nil); //save the record  

CFRelease(person); // relase the ABRecordRef  variable 
1 голос
/ 20 июня 2019

func saveContactsfromVCard(vCard : Data)
    {            
            let contactStore = CNContactStore()

            do {

                let saveRequest = CNSaveRequest() // create saveRequests

                let fetchedContacts = try CNContactVCardSerialization.contacts(with: vCard)

                for person in fetchedContacts{

                   let mutableContact = person.mutableCopy() as! CNMutableContact

                    saveRequest.add(mutableContact, toContainerWithIdentifier: nil)    
                   // saveRequest.add(person, toContainerWithIdentifier: nil) // add contacts to saveRequest

                }

                try contactStore.execute(saveRequest) // save to contacts

                let alert1 = UIAlertController(title: "Successful", message: "Contacts Added Successfully!", preferredStyle: UIAlertController.Style.alert)

                alert1.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler:
                    {(alertAction) in
                }))
                self.present(alert1, animated: true, completion: nil)


            } catch  {

                print("Unable to show the new contact")
        }else{

            print("Contacts not added")

        }
    }
1 голос
/ 15 ноября 2011

Я не могу помочь вам в кодировании, но я нашел общий формат vCard в предыдущем посте . Вы можете попытаться достичь своей цели, используя этот формат. Значения слева всегда статичны. Надеюсь, ты сможешь использовать этот способ.

Для справки, я нашел Google ... (поддержка всех 3 мобильных платформ)

http://learnyii.blogspot.com/2011/04/vcard-qr-code-iphone-android-blackberry.html

0 голосов
/ 06 декабря 2011
    ABMutableMultiValueRef date = ABRecordCopyValue(newPerson, kABPersonDateProperty);
    ABMultiValueAddValueAndLabel(date, dateTextField.text, kABPersonAnniversaryLabel, NULL);            
    ABRecordSetValue(newPerson, kABPersonDateProperty, date,nil);
...