联系人和麦克风请求访问权限不适用于 iOS 9
Contacts and Microphone request access does not work on iOS 9
自上周一以来我一直被一个错误所困,所以我现在寻求帮助..
联系人和 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)
}
})
}
这个函数被调用了,没有问题,问题是它总是 return.denied 并且错误设置为 "Access denied",即使没有向用户显示警报。麦克风也一样。
密钥 'Privacy - Contacts Usage Description' 存在于我的 Info.plist
编辑:
我也知道,当用户拒绝一次使用时,它不再显示,但另一个问题是应用程序的设置部分中没有 "switch"。我试图恢复设备(在模拟器上工作,因为我没有真正的 iOS 9 设备),但仍然是相同的行为。
此代码在 iOS 10 和 iOS 11 上运行完美。但在 iOS 9
上没有机会
如果你能帮我解决这个问题那就太好了。
谢谢!
我在 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
}
这很好用。我认为问题是你已经否认了。
唯一的解决方案是:
- 更改 bundle id,这将使您的应用充当不同的应用
- 重置您的 device/simulator(当然,如果有模拟器会更容易)
- 将隐私设置从关闭更改为开启
对于最终用户,我看到 UI 提示用户在看到 "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)
}
}
})
自上周一以来我一直被一个错误所困,所以我现在寻求帮助.. 联系人和 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)
}
})
}
这个函数被调用了,没有问题,问题是它总是 return.denied 并且错误设置为 "Access denied",即使没有向用户显示警报。麦克风也一样。
密钥 'Privacy - Contacts Usage Description' 存在于我的 Info.plist
编辑: 我也知道,当用户拒绝一次使用时,它不再显示,但另一个问题是应用程序的设置部分中没有 "switch"。我试图恢复设备(在模拟器上工作,因为我没有真正的 iOS 9 设备),但仍然是相同的行为。
此代码在 iOS 10 和 iOS 11 上运行完美。但在 iOS 9
上没有机会如果你能帮我解决这个问题那就太好了。
谢谢!
我在 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
}
这很好用。我认为问题是你已经否认了。
唯一的解决方案是:
- 更改 bundle id,这将使您的应用充当不同的应用
- 重置您的 device/simulator(当然,如果有模拟器会更容易)
- 将隐私设置从关闭更改为开启
对于最终用户,我看到 UI 提示用户在看到 "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)
}
}
})