web-dev-qa-db-ja.com

iOS 10でカメラとライブラリのアクセス許可を要求する - Info.plist

私はWKWebViewをアプリに実装しました。表示されているWebページに、写真から画像をインポートするファイル入力があります。私がその入力を押して、「Take Photo」か「Photo Library」のどちらかを選択する時はいつでもアプリは突然クラッシュします。

ユーザーが上記の方法(写真またはフォトライブラリ)のいずれかを選択したときに許可要求をプッシュする方法を教えてください。

私はSwift 3.0をWKWebViewで使用しています。

61
Alamri

Info.plistに以下の権限を追加する必要があります。

カメラ:

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

写真:

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

プログラムでアクセスを要求することもできます。ほとんどの場合、アクセスしたかどうかを知る必要があるためです。

Swift 4 update:

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

あなたはコードを共有していないので、これがあなたにとって有用であるかどうか私にはわかりませんが、一般的に言えばベストプラクティスとしてそれを使用してください。

96
George Vardikos

スイフト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>

アップルミュージック:

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

ファイル:Info.plist

カメラの場合:

<key>NSCameraUsageDescription</key>
<string>You can take photos to document your job.</string>

Photo Libraryの場合は、アプリユーザーがフォトライブラリを参照できるようにする必要があります。

<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>
19

上記の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)
      }
    }
  }
18
Joel Teply

Swift 4プログラムを使用せずにパーミッションを追加する最も簡単な方法は、info.plistファイルを開き、Information Propertyリストの横にある+を選択することです。ドロップダウンリストをスクロールしてプライバシーオプションを選択し、カメラにアクセスするにはプライバシーカメラの使用法の説明を、フォトライブラリにアクセスするにはプライバシーフォトライブラリの使用法の説明を選択します。アラートポップアップで許可を求められたときにユーザーに表示するテキストを含めるように選択した後、右側の文字列値を入力します。 Camera/Photo Library permission

10
elarcoiris

写真アプリの許可を求めるには、このコードを追加する必要があります(Swift 3)

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