本文实例为大家分享了iOS获取通讯录的4种方式,供大家参考,具体内容如下
使用场景
一些App通过手机号码来推荐好友,如 微博、支付宝
首先客户端会获取通讯录中的所有手机号然后将这些手机号提交到App服务器中,服务器会查找每个手机号对应的App账号如QQ号码返回到客户端,然后客户端根据服务器返回的账号列表来推荐好友。
获取联系人方式
方案一:AddressBookUI.framework框架
提供了联系人列表界面、联系人详情界面、添加联系人界面等
一般用于选择联系人
方案二:AddressBook.framework框架:
没有提供UI界面,需要自己搭建联系人界面
纯C语言的API, 仅仅是获得联系人数据
大部分数据类型是Core Foundation
从iOS6 开始,需要得到用户的授权才能访问通讯录
方案三:第三方框架:RHAddressBook
对 AddressBook.framework 进行封装
方案四:iOS9.0最新通讯录框架
ContactsUI.framework : 方案1的替代品,特点: 面向对象,使用简单,有界面
Contacts.framework: 方案2的替代品, 特点:面向对象,使用简单,五界面
方案一:AddressBookUI.framework
实现步骤:
1.创建选择联系人的控制器
2.设置代理:用来接收用户选择的联系人信息
3.弹出联系人控制器
4.实现代理方法
5.在对应的代理方法中获取联系人信息
AddressBook.frame实现步骤:
1.请求授权
2.判断授权状态如果已授权则继续,如果未授权则提示用户
3.创建通讯录对象
4.从通讯录中获取所有的联系人
5.遍历所有的联系人
6.释放不再使用的对象
AddreesBook.framework具体实现:
1. AppDelegate 应用启动时请求授权
#import "AppDelegate.h"
#import <AddressBook/AddressBook.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self requestAuthorizationAddressBook];
return YES;
}
- (void)requestAuthorizationAddressBook {
// 判断是否授权
ABAuthorizationStatus authorizationStatus = ABAddressBookGetAuthorizationStatus();
if (authorizationStatus == kABAuthorizationStatusNotDetermined) {
// 请求授权
ABAddressBookRef addressBookRef = ABAddressBookCreate();
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
if (granted) { // 授权成功
} else { // 授权失败
NSLog(@"授权失败!");
}
});
}
}
@end
2. iOS10 需要在Info.plist配置NSContactsUsageDescription
<key>NSContactsUsageDescription</key>
<string>请求访问通讯录</string>










