美文网首页
ios 9.0后,通讯录读取

ios 9.0后,通讯录读取

作者: Kevin777vip | 来源:发表于2018-01-10 10:48 被阅读0次

    ios 9.0后,新出了通讯录读取的api,CNContactStore,介绍下简单的使用

    首先导入模块

    @import Contacts;
    
    

    请求权限

    - (void)requestContactAuthorization {
        CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
        CNContactStore *contactStore = [[CNContactStore alloc]init];
        if (status == CNAuthorizationStatusAuthorized) {
            [self loadContact];//读取操作
        }else{
            [contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
            //可以设置成功后再执行下一步操作
            if (granted){
                    [self loadContact];//读取操作
                }
            }];
        }
    }
    

    读取需要使用CNContactFetchRequest进行请求

    - (void)loadContact{
        CNContactStore *contactStore = [[CNContactStore alloc]init];
        NSLog(@"!!!!!!!!start date:%f",[[NSDate date] timeIntervalSince1970]*1000.0f);
    
        NSArray *keys = @[CNContactGivenNameKey,CNContactFamilyNameKey,CNContactPhoneNumbersKey];
        CNContactFetchRequest *request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keys];
        __block NSInteger count = 0;
        [contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
            count++;
            NSString *lastname = contact.familyName;
            NSString *firstname = contact.givenName;
            NSLog(@"%@ %@", lastname, firstname);
            
            // 2.获取联系人的电话号码
            NSArray *phoneNums = contact.phoneNumbers;
            for (CNLabeledValue *labeledValue in phoneNums) {
                // 2.1.获取电话号码的KEY
                NSString *phoneLabel = labeledValue.label;
                
                // 2.2.获取电话号码
                CNPhoneNumber *phoneNumer = labeledValue.value;
                NSString *phoneValue = phoneNumer.stringValue;
                
                NSLog(@"%@ %@", phoneLabel, phoneValue);
            }
            NSLog(@"!!!!!!!num:%ld end date:%f",(long)count,[[NSDate date] timeIntervalSince1970]*1000.0f);
            
        }];
        
    }
    

    取到的联系人对象中有各种属性

    NS_CLASS_AVAILABLE(10_11, 9_0)
    @interface CNContact : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
    
    /*! The identifier is unique among contacts on the device. It can be saved and used for fetching contacts next application launch. */
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *identifier;
    
    @property (readonly, NS_NONATOMIC_IOSONLY) CNContactType contactType;
    
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *namePrefix;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *givenName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *middleName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *familyName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *previousFamilyName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *nameSuffix;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *nickname;
    
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *organizationName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *departmentName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *jobTitle;
    
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *phoneticGivenName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *phoneticMiddleName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *phoneticFamilyName;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *phoneticOrganizationName NS_AVAILABLE(10_12, 10_0);
    
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *note;
    
    @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSData *imageData;
    @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSData *thumbnailImageData;
    @property (readonly, NS_NONATOMIC_IOSONLY) BOOL imageDataAvailable NS_AVAILABLE(10_12, 9_0);
    
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<CNPhoneNumber*>*>             *phoneNumbers;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<NSString*>*>                  *emailAddresses;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<CNPostalAddress*>*>           *postalAddresses;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<NSString*>*>                  *urlAddresses;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<CNContactRelation*>*>         *contactRelations;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<CNSocialProfile*>*>           *socialProfiles;
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<CNInstantMessageAddress*>*>   *instantMessageAddresses;
    
    /*! The Gregorian birthday. */
    @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSDateComponents *birthday;
    
    /*! The alternate birthday (Lunisolar). */
    @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSDateComponents *nonGregorianBirthday;
    
    /*! Other Gregorian dates (anniversaries, etc). */
    @property (readonly, copy, NS_NONATOMIC_IOSONLY) NSArray<CNLabeledValue<NSDateComponents*>*> *dates;
    
    
    // Key Availability
    

    其中很多是数组,可以在手机上试试,可以添加很多个,比如dates,会有纪念日等

    切记是

    NS_CLASS_AVAILABLE(10_11, 9_0)
    

    编辑人:kevin
    转发请注明

    相关文章

      网友评论

          本文标题:ios 9.0后,通讯录读取

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