私はWKWebViewをアプリに実装しました。表示されているWebページに、写真から画像をインポートするファイル入力があります。私がその入力を押して、「Take Photo」か「Photo Library」のどちらかを選択する時はいつでもアプリは突然クラッシュします。
ユーザーが上記の方法(写真またはフォトライブラリ)のいずれかを選択したときに許可要求をプッシュする方法を教えてください。
私はSwift 3.0をWKWebViewで使用しています。
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 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 {}
})
}
あなたはコードを共有していないので、これがあなたにとって有用であるかどうか私にはわかりませんが、一般的に言えばベストプラクティスとしてそれを使用してください。
ファイル: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>
ファイル: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>
上記の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)
}
}
}
写真アプリの許可を求めるには、このコードを追加する必要があります(Swift 3):
PHPhotoLibrary.requestAuthorization({
(newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
/* do stuff here */
}
})