`
阿尔萨斯
  • 浏览: 4108641 次
社区版块
存档分类
最新评论

iOS6 中如何获得通讯录访问权限

 
阅读更多

在iOS 6中,以前工作正常的访问通讯录的iPhone程序可能会出错,现象是程序启动时不提醒用户是否允许程序访问通讯录,同时在“设置->隐私->通讯录”中看不到你的程序。另外,对通讯录进行操作的代码会报类似于以下消息的错误:


Could not compile statement for query (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties):
SELECT ROWID, Name, ExternalIdentifier, Type, ConstraintsPath, ExternalModificationTag, ExternalSyncTag, AccountID, Enabled, SyncData, MeIdentifier, Capabilities FROM ABStore WHERE Enabled = ?;

其原因是iOS 6加强了通讯录访问控制,要求开发人员显式声明需要访问通讯录,方法是调用ABAddressBookRequestAccessWithCompletion

方法,具体参见官方文档:

http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/index.html


下面是对应的样例代码,一般来讲需要将这段代码放置在程序启动部分,在程序启动过程中提示用户本程序需要访问设备上的通讯录:

ABAddressBookRef addressBook = ABAddressBookCreate();
    
        
        __block BOOL accessGranted = NO;
    if (ABAddressBookRequestAccessWithCompletion != NULL) {
        
        // we're on iOS 6
        NSLog(@"on iOS 6 or later, trying to grant access permission");
        
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            accessGranted = granted;
            dispatch_semaphore_signal(sema);
        });
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
        dispatch_release(sema);
    }
    else { // we're on iOS 5 or older
        
        NSLog(@"on iOS 5 or older, it is OK");
        accessGranted = YES;
    }
    
    if (accessGranted) {
        
        NSLog(@"we got the access right");
    }
    


分享到:
评论

相关推荐

    ios-iOS10访问通讯录.zip

    只需一个简单的block回调即可完成调用通讯录 包括适配iOS9之前的版本 以及 是否开通权限的判断

    iOS 授权工具类

    此包是针对iOS中常见的授权权限进行的封装,具体有检测是否开启相机权限、检测是否开启相册权限、检测是否开启访问通讯录权限、检测是否开启访问麦克风权限、 检测是否开启访问麦克风权限等功能,提示框为iOS 自带的...

    ios-WMZPermission.zip

    App需要您的同意,才能访问通讯录 NSPhotoLibraryUsageDescription App需要您的同意,才能访问相册 NSCameraUsageDescription App需要您的同意,才能访问相机 NSMicrophoneUsageDescription App需要您的...

    IOS10 配置权限详细介绍

    主要介绍了IOS10 配置权限详细介绍的相关资料,访问相机、相册、麦克风、通讯录等等权限,都需要进行相关的配置,不然会直接crash,需要的朋友可以参考下

    swift-ios常用工具集

    常用工具集(各种访问权限判断工具类ios 对系统相册、相机、麦克风、通讯录、蓝牙共享、日历、提醒时间授权的简易工具、plist文件存储读取工具类、用户密码存储(SSKeyChain)工具类)

    小细节大作为:提高iOS访问权限通过率有这几个办法

    这里,Brenden讲述了原生应用Cluster是如何提高iOS访问权限通过率的。Cluster是Mulligan设计的第一个原生应用。他过去的经验多集中于网页版应用的设计。事实证明,网页应用和手机原生应用在与用户互动方面有极大不同...

    nativescript-contacts-lite:这个nativescript-contacts-lite插件可提供对iOS和Android联系人目录的快速只读访问

    这个nativescript-contacts-lite插件提供了对iOS和Android联系人目录的非常快速的访问权限(但是,这都是相对的)。 通过限制desiredFields的结果集范围,可以在几百毫秒内获得一个包含联系人目录相关数据的JSON对象...

    macOS Server 5.9 App Store 原版下载压宿

    • 具有并发读/写访问权限的块级别 SAN 文件共享 • Xsan 宗卷托管和配置 • 宗卷管理、存储池、分段存储和宗卷映射 • 实时监控、图形显示和事件通知 • 元数据控制器故障转移和文件系统日志记录 Server App...

    更新了Xcode8 及 iOS10遇到的问题小结

    更新了Xcode8 以及 iOS10,App访问用户的相机、相册、麦克风、通讯录的权限都需要重新进行相关的配置,不然在Xcode8中打开编译的话会直接crash.这篇文章主要介绍了更新了Xcode8 及 iOS10遇到的问题小结的相关资料,...

    superfish-client:超级鱼的iPhone客户端

    超级鱼客户端 超级鱼的iPhone客户端 该存储库中包含运行Superfish的iPhone应用程序。 Superfish(工作名称)是一款结合短信和Github的Hubot的应用程序。... 通讯录访问权限可将您的联系人与当前使用该应用程序的联

    常用工具集.zip

    常用工具集(各种访问权限判断工具类ios 对系统相册、相机、麦克风、通讯录、蓝牙共享、日历、提醒时间授权的简易工具、plist文件存储读取工具类、用户密码存储(SSKeyChain)工具类) 软件开发设计:PHP、QT、应用...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

Global site tag (gtag.js) - Google Analytics