首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在设置中授权后ABAddressBookGetAuthorizationStatus被拒绝

在设置中授权后ABAddressBookGetAuthorizationStatus被拒绝
EN

Stack Overflow用户
提问于 2015-09-27 10:36:02
回答 1查看 1.1K关注 0票数 2

我正在尝试更优雅地处理拒绝的通讯录权限,但我发现了一个无法正常工作的方案。我运行的是Xcode7和Swift 2.0。

首先,我解释为什么权限与应用程序体验相关,然后当他们决定应该允许它时,他们可以点击一个按钮进行呼叫:

代码语言:javascript
运行
复制
ABAddressBookRequestAccessWithCompletion(nil) {
    (granted:Bool, err:CFError!) in
    if(granted){
        // Get contacts
    }
}

如果他们拒绝iOS权限对话框,我将在检查ABAddressBookGetAuthorizationStatus()后使用以下代码提示他们

代码语言:javascript
运行
复制
func evaluateContactAccess(requestCompleted: (granted: Bool) -> ()) {
    let status = ABAddressBookGetAuthorizationStatus();
    switch status {
    case .Authorized:
        requestCompleted(granted: true);
    case .NotDetermined:
        ABAddressBookRequestAccessWithCompletion(nil) {
            (granted:Bool, err:CFError!) in
                requestCompleted(granted: granted);
        };
    case .Restricted, .Denied:
        let alertController = UIAlertController(
            title: "Contact Access Disabled",
            message: "Message about access here...",
            preferredStyle: .Alert)

        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
        alertController.addAction(cancelAction)

        let openAction = UIAlertAction(title: "Open Settings", style: .Default) { (action) in

            if let url = NSURL(string:UIApplicationOpenSettingsURLString) {

                UIApplication.sharedApplication().openURL(url)
            }
        }
        alertController.addAction(openAction)

        self.presentViewController(alertController, animated: true, completion: nil);

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkAndProceed", name: UIApplicationWillEnterForegroundNotification, object: nil)
    }
}

func checkAndProceed() {
    let status = ABAddressBookGetAuthorizationStatus()
    switch status {
    case .Authorized:
        // get contacts
    case .NotDetermined, .Restricted, .Denied:
        // debugger says status = .Denied at this point every time
    }
}

现在,应用程序的iOS设置页面相应地打开,用户有机会授予联系人访问权限。假设他们授予了访问通讯录的权限,然后切换回应用程序--无论我调用ABAddressBookGetAuthorizationStatus()多少次,在应用程序恢复后,它总是返回ABAuthorizationStatus.Denied,就好像它没有检测到用户在应用程序的iOS设置页面中将权限更改为授权一样。

为了以防万一,我向苹果提交了一个bug,但我想知道是否还有其他人有办法让它正常工作。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-09-28 23:28:43

尽管我反复请求,但您没有提供关于您的代码是什么以及如何测试的足够信息,所以在这一点上,我只能猜测。我猜你的测试程序是有缺陷的。在Xcode调试器中运行时,不能测试此功能。如果你解开你的设备并纯粹在设备上测试,你会发现当你从设置返回你的应用程序时,如果你的应用程序再次检查授权状态,它就会获得正确的授权状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32804010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档