地址簿隐私设置未强制执行

有钱人

我正在做一些工作,以使一个应用程序与iOS 8中的新隐私设置保持一致。我已经令人满意地满足了相机访问的要求,现在,我来看看该应用程序如何访问通讯录。我是接触地址簿API的新手,所以这些问题可能有明显的答案。

与使用摄像头访问一样,我认为访问联系人在授予该应用程序的隐私设置状态方面将具有相似的行为。到目前为止,无论ABAuthorizationStatus的值是-kABAuthorizationStatusNotDetermined还是kABAuthorizationStatusDenied,始终是允许的。

另外,当状态为kABAuthorizationStatusNotDetermined时,永远不会向用户显示“确定/不允许”对话框(我已经擦除了手机并重新安装了该应用程序以进行确认)。此外,该应用程序永远不会在隐私设置下显示。我认为这是因为状态始终为kABAuthorizationStatusNotDetermined。

下面是启动访问联系人的代码。显示控制器(只读),可以获取联系人的信息。代表代码未显示。

// 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];

一切似乎都很好,但我想做的是对的,如果有的话,我做错了。

iPhone 6,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);
    });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

地址簿隐私设置未强制执行

来自分类Dev

Skype IM隐私设置

来自分类Dev

EF Core Concurrency未强制执行

来自分类Dev

Java接口未强制执行

来自分类Dev

隐私设置的数据库架构

来自分类Dev

Ubuntu 13.04中的极端隐私设置

来自分类Dev

通过Facebook API以隐私设置发布

来自分类Dev

Ubuntu 13.04中的极端隐私设置

来自分类Dev

PKPaymentRequest不强制执行帐单地址的电话要求

来自分类Dev

应用程序未显示在MacBook的摄像头和麦克风隐私设置中

来自分类Dev

为模型字段定义的选择未强制执行?

来自分类Dev

对未提交的数据强制执行检查约束

来自分类Dev

对未提交的数据强制执行检查约束

来自分类Dev

__name__上的抽象属性未强制执行

来自分类Dev

未强制执行字符串文字类型参数

来自分类Dev

如何使接口强制执行没有设置程序的实现?

来自分类Dev

MATLAB:立即设置和强制执行轴属性

来自分类Dev

Kotlin强制执行由特定类设置的属性的值

来自分类Dev

强制执行未知工作的线程在设置的时间后停止

来自分类Dev

如何弹出“在隐私设置中启用访问权限”视图

来自分类Dev

iOS:直接向用户发送健康隐私设置

来自分类Dev

通过Facebook API发布具有隐私设置的信息

来自分类Dev

我如何获取刚刚上传的图片的隐私设置?

来自分类Dev

Windows 10 Creators Update-查看设备的隐私设置

来自分类Dev

Windows 10 - 默认用户隐私设置

来自分类Dev

是否可以查询 Windows 10 的相机隐私设置?

来自分类Dev

通过无线使用Ubuntu 12.04和BT Home Hub强制执行静态本地IP地址

来自分类Dev

python日志记录:记录器setLevel()是否未强制执行?

来自分类Dev

Websphere:未强制执行web.xml中的安全性约束

Related 相关文章

热门标签

归档