自上周一以来我一直被困在一个小虫身上,所以我现在正在寻求帮助.. 联系人和Micriohpone请求访问在iOS 9上不起作用。我使用这段代码来请求访问联系人:
let contactsStore = CNContactStore()
func requestAccess(completionHandler: @escaping (Permission) -> ()) {
self.contactsStore.requestAccess(for: .contacts, completionHandler: { (granted, error) in
if granted {
completionHandler(.granted)
} else {
completionHandler(.denied)
}
})
}
这个函数被调用,没有问题,问题是它总是返回.denied和错误设置"访问被拒绝",即使没有向用户显示警报。麦克风一样。
密钥'隐私 - 联系人使用说明'存在于我的Info.plist
中编辑: 我也知道,当用户拒绝使用时,它不再显示,但另一个问题是没有"切换"在应用程序的设置部分。我试图恢复设备(在模拟器上工作,因为我没有真正的iOS 9设备),但仍然是相同的行为。
此代码在iOS 10和iOS 11上运行完整。但在iOS 9上没有机会
如果你能帮助我解决这个问题,那就太棒了。
谢谢!
答案 0 :(得分:0)
我用最简单的方式在9.3上尝试了这个,我得到了一个提示:
import UIKit
import Contacts
class ViewController: UIViewController {
let contactsStore = CNContactStore()
override func viewDidAppear(_ animated: Bool) {
DispatchQueue.main.async {
self.requestAccess(completionHandler: { (permission) in
print("The user said \(permission)")
})
}
}
func requestAccess(completionHandler: @escaping (Permission) -> ()) {
self.contactsStore.requestAccess(for: .contacts, completionHandler: { (granted, error) in
if granted {
completionHandler(.granted)
} else {
completionHandler(.denied)
}
})
}
}
enum Permission {
case granted
case denied
}
这很好用。我认为问题是你已经否认了它。
唯一的解决方案是:
对于最终用户,我看到如果用户看到“已拒绝”,则会提示用户更改设置。
你可以这样做:
self.requestAccess(completionHandler: { (permission) in
print("The user said \(permission)")
if ( permission == .denied ) {
let urlStr = UIApplicationOpenSettingsURLString
if let url = URL(string:urlStr) {
UIApplication.shared.openURL(url)
}
}
})