Objective c 地址簿隐私设置未强制执行
我正在做一些工作,让一个应用程序符合iOS 8中的新隐私设置。我已经圆满完成了摄像头访问的要求,现在我来看看这个应用程序是如何访问地址簿的。我不熟悉使用通讯录API,所以这些问题可能有明显的答案 与摄像头访问一样,我认为访问联系人的行为与授予应用程序的隐私设置的状态类似。问题是,到目前为止,无论authorizationStatus的值是-kABAuthorizationStatusNotDetermined还是kABAuthorizationStatusDenied-访问总是被允许的 此外,当状态为kABAuthorizationStatusNotDetermined时,“确定/不允许”对话框永远不会向用户显示(我已擦除手机并重新安装应用程序以确认)。此外,该应用程序从未在隐私设置下显示。我认为这是因为状态始终是KABARGorizationStatusNotDetermined 开始访问联系人的代码如下所示。显示控制器(只读),可以获取联系人信息。未显示委托代码Objective c 地址簿隐私设置未强制执行,objective-c,ios8,addressbook,Objective C,Ios8,Addressbook,我正在做一些工作,让一个应用程序符合iOS 8中的新隐私设置。我已经圆满完成了摄像头访问的要求,现在我来看看这个应用程序是如何访问地址簿的。我不熟悉使用通讯录API,所以这些问题可能有明显的答案 与摄像头访问一样,我认为访问联系人的行为与授予应用程序的隐私设置的状态类似。问题是,到目前为止,无论authorizationStatus的值是-kABAuthorizationStatusNotDetermined还是kABAuthorizationStatusDenied-访问总是被允许的 此外,当
// Debug - Value is always denied or not determined.
ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
// Existing code since iOS 7 - always works despite status.
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
[self presentViewController:picker animated:YES completion:nil];
一切似乎都在运转,这很好,但我想知道我做错了什么
iPhone6,
iOS 8.0.2,
Xcode 6
谢谢 从我在处理更新代码库以正确处理iOS 8中的新隐私设置时发现(我可能是错的),这些设置在各个功能中没有得到统一的遵守。例如,如果不更改位置的地址隐私设置,则无法访问CLLocationManager。根据应用程序的不同,用户可能会觉得这好像什么都没有发生或出现错误消息。但是,如果没有对通讯簿隐私设置进行此类更改,则始终授予访问权限
在偶然发现苹果发布的一些非常有用的示例代码后,我发现了自己的错误。下面是我添加/修改的代码,以便在我使用的应用程序中正确遵守隐私设置。当我找到代码示例的链接时,我会发布它
-(void) presentAddressBookPicker {
switch (ABAddressBookGetAuthorizationStatus()) {
case kABAuthorizationStatusAuthorized:
[self accessGrantedForAddressBook];
break;
case kABAuthorizationStatusNotDetermined:
[self requestAccessToAddressBook];
break;
case kABAuthorizationStatusRestricted:
case kABAuthorizationStatusDenied:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
message:@"Unable to access address book"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
break;
default:
// Unlikely but log it anyway.
DLog(@"Unknown address book status.");
break;
}
}
-(void) accessGrantedForAddressBook {
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
[self presentViewController:picker animated:YES completion:nil];
}
-(void) requestAccessToAddressBook {
__weak MyWebViewController* weakSelf = self;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf accessGrantedForAddressBook];
});
}
CFRelease(addressBook);
});
}
您应该尝试的一件事是设置->常规->重置->隐私和位置。重新安装应用程序实际上不会重置权限。我没有注意到该选项。请不要让我擦除手机,谢谢。经过一些测试后,iOS 7(在iPhone 5、iOS 7.1上测试)尊重隐私设置。iOS8(8.0.2,8.1)似乎不尊重这些设置。