iOS - iOS 9 前获取用户通讯录列表封装(无UI)
2016-11-13 14:09
471 查看
iOS开发中 , 获取用户通讯录一般分为两种 , 一种为有UI , 即为类似弹出手机通讯一样的列表 . 二是无UI , 即需要获取通讯录中的信息 , 然后自己搭建UI界面用于展示 , 尤其在社交类app较为常见 . 而通常情况 , 我们需要获取的是通讯录中联系人的电话和姓名.
访问权限
iOS 10 后苹果加强用户隐私保护 , 在info.plist文件中配置 Privacy - Contacts Usage Description 即可 .
代码中:
1 . 在App delegate中导入
2 . 向用户请求授权
3 . 创建模型用户存储联系人信息
4 . 封装代码 , 获取联系人信息
访问权限
iOS 10 后苹果加强用户隐私保护 , 在info.plist文件中配置 Privacy - Contacts Usage Description 即可 .
代码中:
1 . 在App delegate中导入
#import <AddressBook/AddressBook.h>头文件
2 . 向用户请求授权
// kABAuthorizationStatusNotDetermined = 0, 未决定 // kABAuthorizationStatusRestricted, 特殊原因禁止访问用户通讯录 // kABAuthorizationStatusDenied, 用户拒绝访问 // kABAuthorizationStatusAuthorized 已经授权访问 // 倒数第二种除非用户在设置里主动打开。否则在APP里永远无法访问 。 只有第一种情况下,才会告知用户授权。 //判断用户授权状态 ABAuthorizationStatus state = ABAddressBookGetAuthorizationStatus(); //判断 如果授权状态是未决定的,则请求授权 if (state == kABAuthorizationStatusNotDetermined) { //请求 //1.获取通讯录对象 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); //2.请求授权 (用户决定后就会回调block) ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (granted) { NSLog(@"用户授权成功"); }else{ NSLog(@"用户授权失败"); } }); }
3 . 创建模型用户存储联系人信息
#import <Foundation/Foundation.h> @class JYContactsPersonModel; @interface JYContactsModel : NSObject //错误信息 @property(nonatomic, copy) NSString *errorMessage; //通讯录联系人列表 @property(nonatomic, strong) NSArray <JYContactsPersonModel *> *contactsList; @end @interface JYContactsPersonModel : NSObject //联系人名字 @property(nonatomic, copy) NSString *name; //联系人手机号 @property(nonatomic, strong) NSArray *phoneNumbers; @end
4 . 封装代码 , 获取联系人信息
//获取联系人列表信息 + (JYContactsModel *)getContactsList { //联系人列表模型 JYContactsModel *contactsList = [[JYContactsModel alloc]init]; //授权状态 ABAuthorizationStatus state = ABAddressBookGetAuthorizationStatus(); //如果未授权 if (state != kABAuthorizationStatusAuthorized){ contactsList.errorMessage = @"没有访问权限"; return contactsList; }; ABAddressBookRef adressBook = ABAddressBookCreateWithOptions(NULL, NULL); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(adressBook); //遍历所有联系人 CFIndex peopleCount = CFArrayGetCount(allPeople); //如果没有联系人 if (!peopleCount) { contactsList.errorMessage = @"没有任何联系人"; return contactsList; }; NSMutableArray *contactsListArrayM = [NSMutableArray array]; for (NSInteger index = 0; index < peopleCount; index ++) { JYContactsPersonModel *personModel = [[JYContactsPersonModel alloc]init]; NSMutableArray *phonesArrayM = [NSMutableArray array]; //姓名 ABRecordRef person = CFArrayGetValueAtIndex(allPeople, index); NSString *firtName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty)); //联系人名字 NSString *name = [NSString stringWithFormat:@"%@%@",firtName,lastName]; personModel.name = name; //获取联系人电话 (一个联系人可能存在多个电话) ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); CFIndex phoneCount = ABMultiValueGetCount(phones); for (NSInteger index = 0; index < phoneCount; index ++){ // NSString * phoneLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phones, index)); NSString *phoneValue = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phones, index)); [phonesArrayM addObject:phoneValue]; } NSArray *phonesNumber = [NSArray arrayWithArray:phonesArrayM]; personModel.phoneNumbers = phonesNumber; [contactsListArrayM addObject:personModel]; CFRelease(phones); } CFRelease(adressBook); CFRelease(allPeople); //C语言部分需要手动释放内存 contactsList.contactsList = [NSArray arrayWithArray:contactsListArrayM]; return contactsList; }
相关文章推荐
- iOS6.0下获取通讯录用户列表
- iOS6.0下获取通讯录用户列表
- iOS6.0下获取通讯录用户列表
- iOS6.0下获取通讯录用户列表
- iOS实现封装一个获取通讯录的工具类详解
- iOS 获取通讯录以及调用系统通讯录UI
- ios中获取当前手机通讯录信息一、在工程中添加AddressBook.framework和AddressBookUI.framework
- iOS调用系统的通讯录界面获取用户信息
- React Native之获取通讯录信息并实现类通讯录列表(ios android)
- ios 私有api 获取 设备内 bundleid 用户app列表
- asp 实现同一帐号,防止多人同时登录、获取在线列表、实现登录日志(可用户统计在线时长),适合用户访问量大的系统
- 实现用PHP程序登录163邮箱并取得当前用户的通讯录列表
- Windows Phone 7 获取用户通讯录和日程安排信息 下
- Python:获取新浪微博用户的收听列表和粉丝列表
- 获取普通用户 iOS 设备上的 Crash Log 的方法
- 苹果称iOS应用访问通讯录需获用户授权
- 初学者对通讯录软件开发的整体把握与分块实现----显示用户列表
- Windows Phone 7 获取用户通讯录和日程安排信息
- C#获取指定数据库服务器下某用户可访问的数据库列表
- 新浪微博接口,获取用户粉丝列表