iOS 集成联系人功能(基于Contacts)
2019-07-02 本文已影响0人
senpaiLi
我有一个习惯,每封装一个功能都要写一篇文档。
但是越来越觉得,详细文档并没有什么太大的价值。
但我这次还是忍不住写了。。。
1.配置联系人权限 info.plist
iOS 9.0以后配置如下:
唯一要注意的点是,这些权限的描述文字要清楚的告诉用户(审核人员),APP申请这些权限是做什么的,申请的必要性。不然很有可能被拒,那就悲剧了。
2.获取当前访问联系人的权限状态
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
返回值如下:
CNAuthorizationStatusNotDetermined : 未确认
CNAuthorizationStatusRestricted :被限制的状态,即无权限
CNAuthorizationStatusDenied :禁止访问
CNAuthorizationStatusAuthorized :已授权访问
如果是“未确认”状态,我们可以主动请求;或者等到我们使用Contacts API时,系统帮我们自动请求。
但是我比较建议主动请求,因为方便管理当前权限状态。
CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError* _Nullable error) {
if (granted) {
if (complete) {
complete(true);
}
}else {
if (complete) {
complete(false);
}
}
}];
3.iOS通讯录API 介绍:
1.png 2.pngapi是最简单的,看文档就可以,需要注意几点:
1.上面的数据是api返回的联系人类型,下面是我自己用来展示的字符串。
对通讯录增删改查时,注意一下type的字段转换
@[@"_$!<Home>!$_",@"_$!<Work>!$_",@"iPhone",@"_$!<Mobile>!$_",@"_$!<Main>!$_",@"_$!<HomeFAX>!$_",@"_$!<WorkFAX>!$_",@"_$!<OtherFAX>!$_",@"_$!<Pager>!$_",@"_$!<Other>!$_"]
@[@"家庭",@"工作",@"iPhone",@"手机",@"主要",@"家庭传真",@"工作传真",@"其他传真",@"传呼机",@"其他"]
2.通讯录的名称,来源有四个:
familyName、givenName、companyName还有"手机号"
权重如下:
familyName+givenName > companyName > "用户手机号"
3.identifier 可以作为唯一标志符,用来对已经存在的联系人信息进行增删改查。
4.如果要对现有的联系人使用ContactsUI进行编辑,那么在获取CNContact对象时,keysToFetch需要包含CNContactViewController.descriptorForRequiredKeys
不要问为什么,因为我也不知道
官方解释