112 votes

Demande d'autorisation pour l'appareil photo et la bibliothèque dans iOS 10 - Info.plist

J'ai implémenté un WKWebView dans une application. Il y a une entrée de 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 "Bibliothèque de photos", l'application se plante soudainement, ce qui, je pense, est dû au fait que l'application n'a pas l'autorisation de prendre une photo ou d'importer depuis la bibliothèque.

Comment pousser 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.

1 votes

@KiritModi Bonjour, merci beaucoup. Pouvez-vous s'il vous plaît le poster comme une réponse afin que je puisse l'accepter.

0 votes

Pour information : la documentation de UIImagePickerController n'a jamais été mise à jour pour cette exigence iOS10+ (j'ai parcouru toutes les pages, y compris la documentation Objective-C existante).

140voto

George Vardikos Points 1309

Vous pouvez également demander l'accès de manière programmatique, ce que je préfère car, dans la plupart des cas, vous avez besoin de savoir si vous avez obtenu 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 {}
        })
    }

Comme vous ne partagez pas le code, je ne peux pas savoir si cela vous serait utile, mais en général, c'est une bonne pratique.

6 votes

Merci, cette réponse a fonctionné pour moi ! Pour les personnes qui utilisent Swift 4, la première ligne doit être modifiée comme suit : "AVCaptureDevice.requestAccess(for : AVMediaType.video) { response in".

1 votes

Merci pour cette réponse. Cela fonctionne parfaitement. Je me demandais cependant une chose. Lorsque vous exécutez requestAuthorization, crée-t-il une sorte d'écouteur qui attend que l'autorisation soit définie avant d'exécuter son code ? Au début, je pensais que l'exécution du code s'arrêtait simplement à PHPhotoLibrary.authorizationStatus, mais après avoir ajouté un certain nombre d'instructions d'impression, il semble que l'exécution continue ?

5 votes

Swift 3 : AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo) { response in . N'oubliez pas de import AVFoundation .

123voto

Kirit Modi Points 1406

Vous devez ajouter la permission 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

0 votes

Bonjour, j'ai actuellement du mal à faire en sorte que les utilisateurs de l'iPhone7 puissent régler l'autorisation de la photothèque. Lorsque les utilisateurs d'iPhone7 vont dans les réglages de mon application sur leur téléphone, l'option photothèque est absente. J'ai la Clé:Valeur mentionnée ci-dessus dans mon info.plist. Ce qui est étrange, c'est que tous les appareils fonctionnant sous iOS 10 peuvent voir cette option, sauf les utilisateurs d'iPhone7. L'iPhone6 fonctionnant sous iOS 10 peut voir cette option par exemple. Est-ce qu'il me manque quelque chose d'autre ?

1 votes

Vous ne devez pas inclure le NOM_PRODUIT dans ces valeurs, car il est déjà inclus dans le message d'Apple. Par exemple, "Nom de l'application" souhaite accéder à vos photos.

73voto

Vishal Vaghasiya Points 1004

Info.plist

Photos limitées

<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
<true/>

Appareil photo

<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera description.</string>

Photos

<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME)photos description.</string>

Sauvegarder les photos

<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) photos add description.</string>

Localisation

<key> NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location description.</string>

Apple Music

<key>NSAppleMusicUsageDescription</key>
<string>$(PRODUCT_NAME) My description about why I need this capability</string>

Calendrier

<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) My description about why I need this capability</string>

Siri

<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) My description about why I need this capability</string>

29voto

Joel Teply Points 261

Utilisez les paramètres plist mentionnés ci-dessus et l'accesseur approprié (AVCaptureDevice ou PHPhotoLibrary), mais aussi les alerter et les envoyer aux 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)
      }
    }
  }

25voto

Ed . Points 400

Fichier : Info.plist

Pour Appareil photo :

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

Pour Photothèque vous voudrez 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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X