APAddressBook是在AddressBook.framework上创建的一个包装器,它可以轻松访问本地地址簿而无需烦恼。
安装
将APAddressBook
pod添加到Podfile
pod 'APAddressBook'
关于iOS 10.0及以后的警告
为了保护用户隐私,iOS 10.0或更高版本中链接的应用程序,如果访问用户的联系人,必须静态声明此 intent。在您的应用的Info.plist
文件中包含NSContactsUsageDescription
键,并提供此键的用途字符串。如果您的应用在没有相应用途字符串的情况下尝试访问用户的联系人,则应用程序将退出。
请参阅此处。
加载联系人
APAddressBook *addressBook = [[APAddressBook alloc] init];
// don't forget to show some activity
[addressBook loadContacts:^(NSArray <APContact *> *contacts, NSError *error)
{
// hide activity
if (!error)
{
// do something with contacts array
}
else
{
// show error
}
}];
回调块将在主队列上运行!如果您需要在自定义队列上运行回调块,请使用
loadContactsOnQueue:completion:
方法
选择联系人字段位掩码
可用字段
联系人
recordID
属性始终可用
具有名称和缩略图的字段掩码示例
APAddressBook *addressBook = [[APAddressBook alloc] init];
addressBook.fieldsMask = APContactFieldFirstName | APContactFieldThumbnail;
筛选联系人
此选项最常见的使用情况是筛选没有电话号码的联系人。示例
addressBook.filterBlock = ^BOOL(APContact *contact)
{
return contact.phones.count > 0;
};
排序联系人
APAddressBook 返回未排序的联系人。因此,大多数用户都希望按姓氏和名字排序联系人。
addressBook.sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"name.firstName" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"name.lastName" ascending:YES]
];
按地址簿记录ID加载联系人
[addressBook loadContactByRecordID:recordID completion:^(APContact *contact)
{
self.contact = contact;
}];
APContact
实例将包含在addressBook.fieldsMask
中设置的字段
回调块会在主队列上运行!如果您需要在自定义队列上运行回调块,请使用
loadContactByRecordID:onQueue:completion:
方法
按地址簿记录ID加载联系人照片
[addressBook loadPhotoByRecordID:recordID completion:^(UIImage *image)
{
self.imageView.image = image;
}];
回调块会在主队列上运行!如果您需要在不同队列上运行回调块,请使用
loadPhotoByRecordID:onQueue:completion:
方法
观察地址簿外部更改
// start observing
[addressBook startObserveChangesWithCallback:^
{
// reload contacts
}];
// stop observing
[addressBook stopObserveChanges];
请求地址簿访问权限
[addressBook requestAccess:^(BOOL granted, NSError *error)
{
// check `granted`
}];
检查地址簿访问权限
switch([APAddressBook access])
{
case APAddressBookAccessUnknown:
// Application didn't request address book access yet
break;
case APAddressBookAccessGranted:
// Access granted
break;
case APAddressBookAccessDenied:
// Access denied or restricted by privacy settings
break;
}
安装
pod 'APAddressBook/Swift'
将APAddressBook-Bridging.h
导入到应用程序的Objective-C桥接文件中。
#import <APAddressBook/APAddressBook-Bridging.h>
示例
查看Example/Swift
目录中的示例应用程序。
self.addressBook.loadContacts(
{ (contacts: [APContact]?, error: Error?) in
if let uwrappedContacts = contacts {
// do something with contacts
}
else if let unwrappedError = error {
// show error
}
})
使用APContact-EasyMapping,作者为Jean Lebrument
如果您有改进或疑虑,请随时提交问题并详细说明。
查看 Alterplay 的所有 GitHub 项目。
给我们发邮件,提供其他想法和项目。