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

앱에서 WKWebView를 구현했습니다. 표시된 웹 페이지에 사진에서 이미지를 가져와야하는 파일 입력이 있습니다. 해당 입력을 누르고 “사진 찍기”또는 “사진 보관함”을 선택할 때마다 앱이 갑자기 충돌합니다. 앱이 사진을 찍거나 라이브러리에서 가져올 수있는 권한이 없기 때문이라고 생각합니다.

사용자가 언급 된 방법 (사진 찍기 또는 사진 라이브러리) 중 하나를 선택할 때 권한 요청을 어떻게 푸시합니까?

WKWebView와 함께 Swift 3.0을 사용합니다.



답변

Info.plist에 아래 권한을 추가해야합니다. 더 많은 추천

카메라 :

Key       :  Privacy - Camera Usage Description
Value     :  $(PRODUCT_NAME) camera use

사진 :

Key       :  Privacy - Photo Library Usage Description
Value     :  $(PRODUCT_NAME) photo use


답변

프로그래밍 방식으로 액세스를 요청할 수도 있습니다. 대부분의 경우 액세스 권한을 얻었는지 여부를 알아야하기 때문에 선호합니다.

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>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 음악 :

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

시리

<key>NSSiriUsageDescription</key>
<string>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 파일을 열고 정보 속성 목록 옆에있는 +를 선택하는 것입니다. 드롭 다운 목록에서 프라이버시 옵션까지 스크롤하고 카메라에 액세스하려면 프라이버시 카메라 사용 설명을 선택하고 사진 라이브러리에 액세스하려면 프라이버시 사진 라이브러리 사용 설명을 선택합니다. 선택한 후 오른쪽에있는 문자열 값을 입력하여 경고 팝업이 권한을 요청할 때 사용자에게 표시 할 텍스트를 포함합니다.카메라 / 사진 라이브러리 권한


답변

사진 앱에 대한 권한을 요청하려면 다음 코드를 추가해야합니다 (Swift 3) .

PHPhotoLibrary.requestAuthorization({
       (newStatus) in
         if newStatus ==  PHAuthorizationStatus.authorized {
          /* do stuff here */
    } 
})