Flutter-geolocator: iOS ne demande pas d'autorisations de localisation

Créé le 25 janv. 2019  ·  15Commentaires  ·  Source: Baseflow/flutter-geolocator

Rapport de bogue


Le simulateur iOS ne demande pas l'autorisation de localisation. On dirait que l'appareil saute ou 'accroche' avec ça. Lorsque j'essaie d'obtenir geolocator.getCurrentPosition manuellement (en appuyant sur le bouton), il renvoie null . Pour Android, tout fonctionne comme prévu. J'ai vérifié l'autorisation de localisation à l'aide de geolocator.checkGeolocationPermissionStatus() et c'est
GeolocationStatus.unknown .

Comportement prévisible

Le simulateur iOS doit demander des autorisations d'utilisateur pour le service de localisation.

Étapes de reproduction

Configuration

Version : 2.1.1

Plate-forme:

  • [12.1 ] :iphone: iOS

Commentaire le plus utile

@dstuff @kika @JStuve @StephanCassel ,
Je l'ai corrigé! J'utilisais sur Info.plist cette autorisation NSLocationAlwaysUsageDescription avec NSLocationWhenInUseUsageDescription. Mais l'application est configurée pour cibler iOS 8, Flutter par défaut. Mais NSLocationAlwaysUsageDescription ne doit être utilisé qu'avec iOS 10+. Cela gâchait l'invite d'autorisation sur l'application iOS. J'ai supprimé et cela a fonctionné, j'ai demandé la permission et j'ai pu obtenir l'emplacement. J'espère que cela peut vous aider les gars aussi.

Tous les 15 commentaires

Ce que j'ai remarqué, c'est que lorsque l'application est installée pour la première fois et accède au service de localisation, le système affiche une boîte de dialogue demandant l'autorisation et en même temps checkPermissionStatus() renvoie unknown . Si l'utilisateur autorise l'accès, l'application peut procéder à l'obtention du Position .
Il devrait y avoir un moyen d'attendre que l'utilisateur autorise ou refuse la demande.

J'ai exactement le même problème. Android fonctionne bien, mais dans iOS, j'ai ajouté NSLocationWhenInUseUsageDescription , mais je ne suis jamais invité à donner les autorisations d'accès, donc checkGeolocationPermissionsStatus() est toujours unknown . C'est également sur un appareil physique ainsi que sur le simulateur.

Même problème pendant des heures. Android fonctionne bien. iOS a donné null.
J'ai supprimé l'application iOS du simulateur et redémarré. Après ça fonctionne parfaitement. Puhhh.
J'ai eu un problème de démarrage en raison d'informations manquantes dans le fichier pod. Cela peut être à l'origine du problème.

Même chose ici. Application supprimée de l'appareil et du simulateur, réinstallée, même chose.
Lorsque vous essayez d'obtenir l'emplacement, l'exception suivante est apparue : ERROR_ALREADY_REQUESTING_PERMISSIONS

@dstuff @kika @JStuve @StephanCassel ,
Je l'ai corrigé! J'utilisais sur Info.plist cette autorisation NSLocationAlwaysUsageDescription avec NSLocationWhenInUseUsageDescription. Mais l'application est configurée pour cibler iOS 8, Flutter par défaut. Mais NSLocationAlwaysUsageDescription ne doit être utilisé qu'avec iOS 10+. Cela gâchait l'invite d'autorisation sur l'application iOS. J'ai supprimé et cela a fonctionné, j'ai demandé la permission et j'ai pu obtenir l'emplacement. J'espère que cela peut vous aider les gars aussi.

@cetorres J'ai enfin compris ! J'ai effectué la modification recommandée, en plus du fait que j'appelais également checkGeolocationPermissionStatus avant getCurrentPosition donc mon invite d'autorisations ne se déclenchait pas !

Merci! :bières:

version: 3.0.0 ios ne demande pas non plus d'accès aux autorisations.

D'après le débogage dans Xcode, il apparaît que NSLocationAlwaysAndWhenInUseUsageDescription est également requis. (Avoir seulement NSLocationAlwaysUsageDescription et NSLocationWhenInUseUsageDescription échoue silencieusement dans Flutter)

Même problème, tout est dit c'est prouvé, et rien n'y fait. Je ne sais pas vraiment comment le résoudre.

Merci beaucoup @cetorres ! Je cible en fait iOS 10+, mais j'ai quand même dû supprimer NSLocationAlwaysUsageDescription pour que cela fonctionne. Mon application n'a pas besoin d'informations de localisation lorsqu'elle n'est pas utilisée, donc c'est assez bon.

Fou! Apple a approuvé mon application pour TestFlight avec l'habituel...

Vous pouvez maintenant utiliser cette version pour les tests TestFlight ou la soumettre à l'App Store.

mais m'a aussi envoyé ceci:

Nous avons identifié un ou plusieurs problèmes avec une livraison récente pour votre application, [expurgé] 1.0.0 (12). Votre livraison a bien été effectuée, mais vous souhaiterez peut-être corriger les problèmes suivants lors de votre prochaine livraison :

ITMS-90683 : Chaîne d'objectif manquante dans Info.plist - Le code de votre application fait référence à une ou plusieurs API qui accèdent aux données utilisateur sensibles. Le fichier Info.plist de l'application doit contenir une clé NSLocationAlwaysUsageDescription avec une chaîne d'objectif destinée à l'utilisateur expliquant clairement et complètement pourquoi votre application a besoin des données. À partir du printemps 2019, toutes les applications soumises à l'App Store qui accèdent aux données utilisateur doivent inclure une chaîne d'objectif. Si vous utilisez des bibliothèques externes ou des SDK, ils peuvent référencer des API qui nécessitent une chaîne d'objectif. Bien que votre application n'utilise peut-être pas ces API, une chaîne d'objectif est toujours requise. Vous pouvez contacter le développeur de la bibliothèque ou du SDK et lui demander de publier une version de son code qui ne contient pas les API. En savoir plus (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

On dirait donc que je marche toujours sur une corde raide ici. Je ne peux pas mettre à jour le plugin car je ne veux pas franchir l'obstacle AndroidX pour le moment...

que proposez-vous les gars? Ignorer simplement le message « nous avons identifié des problèmes » ?

Mise à jour : l'ajout des trois ci-dessous dans info.plist a fonctionné pour moi. Apple est également heureux.

NSLocationWhenInUseUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription

Merci pour le conseil, @vejmartin

@kbrmimbyl Vous

Intéressant pour tous ceux qui ont modifié info.plist dans AndroidStudio et non dans XCode : pour moi, cela a fonctionné lorsque j'ai supprimé le "NSLocationAlwaysAndWhenInUseUsageDescription" et sélectionné à la place le "Privacy - Location Always and when in Use Usage Description" dans Xcode. Pour une raison quelconque, les autres étaient déjà formatés comme ça, mais celui-ci ne l'était pas. Je rencontrais les mêmes problèmes que ceux mentionnés ci-dessus, mais onError ne m'a rien donné. L'async attendait juste et n'a jamais eu lieu. Et puis si vous hotReload, vous obtenez le ERROR_ALREADY_REQUESTING_PERMISSIONS, car il attend toujours la saisie de cette demande d'autorisation.
En ciblant IOS11, sur Android, tout a bien fonctionné. Maintenant, c'est aussi le cas sur IOS.

J'ai le même problème avec Flutter Web sur un appareil IOS.
l'application n'invite aucune boîte de dialogue d'autorisation sur IOS, mais elle fonctionne sur les appareils Windows et Android

Cette page vous a été utile?
0 / 5 - 0 notes