IOS开发笔记 IOS如何访问通讯录

简介:     IOS开发笔记  IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的。 幸好ios6.0 以后给了个权限控制。当打开app的时候你可以选择拒绝。

    IOS开发笔记  IOS如何访问通讯录

其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的。
幸好ios6.0 以后给了个权限控制。当打开app的时候你可以选择拒绝。


实现方法:

[plain]  view plain copy
  1. //读取所有联系人  
  2.   
  3. -(void)ReadAllPeoples  
  4.   
  5. {  
  6.       
  7.     //取得本地通信录名柄  
  8.       
  9.     ABAddressBookRef tmpAddressBook = nil;  
  10.       
  11.     if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {  
  12.         tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL);  
  13.         dispatch_semaphore_t sema=dispatch_semaphore_create(0);  
  14.         ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){  
  15.             dispatch_semaphore_signal(sema);  
  16.         });  
  17.       
  18.     dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  
  19.     dispatch_release(sema);  
  20.     }  
  21.     else  
  22.     {  
  23.         tmpAddressBook =ABAddressBookCreate();  
  24.     }  
  25.     //取得本地所有联系人记录  
  26.       
  27.       
  28.     if (tmpAddressBook==nil) {  
  29.         return ;  
  30.     };  
  31.     NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);  
  32.       
  33.     for(id tmpPerson in tmpPeoples)  
  34.           
  35.     {  
  36.           
  37.         //获取的联系人单一属性:First name  
  38.           
  39.         NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);  
  40.           
  41.         NSLog(@"First name:%@", tmpFirstName);  
  42.           
  43.         [tmpFirstName release];  
  44.           
  45.         //获取的联系人单一属性:Last name  
  46.           
  47.         NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);  
  48.           
  49.         NSLog(@"Last name:%@", tmpLastName);  
  50.           
  51.         [tmpLastName release];  
  52.           
  53.         //获取的联系人单一属性:Nickname  
  54.           
  55.         NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty);  
  56.           
  57.         NSLog(@"Nickname:%@", tmpNickname);  
  58.           
  59.         [tmpNickname release];  
  60.           
  61.         //获取的联系人单一属性:Company name  
  62.           
  63.         NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);  
  64.           
  65.         NSLog(@"Company name:%@", tmpCompanyname);  
  66.           
  67.         [tmpCompanyname release];  
  68.           
  69.         //获取的联系人单一属性:Job Title  
  70.           
  71.         NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);  
  72.           
  73.         NSLog(@"Job Title:%@", tmpJobTitle);  
  74.           
  75.         [tmpJobTitle release];  
  76.           
  77.         //获取的联系人单一属性:Department name  
  78.           
  79.         NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);  
  80.           
  81.         NSLog(@"Department name:%@", tmpDepartmentName);  
  82.           
  83.         [tmpDepartmentName release];  
  84.           
  85.         //获取的联系人单一属性:Email(s)  
  86.           
  87.         ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);  
  88.           
  89.         for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)  
  90.               
  91.         {  
  92.               
  93.             NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);  
  94.               
  95.             NSLog(@"Emails%d:%@", j, tmpEmailIndex);  
  96.               
  97.             [tmpEmailIndex release];  
  98.               
  99.         }  
  100.           
  101.         CFRelease(tmpEmails);  
  102.           
  103.         //获取的联系人单一属性:Birthday  
  104.           
  105.         NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);  
  106.           
  107.         NSLog(@"Birthday:%@", tmpBirthday);  
  108.           
  109.         [tmpBirthday release];  
  110.           
  111.         //获取的联系人单一属性:Note  
  112.           
  113.         NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);  
  114.           
  115.         NSLog(@"Note:%@", tmpNote);  
  116.           
  117.         [tmpNote release];  
  118.           
  119.         //获取的联系人单一属性:Generic phone number  
  120.           
  121.         ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);  
  122.           
  123.         for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)  
  124.               
  125.         {  
  126.               
  127.             NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);  
  128.               
  129.             NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);  
  130.               
  131.             [tmpPhoneIndex release];  
  132.               
  133.         }  
  134.           
  135.         CFRelease(tmpPhones);  
  136.           
  137.     }  
  138.       
  139.     //释放内存   
  140.       
  141.     [tmpPeoples release];  
  142.       
  143.     CFRelease(tmpAddressBook);  
  144.       
  145. }  

解释下代码:由于ios6.0系统的升级,对客户隐私有了一个较大的提示。
以前
[plain]  view plain copy
  1. tmpAddressBook =ABAddressBookCreate();这样就可以读取了,但是现在要做一个判断了。可以具体看看代码。  
[plain]  view plain copy
  1. 把通讯录取出来放在一个array里面。这样你就可以对数组进行你的要求了。  
[plain]  view plain copy
  1.   

备注:

苹果中文语言貌似有点问题。ios6.0  会提示你的app访问日历。。。。
然后网上查了下资料。可以参照微信访问通讯录的形式,给客户一个提示
他是在plist中  添加一项 在XCode里显示的是Privacy - Contacts Usage Description。后面的string就是你要想提示的文字内容
Privacy - Location Usage Description”。这个是定位位置提示。其他类似。

备注二:

分享一个测试经验,也是从网上看到的。
一把苹果的app访问位置或者通讯录,第一次都会有一个提示让你选择。
但是第二次及以后,即时删掉,也不会再出现了。
如果想再次出现,可以  设置-通用-还原-还原位置与隐私
这样你再次点击你的app就会再次出现了。


相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
88 3
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
39 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
93 2
|
3月前
|
API 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
iOS 开发高效率工具包:10 大必备工具
48 1
|
3月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
54 1
|
8天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
11 0
|
23天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
1月前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
12 0
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
196 2