APAddressBook 0.3.2

APAddressBook 0.3.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布上次发布2017年9月

Alexey Belkevich维护。




APAddressBook是在AddressBook.framework上创建的一个包装器,它可以轻松访问本地地址簿而无需烦恼。

功能

  • 异步从iOS地址簿中加载联系人
  • 决定您需要加载哪些联系人数据字段(例如,只加载姓名和电话号码)
  • 筛选联系人以获取所需的记录(例如,您只需要具有电子邮件的联系人)
  • 使用任意NSSortDescriptor数组对联系人进行排序
  • 获取联系人的照片

Objective-c

安装

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: 方法

选择联系人字段位掩码

可用字段

  • APContactFieldName - 中间名复合名
  • APContactFieldJob - 公司(组织)职位头衔
  • APContactFieldThumbnail - 缩略图 图像
  • APContactFieldPhonesOnly - 忽略电话标签电话号码数组
  • APContactFieldPhonesWithLabels - 标有原始和本地化标签电话数组
  • APContactFieldEmailsOnly - 忽略电子邮件标签电子邮件地址数组
  • APContactFieldEmailsWithLabels - 标有原始和本地化标签电子邮件地址数组
  • APContactFieldAddressesWithLabels - 标有原始和本地化标签的联系人地址数组
  • APContactFieldAddressesOnly - 忽略地址标签的联系人地址数组
  • APContactFieldSocialProfiles - 社交网络中联系人的个人资料数组
  • APContactFieldBirthday - 生日 日期
  • APContactFieldWebsites - 网站URL字符串数组
  • APContactFieldNote - 笔记 字符串
  • APContactFieldRelatedPersons - 相关人员 数组
  • APContactFieldLinkedRecordIDs - 联系人关联记录ID数组
  • APContactFieldSource - 联系人源ID源名称
  • APContactFieldDates - 联系人日期(带有本地化和原始标签
  • APContactFieldRecordDate - 联系人记录的创建日期修改日期
  • APContactFieldDefault - 不带标签的联系人名称和电话
  • APContactFieldAll - 上文所述的所有联系人字段

联系人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;
}

Swift

安装

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序列化

使用APContact-EasyMapping,作者为Jean Lebrument

0.1.x到0.2.x迁移指南

迁移指南

历史

版本发布

贡献者指南

贡献者指南

githalytics.com alpha

联系人

如果您有改进或疑虑,请随时提交问题并详细说明。

查看 Alterplay 的所有 GitHub 项目。
给我们发邮件,提供其他想法和项目。