8 votes

Comment éviter la double demande de géolocalisation dans une application Phonegap ?

J'ai créé une application PhoneGap pour iPhone qui utilise la géolocalisation via JavaScript à l'intérieur d'une webview.

Lorsque je lance l'application pour la première fois, elle me demande d'autoriser la géolocalisation pour cette application.

Lorsque je clique sur "ok", le système me pose à nouveau la même question, mais cette fois-ci, il indique que "index.html" demande l'autorisation d'utiliser la géolocalisation.

C'est logique car iOS demande probablement l'autorisation d'autoriser la géolocalisation pour l'application elle-même la première fois et la deuxième fois, le navigateur demande l'autorisation.

Cependant, cela n'aboutit pas à une bonne expérience pour l'utilisateur :

Comment puis-je éviter ce double message (il me suffirait d'éviter le deuxième message) ?

14voto

Timo Points 2412

J'ai trouvé la cause du problème.

L'appel à navigator.geolocation.getCurrentPosition(onsuccess, onerror) se produit avant que Phonegap ne soit entièrement chargé.

Cela signifie que l'appel à la géolocalisation de webview (et non un appel natif via PhoneGap) est déclenché, ce qui demandera à nouveau une autorisation (ce qui est logique). Comparez cela au navigateur Safari normal sur votre Smartphone. Il demandera l'autorisation de géolocalisation pour chaque nouveau site web. Il en va de même pour le chargement de index.html via PhoneGap au démarrage de l'application.

Cependant, la solution est d'attendre l'événement "deviceready" qui se déclenche lorsque PhoneGap est complètement chargé :

document.addEventListener("deviceready", function(){
     navigator.geolocation.getCurrentPosition(onsuccess, onerror, params);
}, false);

Cela rendra disponible l'API PhoneGap qui remplacera l'appel de géolocalisation HTML5 par défaut du navigateur et obtiendra la géolocalisation de l'appareil via un appel natif (que vous avez déjà accepté dans la première invite).

Cela fonctionnera parce que les appels de l'API de PhoneGap sont identiques aux appels standard du W3C pour HTML5 : http://docs.phonegap.com/en/2.2.0/cordova_geolocation_geolocation.md.html#Geolocation

0voto

bouscher Points 1240

Jetez un coup d'œil à ceci : Alerte de permission de localisation sur iPhone avec PhoneGap

La seconde semble être l'alerte Webkit. Pour éviter cela, il semble que vous deviez simplement déplacer tous vos fichiers js dans le répertoire Root. Dites-moi si cela fonctionne car je vais bientôt devoir résoudre le même problème.

0voto

ToughPal Points 603

Le problème a finalement été résolu.

Dans l'index.html, déplacez votre cordova.js vers le haut

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

comme premier fichier js à inclure (assurez-vous en particulier qu'il se trouve au-dessus des cartes include js). Cela permettra de s'assurer que l'invite ne s'affiche qu'une seule fois

0voto

Franz Points 408

J'ai résolu ce problème en déplaçant le

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

en tant que dernier script à inclure

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