应用不要求联系访问权限在iOS 6
问题描述:
我使用下面的代码,我的应用程序不要求在iOS 6,同时允许在iOS 7及以上的版本,它要求联系许可访问。在iOS 6上,它也不会在隐私设置中显示应用。我读过一些其他的线程,但没有找到任何解决方案。应用不要求联系访问权限在iOS 6
App crashed in iOS 6 when user changes Contacts access permissions
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
__block CDNDeviceContact *controller = self;
// Request authorization to Address Book
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBookRef,
^(bool granted, CFErrorRef error) {
if (granted)
[controller loadContacts];
else [controller doAlertForContact];
});
} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
// The user has previously given access, add the contact
[self loadContacts];
} else {
[controller doAlertForContact];
}
if (addressBookRef) CFRelease(addressBookRef);
}
答
你不需要SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
,你也不需要创建一个ABAddressBookRef
。
对于我来说,这就像一个魅力的作品:
if (ABAddressBookGetAuthorizationStatus) {
switch (ABAddressBookGetAuthorizationStatus()) {
case kABAuthorizationStatusNotDetermined:{
ABAddressBookRequestAccessWithCompletion(self.addressBook, ^(bool granted, CFErrorRef error) {
self.addContactButton.enabled = granted;
if (granted) {
// granted
} else {
// User denied access
}});
} break;
case kABAuthorizationStatusDenied: break;
case kABAuthorizationStatusAuthorized: break;
default: break;
}
}
答
如果用户先前已经提出该请求得到许可,也不会再次显示。根据documentation,
用户只在第一次请求访问时被要求权限。稍后的调用使用用户授予的权限。
如果在模拟器中测试,我建议你去iOS模拟器 - >重置内容和设置,以便你能够模拟事件。
它来自self.addressbook而不创建addressBookRef。 –