web-dev-qa-db-fra.com

Popup ne vient pas pour demander la permission d'accéder à la caméra sous iOS 12

Conformément à la norme Apple, nous devons demander la permission d'accéder à la caméra de l'utilisateur. donc j'ai réussi à intégrer l'appareil photo et cela fonctionne très bien dans iOS 11. Mais actuellement, je teste la fonctionnalité d'appareil photo et j'ai constaté que si un utilisateur autorisait l'accès à la caméra, la même application ne demandera pas la permission même après une nouvelle installation ).

ma question est donc la suivante: est-ce que le comportement a changé dans iOS 12 ou devons-nous configurer la permission demandée à chaque fois que l'utilisateur tente d'installer une nouvelle application?

Merci

3
Jatin Patel

iOS 12.1/Swift 4.2

Chaque fois que l'utilisateur appuie sur le bouton Appareil photo de votre application, vous appelez ce code. Tout d'abord, il demande des autorisations et, si les paramètres sont toujours présents depuis les installations précédentes, UIAlertController apparaît, permettant à l'utilisateur d'ouvrir l'application Paramètres sur le périphérique et de modifier les paramètres d'autorisation de la caméra.

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ć