web-dev-qa-db-fra.com

Alerte d'autorisation de localisation sur iPhone avec PhoneGap

Comment changez-vous la chaîne sur l'alerte en disant:

(Appname/quoi que ce soit) voudrait utiliser votre emplacement actuel

Bien sûr, je veux seulement changer la partie appname. Parce que lorsque vous utilisez le framework PhoneGap, la chaîne est très moche, quelque chose comme ceci:

/var/mobile/Applications/157EB70D-4AA7-826E-690F0CBE0F/appname.app/www/index.html

Quelqu'un a une idée?

51
bolmaster2

Vous devez effectuer la géolocalisation une fois l'appareil prêt. Le code JQuery suivant, par exemple, sera géolocalisé sans cette alerte désagréable:

$(function(){
  document.addEventListener("deviceready", onDeviceReady, false);
})

function onDeviceReady() {
  navigator.geolocation.getCurrentPosition(onSuccess, onError);     
}

function onSuccess(position) {
  // your callback here 
}

function onError(error) { 
  // your callback here
}
92
Pius Uzamere

Sur phonegap 3.0, la réponse de Pius Uzamere doit être suivie ET le plugin installé.

cordova plugin add https://git-wip-us.Apache.org/repos/asf/cordova-plugin-geolocation.git

sinon, vous obtiendrez la demande de double autorisation. 

17
Robert Verge

Je viens de suivre la documentation et de la résoudre . Ouvrez le terminal et cd de votre projet et entrez la commande suivante .$ plugin cordova add https://git-wip-us.Apache.org/ repos/asf/cordova-plugin-geolocation.git

Ajoutez également ceci dans votre config.xml

<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature>

Cela résoudra ce problème. :)

Source: http://docs.phonegap.com/fr/3.0.0/cordova_geolocation_geolocation.md.html#The%20Command-line%0AInterface

13
Shozab Hasan

Bien que cette question soit beaucoup plus ancienne, j’ai trouvé des questions similaires ici et ici .

Pour ma résolution, j'ai dû ajouter NSLocationWhenInUseUsageDescription au fichier .plist. Cependant, je suppose que mon plugin de géolocalisation était obsolète, je devais le mettre à jour en premier. Ensuite, j'ai dû supprimer/ajouter la plate-forme iOS Cordova. Enfin, j'ai ajouté NSLocationWhenInUseUsageDescription au fichier .plist.

Tout d’abord, supprimez/ajoutez le plugin de géolocalisation:

cordova plugin rm org.Apache.cordova.geolocation
cordova plugin add org.Apache.cordova.geolocation

Deuxièmement, supprimez/ajoutez la plate-forme iOS:

cordova platform rm ios
cordova platform add ios

Enfin, ajoutez NSLocationWhenInUseUsageDescription à la liste .plist. Ouvrez /platforms/ios/{project}/{project}-Info.plist et ajoutez ce qui suit:

<key>NSLocationWhenInUseUsageDescription</key>
<string>[App Name] would like to access your location when running and displayed.</string>

Voir ce lien Bibliothèque de développeurs iOS pour des informations détaillées sur NSLocationWhenInUseUsageDescription contre NSLocationAlwaysUsageDescription contre NSLocationUsageDescription.

8
trailing slash

Enfin résolu le problème.

IN the index.html déplace juste votre cordova.js vers le haut

<script src = "cordova.js"> </ script>

en tant que premier fichier js à inclure (surtout s’assurer qu’il se trouve au-dessus des cartes inclure js). Cela garantira que l'invite ne s'affiche qu'une seule fois.

Aucun autre code ou onduleur n'est nécessaire.

7
ToughPal

Après avoir cherché la solution que j'ai trouvée, ajoutez simplement une variable lorsque vous ajoutez l'emplacement du plug-in comme ceci

cordova plugin add cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="your usage message"
2
fsalazar_sch

Aucune des réponses ci-dessus n'a fonctionné pour moi. Ma demande de localisation tirait déjà sur deviceready. Ajouter ce qui suit à config.xml a résolu le problème:

<gap:plugin name="org.Apache.cordova.core.geolocation" />
2
Kyle Suss

Pour résoudre le problème, je dois exécuter cordova plugin add https://git-wip-us.Apache.org/repos/asf/cordova-plugin-geolocation.git qui ajoute (automatiquement) au fichier config.xml: 

<feature name="Geolocation">
     <param name="ios-package" value="CDVLocation" />
</feature>

Pour que les choses fonctionnent, je dois également insérer ces lignes dans le fichier config.xml: 

<plugins>
        <plugin name="Device" value="CDVDevice" />
        <plugin name="Logger" value="CDVLogger" />
        <plugin name="Compass" value="CDVLocation" />
        <plugin name="NetworkStatus" value="CDVConnection" />
        <plugin name="Debug Console" value="CDVDebugConsole" />
        <plugin name="Geolocation" value="CDVLocation" />
        <plugin name="SplashScreen" value="CDVSplashScreen" />
        <plugin name="Battery" value="CDVBattery" />
        <plugin name="Globalization" value="CDVGlobalization" />
    </plugins>

J'espère que cela pourrait être utile.

2
halbano

Après m'être assuré que ma demande geolocation avait été appelée une fois le périphérique prêt, en m'assurant que le plug-in de géolocalisation était correctement installé et configuré, je recevais toujours le message peu visible.

Je l'ai résolu en déplaçant et référençant mon fichier cordova.js et mes fichiers cordova_plugins.js dans le répertoire racine de mon application (ils étaient à l'origine dans un sous-dossier). Le chemin d'accès à cordova.js serait donc:

<script src="cordova.js"></script>  

