programing

iOS 10에서 카메라 및 라이브러리에 대한 권한 요청 - Info.plist

lastmoon 2023. 8. 10. 19:09
반응형

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.plistkeys 요에따라로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

반응형