联系使用权限请求iphone

我的应用程序被苹果审查小组拒绝。 据他们说,原因是

“17.1:在未获得用户的事先许可的情况下,应用程序无法传输有关用户的数据,并向用户提供有关如何使用数据以及在何处使用数据的信息。具体而言,您的应用程序首先访问用户联系人,

但是,我在我的info.plst使用了**NSContactsUsageDescription**键来指定在我的应用程序中使用联系人的原因。

为了获得许可,我还需要额外做些什么?

您必须询问用户您的应用程序是否可以访问您的地址簿。 此function在iOS 6.0及以上版本中实现。

你可以试试这段代码片段:

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

- viewWillAppear:

 // Asking access of AddressBook // if in iOS 6 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { // Request authorization to Address Book addressBook_ = ABAddressBookCreateWithOptions(NULL, NULL); if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { ABAddressBookRequestAccessWithCompletion(addressBook_, ^(bool granted, CFErrorRef error) { if (granted == NO) { // Show an alert for no contact Access } }); } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { // The user has previously given access, good to go } else { // The user has previously denied access // Send an alert telling user to change privacy setting in settings app } } else // For iOS <= 5 { // just get the contacts directly addressBook_ = ABAddressBookCreate(); } 

在iOS 6中,您需要使用地址簿权限请求iphone来访问它的设备联系人: –

在这里输入图像说明

实现代码的方法就像这个例子:

 ABAddressBookRef addressBook; if ([self isABAddressBookCreateWithOptionsAvailable]) { CFErrorRef error = nil; addressBook = ABAddressBookCreateWithOptions(NULL,&error); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { // callback can occur in background, address book must be accessed on thread it was created on dispatch_async(dispatch_get_main_queue(), ^{ if (error) { } else if (!granted) { } else { // access granted [self GetAddressBook]; } }); }); } else { // iOS 4/5 [self GetAddressBook]; }