iOS 10에서 카메라 및 라이브러리에 대한 권한 요청 - Info.plist
저는 앱에서 WKWebView를 구현했습니다.표시된 웹 페이지에 사진에서 이미지를 가져와야 하는 파일 입력이 있습니다.제가 그 입력을 누르고 "사진 찍기" 또는 "사진 라이브러리"를 선택할 때마다 앱이 갑자기 충돌합니다. 이는 앱이 사진을 찍거나 라이브러리에서 가져올 수 있는 권한을 놓쳤기 때문이라고 생각합니다.
사용자가 언급된 방법(사진 찍기 또는 사진 라이브러리) 중 하나를 선택할 때 권한 요청을 푸시하려면 어떻게 해야 합니까?
저는 Swift 3.0을 WKWebView와 함께 사용합니다.
또한 프로그래밍 방식으로 액세스를 요청할 수 있으며, 대부분의 경우 액세스를 수행했는지 여부를 알아야 하기 때문에 이를 선호합니다.
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 {}
})
}
당신은 코드를 공유하지 않기 때문에 이것이 당신에게 유용할지 확신할 수 없지만, 일반적으로 말하는 것은 그것을 모범 사례로 사용합니다.
Info.plist에서 아래 권한을 추가해야 합니다.더 많은 참조
카메라:
Key : Privacy - Camera Usage Description
Value : $(PRODUCT_NAME) camera use
사진:
Key : Privacy - Photo Library Usage Description
Value : $(PRODUCT_NAME) photo use
정보.plist
제한된 사진
<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
<true/>
카메라
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera description.</string>
사진들
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME)photos description.</string>
사진 저장
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) photos add description.</string>
위치
<key> NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location description.</string>
애플 뮤직
<key>NSAppleMusicUsageDescription</key>
<string>$(PRODUCT_NAME) My description about why I need this capability</string>
달력
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) My description about why I need this capability</string>
시리
<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) My description about why I need this capability</string>
위에 언급된 plist 설정과 적절한 접근자(AVCaptureDevice 또는 PHPhotoLibrary)를 사용하지만, 정말로 이것이 필요할 경우 경고하고 다음과 같이 설정으로 보냅니다.
Swift 4.0 및 4.1
func proceedWithCameraAccess(identifier: String){
// handler in .requestAccess is needed to process user's 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)
}
}
}
파일: 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>
Swift 5 프로그래밍 방식으로 권한을 추가할 필요 없이 권한을 추가하는 가장 쉬운 방법은 info.plist 파일을 열고 Information Property 목록 옆에 있는 +를 선택하는 것입니다.드롭다운 목록을 스크롤하여 개인 정보 옵션으로 이동하고 카메라에 액세스하려면 개인 정보 카메라 사용 설명을, 사진 라이브러리에 액세스하려면 개인 정보 사진 라이브러리 사용 설명을 선택합니다.선택한 후 오른쪽에 있는 문자열 값을 입력하여 경고 팝업에서 권한을 요청할 때 사용자에게 표시할 텍스트를 포함합니다.
사진 앱에 대한 권한을 요청하려면 이 코드(Swift 3)를 추가해야 합니다.
PHPhotoLibrary.requestAuthorization({
(newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
/* do stuff here */
}
})
가능한 모든 경우를 고려한 확장을 작성했습니다.
- 접근이 허용되면 코드는
onAccessHasBeenGranted
실행됩니다. - 액세스가 결정되지 않은 경우
requestAuthorization(_:)
호출됩니다. - 사용자가 앱 사진 라이브러리 액세스를 거부한 경우 설정으로 이동하여 액세스를 허용하는 창이 표시됩니다.이 창에서 "취소" 및 "설정" 단추를 사용할 수 있습니다.그가 "설정" 버튼을 누르면 응용 프로그램 설정이 열립니다.
사용 예:
PHPhotoLibrary.execute(controller: self, onAccessHasBeenGranted: {
// access granted...
})
확장 코드:
import Photos
import UIKit
public extension PHPhotoLibrary {
static func execute(controller: UIViewController,
onAccessHasBeenGranted: @escaping () -> Void,
onAccessHasBeenDenied: (() -> Void)? = nil) {
let onDeniedOrRestricted = onAccessHasBeenDenied ?? {
let alert = UIAlertController(
title: "We were unable to load your album groups. Sorry!",
message: "You can enable access in Privacy Settings",
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in
if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsURL)
}
}))
DispatchQueue.main.async {
controller.present(alert, animated: true)
}
}
let status = PHPhotoLibrary.authorizationStatus()
switch status {
case .notDetermined:
onNotDetermined(onDeniedOrRestricted, onAccessHasBeenGranted)
case .denied, .restricted:
onDeniedOrRestricted()
case .authorized:
onAccessHasBeenGranted()
@unknown default:
fatalError("PHPhotoLibrary::execute - \"Unknown case\"")
}
}
}
private func onNotDetermined(_ onDeniedOrRestricted: @escaping (()->Void), _ onAuthorized: @escaping (()->Void)) {
PHPhotoLibrary.requestAuthorization({ status in
switch status {
case .notDetermined:
onNotDetermined(onDeniedOrRestricted, onAuthorized)
case .denied, .restricted:
onDeniedOrRestricted()
case .authorized:
onAuthorized()
@unknown default:
fatalError("PHPhotoLibrary::execute - \"Unknown case\"")
}
})
}
프젝트추에 합니다.info.plist
의 keys
요에따라로string
를 위한 메시지Request Permissions
:
사진:
Privacy - Photo Library Additions Usage Description
Privacy - Photo Library Usage Description
카메라:
Privacy - Camera Usage Description
모든 보호된 리소스에 대한 Apple의 기술 설명서에서 학습할 수 있도록 모든 내용을 자세히 확인하는 것이 좋습니다. (Bluetooth, Calendar, Camera & Microphone, Contacts Face ID , Location , Photos etc)
.
https://developer.apple.com/documentation/technologies
링크 및 검색 위로 이동:
Property List Keys -> Bundle Resources -> Information Property List -> Protected resources
감사합니다! :)
Swift 5, iOS 13에서 카메라 세션을 구현하는 좋은 방법.
https://github.com/egzonpllana/CameraSession
Camera Session은 AV Capture Session의 가장 간단한 구현 방법을 만들기 위해 노력하는 iOS 앱입니다.
앱을 통해 다음 카메라 세션이 구현된 것을 확인할 수 있습니다.
- 사진을 찍거나 동영상을 녹화하는 기본 카메라입니다.
- 기본적으로 사진 및 비디오를 가져올 수 있습니다.
- 라이브러리에서 하나 이상의 자산을 선택할 수 있는 옵션과 함께 사진 및 비디오와 같은 자산을 선택하는 사용자 지정 방법입니다.
- 버튼을 누르고 녹화할 수 있는 옵션을 포함하여 사진 또는 비디오를 촬영하는 사용자 지정 카메라입니다.
- 카메라 권한 요청이 분리되었습니다.
사용자 지정 카메라에는 토치 및 회전 카메라 옵션이 있습니다.
언급URL : https://stackoverflow.com/questions/39631256/request-permission-for-camera-and-library-in-ios-10-info-plist
'programing' 카테고리의 다른 글
JavaScript: 매 분마다 실행할 코드 가져오기 (0) | 2023.08.10 |
---|---|
한 데이터베이스의 테이블에서 다른 데이터베이스로 데이터 복사 (0) | 2023.08.10 |
에뮬레이터에서 Android 응용 프로그램이 실행 중일 때 어떻게 감지할 수 있습니까? (0) | 2023.08.10 |
특정 워크시트에서 Excel 파일 열기 (0) | 2023.08.10 |
puppeteer: 다음 줄로 계속하기 전에 N초 대기 (0) | 2023.08.10 |