详解iOS获取通讯录的4种方式

2020-01-18 16:42:26王振洲

本文实例为大家分享了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>