web-dev-qa-db-fra.com

Demande d'accès à un emplacement sous iOS 11

Je demande l'emplacement de l'utilisateur dans mon application.

locationManager.requestAlwaysAuthorization()

Cette ligne de code devrait renvoyer ce message d'alerte:

 enter image description here

Cependant, je veux que l'utilisateur choisisse entre "Ne pas autoriser" et "Toujours autoriser" uniquement. Comment puis-je supprimer l'option "Uniquement en utilisant l'application"?

Sachant que c'est ce que j'ai inclus dans info.plist, et supprimer toute ligne de ces 3 lignes dans info.plist fait que l'application ne montre pas cette alerte du tout.

 enter image description here

7
mahdi

Ce n'est plus une option.

Étant donné que iOS 11 _ a été publié, si votre application demande que l'emplacement soit toujours activé (locationManager.requestAlwaysAuthorization()), les trois options sont automatiquement offertes aux utilisateurs.

Contrairement aux versions précédentes d'iOS, toutes les options doivent obligatoirement être affichées à l'utilisateur. Cela conduit à: vous devez ajouter une clé pour les deux options.

Adapté de Article d'Apple - Demander l'autorisation toujours :

Vous devez inclure la NSLocationWhenInUseUsageDescription et NSLocationAlwaysAndWhenInUseUsageDescription clés dans le .__ de votre application. Fichier Info.plist. (Si votre application prend en charge iOS 10 et versions antérieures, la clé NSLocationAlwaysUsageDescription est également requise.) Si ces clés ne sont pas présents, les demandes d'autorisation échouent immédiatement.

Référence: Nouveautés de Location Technologies Video Session.

8
Ahmad F

Selon WWDC 2017 Session 713 à propos des mises à jour dans les technologies de localisation, vous devez toujours inclure la description When In Use lors de la liaison avec iOS 11 et versions ultérieures, si vous souhaitez demander une autorisation à Always. Et iOS affichera en outre une option permettant d’utiliser l’emplacement pour le mode Quand-en-utilisation.

Citation de la transcription de la session.

Donc, pour iOS 11, nous demandons à tous les développeurs avec Toujours demander des applications de prendre en charge le mode d’autorisation WhenInUse. Cette modification est à la fois rétroactive et prospective. Ainsi, lorsque l'utilisateur met à jour iOS 11, il sera en mesure d'autoriser toute application qui demande toujours l'autorisation au mode d'autorisation WhenInUse. Si vous créez un lien avec le SDK iOS 11, vous devez fournir une description WhenInUseUsageDescription. Sinon, votre application ne pourra pas demander l'autorisation de Toujours. De plus, lorsque votre application demande toujours l'autorisation, nous afficherons en outre une option permettant d'accorder à votre application l'autorisation WhenInUse. Avec ces trois nouvelles invites d’option, nous avons également une nouvelle chaîne UsageDescription. Votre application doit fournir une description d'utilisation AlwaysAndWhenInUse. Comme il s'agit d'une clé différente, votre application doit la fournir lorsque vous établissez un lien avec le nouveau SDK iOS 11. Pour les applications liées à iOS 11 et versions ultérieures, Core Location n'utilisera pas l'ancienne clé NSLocationAlways UsageDescription.

3
Jack Oborin

Quand ils ne sont pas définis, vous attraperez un message dans la console de débogage comme suit:

L'info.plist de l'application doit contenir les clés NSLocationAlwaysAndWhenInUseUsageDescription et NSLocationWhenInUseUsageDescription avec des valeurs de chaîne expliquant à l'utilisateur comment l'application utilise ces données.

  1. Ouvrez Info.plist en tant que code source  enter image description here

  2. Et ajoutez le morceau xml suivant:

<key>NSLocationAlwaysUsageDescription</key>
<string>Location always usage description</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Location always and when in usage description</string>
<key>NSLocationUsageDescription</key>
<string>Location usage desription</string>