gpt4 book ai didi

ios - ABAddressBookGetAuthorizationStatus 在设置中授权后被拒绝

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:11 26 4
gpt4 key购买 nike

我试图更优雅地处理被拒绝的通讯录权限,但我发现了一个无法正常工作的场景。我正在运行 Xcode 7 和 Swift 2.0。

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

ABAddressBookRequestAccessWithCompletion(nil) {
(granted:Bool, err:CFError!) in
if(granted){
// Get contacts
}
}

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

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 设置页面中将权限更改为授权。

为了以防万一,我向 Apple 提交了一个错误,但我想知道是否还有其他人有办法让这个工作正常。

谢谢!

最佳答案

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

关于ios - ABAddressBookGetAuthorizationStatus 在设置中授权后被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32804010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com