美文网首页
iOS-授权获取通讯录

iOS-授权获取通讯录

作者: FZ_loveCarrot | 来源:发表于2017-03-03 15:43 被阅读2008次

最近项目需求:需要获取用户的通讯录,3个或3个以上的用户同时存在同一个电话号码时,后台就发送短信给这几个用户。推荐成为好友。

这里我只使用了一种方式,以下是介绍具体怎么使用:

1.iOS10 需要在Info.plist配置NSContactsUsageDescription

右键info.plist文件 -> open As -> Source code -> 添加以上这段代码

2.在AppDelegate.m中,引入头文件

#import <Contacts/Contacts.h>

3.接下来授权使用用户的通讯录

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{

//请求获取通讯录授权

[self requestAuthorizationForAddressBook];//4.授权状态

}

4.授权状态(成功/失败)

- (void)requestAuthorizationForAddressBook {

CNAuthorizationStatus authorizationStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];

if(authorizationStatus ==CNAuthorizationStatusNotDetermined) {

CNContactStore*contactStore = [[CNContactStore alloc]init];

[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted,NSError*_Nullable error) {

if(granted) {

NSLog(@"通讯录获取授权成功==");

[self getContact]; //5.获取用户通讯录

}else{

NSLog(@"授权失败, error=%@", error);

}

}];

}

}

5.获取通讯录

- (void)getContact{

CNAuthorizationStatus authorizationStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];

if(authorizationStatus ==CNAuthorizationStatusAuthorized) {

// 获取指定的字段,并不是要获取所有字段,需要指定具体的字段

NSArray*keysToFetch =@[CNContactGivenNameKey,CNContactFamilyNameKey,CNContactPhoneNumbersKey];

CNContactFetchRequest*fetchRequest = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];

CNContactStore*contactStore = [[CNContactStore alloc]init];

//创建一个保存通讯录的数组

NSMutableArray *contactArr = [NSMutableArray array];

[contactStore enumerateContactsWithFetchRequest:fetchRequest error:nil usingBlock:^(CNContact*_Nonnull contact,BOOL*_Nonnull stop) {

NSLog(@"-------------------------------------------------------");

NSString*givenName = contact.givenName;

NSString*familyName = contact.familyName;

NSLog(@"givenName=%@, familyName=%@", givenName, familyName);

NSArray*phoneNumbers = contact.phoneNumbers;

for(CNLabeledValue*labelValue in phoneNumbers) {

NSString*label = labelValue.label;

CNPhoneNumber*phoneNumber = labelValue.value;

NSDictionary*contact =@{@"phone":phoneNumber.stringValue,@"user":FORMAT(@"%@%@",familyName,givenName)};

[contactArr addObject:contact];

NSLog(@"label=%@, phone=%@", label, phoneNumber.stringValue);

}

//*stop = YES;// 停止循环,相当于break;

}];

_contactArr= contactArr;

NSError*error;

NSData*jsonData = [NSJSONSerialization dataWithJSONObject:contactArr options:NSJSONWritingPrettyPrinted error:&error];//此处data参数是我上面提到的key为"data"的数组

NSString*jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];

_jsonString= jsonString;

NSLog(@"jsonString====%@",jsonString);

[self postContactTo]; //6.上传通讯录

}else{

NSLog(@"====通讯录没有授权====");

}

}

6.上传通讯录到后台(这一步就看各自公司的需求了,这里简单说一下我们公司的需求)

我司要求以json的格式上传机械id、手机号和昵称。

顺便说一下现在苹果是不允许获取udid的了。但是有位大神自己封装了一个工具类是可以模仿udid的获取的。不管你删除再重新下载同一个app。

都不会改变。分享一下地址吧:OpenUDID

希望对大家有用。

相关文章

  • iOS-授权获取通讯录

    最近项目需求:需要获取用户的通讯录,3个或3个以上的用户同时存在同一个电话号码时,后台就发送短信给这几个用户。推荐...

  • swift 实现通讯录

    第一步:获取授权,在viewDidLoad 里面写一下的代码 //新通讯录获得授权方法 //用新的方法获取通讯录信...

  • iOS通讯录的获取(AddressBook)

    1.引入头文件 #import 2.启动项目时判断是否授权获取通讯录 2.1获取授权状态 ABAuthorizat...

  • 获取通讯录

    1.#import // 授权获取通讯录 2.添加代码在- (B...

  • iOS获取联系人信息

    iOS 9.0之前 iOS 9.0之后(两种方式) 一:通过代码就可以获取所有通讯录信息(需要用户授权) 获取用户...

  • IOS 获取手机通讯录

    //获取通讯录 -(void)GetUserAddressBook { //获取通讯录权限 ABAddressBo...

  • 系统弹框内容设置

    在使用定位、获取用户通讯录时候,需要用户授权。手机会弹出授权框,那我们想定制弹框的内容怎么办呢。 infoPlis...

  • 在 android 系统上通过蓝牙获取通讯录

    在 android 系统上通过蓝牙获取通讯录 *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布...

  • iOS 获取通讯录的联系人

    两种方式第一种:需要用户授权,通过代码就可以获取所有通讯录信息第二种:iOS 9.0 以后,可以无需用户授权,直接...

  • 【AddressBook】ABAddressBook - 通讯录

    旧版的通讯录 简单介绍 授权 创建通讯录 通讯录操作 修改信息 新增 移除 通知 其他 1

网友评论

      本文标题:iOS-授权获取通讯录

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