В данной статье мы рассмотрим основы взаимодействия с фреймворком Contacts.
Contacts
Фреймворк Contacts обеспечивает Swift и Objective-C API для получения доступа к контактной информации пользователей. Поскольку большинство приложений считывают контактную информацию без внесения изменений, этот фреймворк оптимизирован для потокобезопасного и read-only использования.
Подключение Contacts
Данный фрэймворк включён в список в встроенных библиотек в xCode, поэтому вам не нужно скачивать подов. Для его подключения необходимо лишь добавить его в список подключаемых библиотек и фреймворков. И затем включить его директивой #import <Contacts/Contacts.h> в нужные вам классы. В данной статье мы рассмотрим следующие классы:
- CNContactStore — класс, позволяющий извлекать и сохранять контакты, группы.
- CNContactFetchRequest — класс, который отвечает за извлекаемые свойства контактов.
- CNContact — класс, хранящий данные о контакте, такие как имя, номер телефона и т.д.
CNContact
Это потокобезопасный класс, который содержит неизменные значения объекта для свойств контакта, таких как имя и номер телефона. Для изменения свойств контакта есть подкласс CNMutableContact, в котором вы можете менять их.
Ниже приведен список основных свойств контакта, которые вы можете получить. Весь список вы можете найти в описании класса CNContact.h.
- CNContactNamePrefixKey — префикс имени.
- CNContactGivenNameKey — имя.
- CNContactMiddleNameKey — отчество
- CNContactNicknameKey — псевдоним.
- CNContactBirthdayKey — дата рождения.
Пример использования.
В качестве примера рассмотрим извлечение данных контактов уже содержащихся на устройстве. Все действия в качестве демонстрации будут выполнены в классе AppDelegate.
Для начала нам необходим массив, который будет хранить наши контакты после их извлечения.
@property (strong, nonatomic) NSMutableArray* groupsOfContacts;
NOTE: Для получения доступа к пользовательским данным в iOS 10 необходимо прописать ключ в файле info.plist
Privacy — Contacts Usage Description и его значение $(PRODUCT_NAME) contact use
Получение доступа к контактам
Прежде чем извлечь какие-то данные из ваших контактов, необходимо получить к ним доступ. Так давайте сделаем это. В методе didFinishLaunchingWithOptions напишем следующее.
self.groupsOfContacts = [[NSMutableArray alloc] init]; // необходимо инициализировать массив прежде чем делать какие-то действия
if([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined) //проверяем статус доступа, если не определен, то запрашиваем его
{
CNContactStore * contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
if(granted){ //если вы разрешили доступ, то вызовем метод getAllContact, который рассмотрим далее
[self getAllContact];
}
}];
} else {// Если доступ уже дан, то получаем контакты сразу
[self getAllContact];
}
Если мы всё правильно написали, то должно появиться окно с предоставлением доступа к вашим контактам.
Получение всех контактов
Для получения контактов напишем следующий метод getAllContact
- (void) getAllContact {
CNContactStore* addressBook = [[CNContactStore alloc] init]; //объект при помощи которого мы можем извлекать и сохранять данные
NSArray* keysToFetch = @[CNContactNamePrefixKey, //Ключи объектов, которые хотим извлечь
CNContactGivenNameKey,
CNContactMiddleNameKey,
CNContactNicknameKey,
CNContactBirthdayKey];
CNContactFetchRequest* fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch]; //Выгружаем наши контакты, с заданными ключами
[addressBook enumerateContactsWithFetchRequest:fetchRequest error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
[self.groupsOfContacts addObject:contact]; //Добавляем контакты, которые выгрузили ранее в наш массив, который создали в начале
}];
}
Отображение извлеченных данных
Вернемся в метод didFinishLaunchingWithOptions и после предоставления доступа напишем следующее
for(CNContact* contact in self.groupsOfContacts) {
NSLog(@"NamePrefix = %@,\n GivenName = %@,\n MiddleName = %@,\n Nickname = %@,\n Birthday = %@ \n\n\n",
contact.namePrefix,
contact.givenName,
contact.middleName,
contact.nickname,
[contact.birthday date]);
}
Пробегаемся по массиву и печатаем, извлеченные нами данные. В итоге у нас должно получиться что-то такое.
Заключение
В данной статье мы рассмотрели основы фреймворка Contacts. Разобрали пример, в котором извлекли контакты, которые содержатся на устройстве.
Автор фото: @madeawkward
Спасибо за внимание.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.