美文网首页
iOS 集成联系人功能(基于Contacts)

iOS 集成联系人功能(基于Contacts)

作者: senpaiLi | 来源:发表于2019-07-02 18:44 被阅读0次

    我有一个习惯,每封装一个功能都要写一篇文档。
    但是越来越觉得,详细文档并没有什么太大的价值。

    但我这次还是忍不住写了。。。


    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

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


    官方解释

    相关文章

      网友评论

          本文标题:iOS 集成联系人功能(基于Contacts)

          本文链接:https://www.haomeiwen.com/subject/owjccctx.html