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.png

api是最简单的,看文档就可以,需要注意几点:

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

不要问为什么,因为我也不知道


官方解释
上一篇下一篇

猜你喜欢

热点阅读