webentwicklung-frage-antwort-db.com.de

Popup fragt nicht nach der Erlaubnis, auf die Kamera in iOS 12 zuzugreifen

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

3
Jatin Patel

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)
}
1
Boris Nikolić