Запрос разрешения для камеры и библиотеки в iOS 10 - Info.plist
Я реализовал WKWebView в приложении.
там файл вводится на указанной веб-странице, где он должен импортировать изображение с фотографий.
Всякий раз, когда я нажимаю на этот вход и выбираю "Take Photo" или "Photo Library", приложение внезапно падает, что, я считаю, связано с тем, что приложение не имеет права либо делать фотографию, либо импортировать из библиотеки.
Как мне нажимать запрос на разрешение, когда пользователь выбирает один из указанных методов (съемка или фотобиблиотека)?
Я использую Swift 3.0 с WKWebView.
Ответы
Ответ 1
Вы должны добавить приведенное ниже разрешение в Info.plist. Больше референции
Камера:
Key : Privacy - Camera Usage Description
Value : $(PRODUCT_NAME) camera use
Фото :
Key : Privacy - Photo Library Usage Description
Value : $(PRODUCT_NAME) photo use
Ответ 2
Вы также можете запросить доступ программно, что я предпочитаю, потому что в большинстве случаев вам нужно знать, получил ли вы доступ или нет.
Обновление Swift 4:
//Camera
AVCaptureDevice.requestAccess(for: AVMediaType.video) { response in
if response {
//access granted
} else {
}
}
//Photos
let photos = PHPhotoLibrary.authorizationStatus()
if photos == .notDetermined {
PHPhotoLibrary.requestAuthorization({status in
if status == .authorized{
...
} else {}
})
}
Вы не разделяете код, поэтому я не могу быть уверенным, что это будет полезно для вас, но общие разговоры используют его как наилучшую практику.
Ответ 3
Swift 4
Файл: Info.plist
камера
<key>NSCameraUsageDescription</key>
<string>camera description.</string>
Фото
<key>NSPhotoLibraryUsageDescription</key>
<string> photos description.</string>
Сохранить фотографии
<key>NSPhotoLibraryAddUsageDescription</key>
<string> photos add description.</string>
Место нахождения
<key> NSLocationWhenInUseUsageDescription</key>
<string> location description.</string>
Apple Music:
<key>NSAppleMusicUsageDescription</key>
<string>My description about why I need this capability</string>
Календарь
<key>NSCalendarsUsageDescription</key>
<string>My description about why I need this capability</string>
Siri
<key>NSSiriUsageDescription</key>
<string>My description about why I need this capability</string>
Ответ 4
Файл: Info.plist
Для Камера:
<key>NSCameraUsageDescription</key>
<string>You can take photos to document your job.</string>
Для Фотобиблиотеки вам нужно, чтобы это разрешало пользователю приложения просматривать библиотеку фотографий.
<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>
Ответ 5
Используйте настройки plist, упомянутые выше, и соответствующий метод доступа (AVCaptureDevice или PHPhotoLibrary), но также предупредите их и отправьте их в настройки, если вам это действительно нужно, например:
Swift 4.0 и 4.1
func proceedWithCameraAccess(identifier: String){
// handler in .requestAccess is needed to process user answer to our request
AVCaptureDevice.requestAccess(for: .video) { success in
if success { // if request is granted (success is true)
DispatchQueue.main.async {
self.performSegue(withIdentifier: identifier, sender: nil)
}
} else { // if request is denied (success is false)
// Create Alert
let alert = UIAlertController(title: "Camera", message: "Camera access is absolutely necessary to use this app", preferredStyle: .alert)
// Add "OK" Button to alert, pressing it will bring you to the settings app
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
}))
// Show the alert with animation
self.present(alert, animated: true)
}
}
}
Ответ 6
Swift 4 Самый простой способ добавить разрешения без необходимости делать это программно, это открыть файл info.plist и выбрать "+" рядом со списком свойств информации, прокрутить раскрывающийся список до параметров конфиденциальности и выбрать "Описание использования камеры конфиденциальности" для Доступ к камере или Приватной Фотобиблиотеке Описание использования для доступа к Фотобиблиотеке. Введите значение String справа после того, как вы сделали свой выбор, чтобы включить текст, который вы хотели бы показать своему пользователю, когда всплывающее предупреждение запрашивает разрешения. ![Camera/Photo Library permission]()
Ответ 7
Чтобы запросить разрешение для приложения для фото, вам нужно добавить этот код (Swift 3):
PHPhotoLibrary.requestAuthorization({
(newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
/* do stuff here */
}
})