Gemäß dem Apple-Standard müssen wir um Erlaubnis für den Zugriff auf die Benutzerkamera bitten. Ich habe also die Kamera erfolgreich integriert und funktioniert problemlos in iOS 11. Aber derzeit teste ich die Kamerafunktion und stellte fest, dass, wenn der Benutzer einmal den Zugriff auf die Kamera zugelassen hat, die gleiche App auch nach der Neuinstallation (vom App Store) nicht um Erlaubnis fragt ).
meine Frage ist also, ob es sich in iOS 12 um ein verändertes Verhalten handelt, oder wir müssen jedes Mal eine Erlaubnis für die Erlaubnis eingeben, wenn der Benutzer versucht, eine neue App zu installieren.
Vielen Dank
iOS 12.1/Swift 4.2
Jedes Mal, wenn der Benutzer in Ihrer App auf die Kamera-Schaltfläche tippt, rufen Sie diesen Code auf. Es fragt zunächst nach Berechtigungen. Wenn die Einstellungen aus früheren Installationen noch vorhanden sind, wird UIAlertController angezeigt, und der Benutzer kann die Einstellungen-App auf dem Gerät öffnen und die Kameraeinstellungen ändern.
OnCameraOpenButtonTap ()
if UIImagePickerController.isSourceTypeAvailable(.camera) {
checkCameraAccess(isAllowed: {
if $0 {
DispatchQueue.main.async {
self.presentCamera()
}
} else {
DispatchQueue.main.async {
self.presentCameraSettings()
}
}
})
}
func checkCameraAccess(isAllowed: @escaping (Bool) -> Void) {
switch AVCaptureDevice.authorizationStatus(for: .video) {
case .denied:
isAllowed(false)
case .restricted:
isAllowed(false)
case .authorized:
isAllowed(true)
case .notDetermined:
AVCaptureDevice.requestAccess(for: .video) { isAllowed($0) }
}
}
private func presentCamera() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}
private func presentCameraSettings() {
let alert = UIAlertController.init(title: "allowCameraTitle", message: "allowCameraMessage", preferredStyle: .alert)
alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: { (_) in
}))
alert.addAction(UIAlertAction.init(title: "Settings", style: .default, handler: { (_) in
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
}))
present(alert, animated: true)
}