弹出窗口不会要求在iOS 12中访问相机的权限

时间:2018-10-03 07:58:32

标签: ios ios12

根据苹果标准,我们需要请求访问用户相机的许可。因此我已经成功集成了摄像头,并且它在iOS 11中可以正常工作。但是,目前,我正在测试摄像头功能,发现如果用户一次允许摄像头访问,即使重新安装后该同一个应用也不会请求许可(从应用商店)。

所以我的问题是,它是否在iOS 12中发生了变化,还是每次用户尝试安装全新App时都需要进行一些设置以获取许可?

谢谢

1 个答案:

答案 0 :(得分:1)

iOS 12.1 / Swift 4.2

每次用户点击应用程序中的“相机”按钮时,都会调用此代码。首先,它会询问权限,如果以前的安装中的设置仍然存在,则会弹出UIAlertController,允许用户打开设备上的“设置”应用,并更改摄像头的权限设置。

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)
}