J'ai implémenté un WKWebView dans une application. Il y a un fichier dans la page Web affichée où il faut importer une image à partir de photos. Chaque fois que j'appuie sur cette entrée et que je sélectionne "Prendre une photo" ou "Photothèque", l'application se bloque soudainement, ce qui, je le crois, tient au fait que l'application ne dispose pas de l'autorisation nécessaire pour prendre une photo ou importer de la bibliothèque.
Comment puis-je envoyer une demande d'autorisation lorsque l'utilisateur sélectionne l'une des méthodes mentionnées (Prendre une photo ou Photothèque)?
J'utilise Swift 3.0 avec WKWebView.
Vous devez ajouter l'autorisation ci-dessous dans Info.plist. Plus de références
Caméra:
Key : Privacy - Camera Usage Description
Value : $(PRODUCT_NAME) camera use
Photo:
Key : Privacy - Photo Library Usage Description
Value : $(PRODUCT_NAME) photo use
Vous pouvez également demander un accès par programme, ce que je préfère car dans la plupart des cas, vous devez savoir si vous avez utilisé l'accès ou non.
mise à jour de 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 {}
})
}
Vous ne partagez pas le code, je ne peux donc pas savoir si cela vous serait utile, mais en général, utilisez-le comme meilleure pratique.
Fichier: Info.plist
Caméra
<key>NSCameraUsageDescription</key>
<string>camera description.</string>
Photos
<key>NSPhotoLibraryUsageDescription</key>
<string> photos description.</string>
Sauvegarder les photos
<key>NSPhotoLibraryAddUsageDescription</key>
<string> photos add description.</string>
Emplacement
<key> NSLocationWhenInUseUsageDescription</key>
<string> location description.</string>
Apple Music:
<key>NSAppleMusicUsageDescription</key>
<string>My description about why I need this capability</string>
Calendrier
<key>NSCalendarsUsageDescription</key>
<string>My description about why I need this capability</string>
Siri
<key>NSSiriUsageDescription</key>
<string>My description about why I need this capability</string>
Utilisez les paramètres de plist mentionnés ci-dessus et l'accesseur approprié (AVCaptureDevice ou PHPhotoLibrary), mais avertissez-les également et envoyez-les à vos paramètres si vous en avez vraiment besoin, comme ceci:
Swift 4.0 et 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)
}
}
}
Fichier: Info.plist
Pour Caméra:
<key>NSCameraUsageDescription</key>
<string>You can take photos to document your job.</string>
Pour Photothèque, vous souhaiterez que celui-ci permette à l'utilisateur de l'application de parcourir la photothèque.
<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>
Swift 4 Le moyen le plus simple d’ajouter des autorisations sans avoir à le faire par programme consiste à ouvrir votre fichier info.plist et à sélectionner le signe + en regard de Informations, propriété et faites défiler la liste déroulante jusqu'aux options de confidentialité et sélectionnez Confidentialité Description d'utilisation de la caméra pour accéder à la caméra ou Confidentialité Description de l'utilisation de la photothèque pour accéder à la photothèque. Renseignez la valeur Chaîne à droite une fois que vous avez choisi d’inclure le texte que vous souhaitez afficher à votre utilisateur lorsque la notification s’ouvre pour vous demander des autorisations.
Pour demander la permission pour l'application photo, vous devez ajouter ce code (Swift 3):
PHPhotoLibrary.requestAuthorization({
(newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
/* do stuff here */
}
})