Je pense que cela devrait être inclus dans la documentation (peut-être, mais je n'ai pas réussi à le trouver)

1
Brett Gregson
  • Simplement en incluant le fichier "cordova.js" dans votre fichier HTML où vous accédez à cet emplacement, vous résoudrez ce problème RIEN DE FANTAISIE REQUIS.
1
mahipalz

J'ai suivi toutes les instructions et cela a quand même échoué. Finalement, j'ai joué avec la démo de PhoneGap et trouvé la solution finale :

  1. Déplacez tous les fichiers js et les fichiers html dans le même dossier (pas même le sous-dossier). Toutes nos félicitations! Problème résolu, plus aucune alerte de permission:)

  2. BTW, vous feriez mieux d'utiliser un "setTimeout (function () {utility.getGeoData ();}, 1000);" J'ai trouvé "document.addEventListener (" deviceready ", utility.getGeoData (), false);" pas travailler pour moi.

J'espère que cela vous aidera lorsque vous ne trouverez aucune solution ci-dessus:)

Bonne chance!

0
Bingo

1) modifiez Location.m dans le projet PhoneGapLib. remplace toutes les références de navigator.geolocation par navigator_geo 

2) Copiez phonegap.js sur phonegap2.js et mettez-le à la racine de l'application. J'ai maintenant appris que chaque fois que je construis mon application et que je la charge sur un appareil .__ ou un simulateur, le fichier phonegap.js est en cours de régénération. D'ACCORD. Eh bien, j'ai besoin de le modifier, nous allons donc en utiliser un autre et gérer les soucis de la mise à niveau dans le futur. 

3) Modifiez la ligne (dans phonegap2.js) qui crée le constructeur de Le navigator.geolocation sur 626 pour être ... if (type of navigator._geo == "undefined") navigator._geo = new Géolocalisation (); 

4) Désormais, dans votre code HTML, chaque fois que vous souhaitez utiliser le logiciel PHONEGAP GPS, vous pouvez le référencer avec navigator._geo.getCurrentPosition ou similaire 5) Profitez de l'autorisation d'alerte de localisation ONE, et CLEAN, sans révéler à vos utilisateurs votre intelligence pour utiliser PhoneGap et créer une application avec HTML/JS. 

* CAVEAT ET VEUILLEZ AIDER! * 

Si j'exécute la fonction watchPosition, je vais obtenir le premier emplacement Update avec toutes sortes de statistiques. Ensuite, il signalera toujours une erreur Je suppose que ça craint pour ces 30 secondes d’obtenir une précision GPS sur ces choses? 

http://groups.google.com/group/phonegap/browse_thread/thread/8067c2037816a9ad

0
Luke Ollett

Je suis en retard pour la soirée ici, mais je répondrai à la question pour référence .. La réponse consiste à utiliser les fonctions de géolocalisation trouvées dans le fichier phonegap.js, fourni avec Phonegap. Vous pourrez trouver ces instructions sur le site Phonegap à l’adresse http://www.phonegap.com .

Si vous utilisez navigator.geolocation, vous utilisez le système de géolocalisation Safari par défaut. Cela se produit lorsque PhoneGap fonctionne en exécutant efficacement vos pages dans une instance Safari. Si vous incluez phonegap.js sur votre site, vous pouvez utiliser une méthode de géolocalisation distincte exposée par le code Objective-C de PhoneGap, qui présentera le comportement observé dans les autres applications où il demande l'autorisation de [nom de votre application].

0
Tim Rogers

Comme je luttais depuis plusieurs jours avec le même problème et que je trouvais finalement la solution, j’ai décidé de le partager avec tous ceux qui n’ont toujours pas pu le résoudre.

La solution est simple: le plugin de géolocalisation était manquant dans le répertoire plugins du répertoire www, même si j'avais ajouté le plugin via l'interface de ligne de commande phonegap ET que les fichiers du plugin étaient dans le répertoire/Plugins. Il suffit donc de copier les fichiers manquants dans/www/plugins et vous avez terminé. C'est aussi simple que ça.

Si quelqu'un a besoin des fichiers manquants: http://d.pr/f/xqhq

bTW: J'utilise Cordova 3.2.0.

J'espère que cela fonctionne pour vous aussi!

0
Manuel

Phoengap/Cordova version 3.5 ici. 

Semblable à la réponse de Manuel ci-dessus, mais cette fois, le plug-in n'est pas installé dans le dossier plates-formes/ios/[appname]/Plugins.

Le correctif pour moi était de créer manuellement un nouveau dossier pour le plug-in dans le dossier ../platforms/ios/[nom de nommage/Plugins> puis de le renommer en org.Apache.cordova.geolocation> puis de copier le .h et. m fichiers du plugin en elle.

Vous pouvez trouver les fichiers .m et .h du plug-in geoLocation dans le répertoire [racine] /plugins/org.Apache.cordova.geolocation/src/ios.

0
Chris Lambrou

Dans mon cas, j'utilise Cordova/Ionic et j'ai le même problème. C'est à cause du code avant que l'appareil soit prêt. J'ai simplement enveloppé le code avec document.addEventListener sur "deviceready". Par exemple:

document.addEventListener("deviceready", function () {
  $cordovaGeolocation.getCurrentPosition(options).then(function(position){
      ...your code here...
    });
});

Ensuite, le message supplémentaire n'apparaît pas.

0
Jongsoo Choi

Vous avez cette erreur (et beaucoup d'autres) après la mise à niveau de Cordova de 3.6 à 4.3.

Je pense que le processus de mise à niveau a échoué et que la seule solution qui a fonctionné pour moi était cordova platform rm ios puis cordova platform add ios.

/!\Vous perdrez tous les paramètres de votre projet ios et vous devrez re-télécharger des icônes Splash et Splash.

0
Tib