2012-12-13 10 views
8

I stworzył aplikację PhoneGap dla iPhone, który używa geolokalizacji poprzez JavaScript wewnątrz WebView.Jak zapobiec podwójnemu monitowi o geolokalizację w aplikacji Phonegap?

Kiedy uruchomić aplikację po raz pierwszy, będzie to poprosi mnie, aby umożliwić geolokalizacji dla tej aplikacji.

Kiedy hit „ok”, będzie to zapyta mnie znowu z tym samym pytaniem, ale tym razem to stwierdza, że ​​„index.html” chce pozwolenie na używanie geolokalizacji.

Ma to sens, ponieważ iOS prawdopodobnie chce pozwolenie aby umożliwić geolokalizacji dla samej aplikacji po raz pierwszy i 2 raz przeglądarka chce zgody.

Jednakże, ponieważ nie prowadzi do wielkiego doświadczenia użytkownika:

Jak mogę zapobiec podwójne wiersz? (Będę na tyle jeśli 2nd zachęty można zapobiec)

Odpowiedz

14

znalazłem przyczynę problemu.

Wezwanie do navigator.geolocation.getCurrentPosition(onsuccess, onerror) dzieje przed PhoneGap był w pełni załadowany.

Oznacza to, że wezwanie geolokalizacja WebView (a nie rodem wezwanie poprzez PhoneGap) jest wyzwalany, który ponownie poprosi o zgodę (co ma sens). Porównaj to ze zwykłą przeglądarką Safari na smartfonie. Poprosi o pozwolenie na geolokalizację dla każdej nowej witryny. Podobnie dzieje się przy ładowaniu pliku index.html za pośrednictwem PhoneGap podczas uruchamiania aplikacji.

jednak rozwiązaniem jest poczekać na deviceready wydarzenia, które pobiera opalane gdy PhoneGap pełni załadowany:

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

uczyni API PhoneGap dostępne który nadpisuje domyślny HTML5 połączenia gelocation w przeglądarce i uzyskać geo lokalizacja urządzenia za pośrednictwem połączenia natywnego (które zostało już zaakceptowane w pierwszym monicie).

To będzie działać, ponieważ wywołania API PhoneGap są identyczne do standardowego połączenia W3C dla HTML5: http://docs.phonegap.com/en/2.2.0/cordova_geolocation_geolocation.md.html#Geolocation

+0

Doskonała odpowiedź timo. wszystkie pozostałe powinny zostać usunięte, ponieważ rozpowszechniają dezinformację. – r3wt

0

rzucić okiem na to: Location permission alert on iPhone with PhoneGap

Drugi wydaje się być czujny Webkit. Aby temu zapobiec, musisz po prostu przenieść wszystkie pliki js do katalogu głównego. Powiedz mi, jeśli to działa, ponieważ wkrótce będę musiał zająć się tym samym problemem.

+0

Nie, to nie jest ona jednak swój link wskazał mnie w dobrym kierunku. Sprawdź moją odpowiedź na pytanie. – Timo

0

końcu naprawili problem.

w index.html po prostu przesuń kursor cordova.js up

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

jako pierwszy plik js być zawarte (zwłaszcza upewnić to jest ponad mapami zawierającymi js).Pozwoli to upewnić się, że szybka pokazuje tylko raz

+0

przydatne, ale pojawia się konflikt, gdy ten skrypt jest ładowany zgodnie z sugestią użytkownika, usługi sieciowe nie mogą załadować ani podać żadnego błędu. Jakie jest rozwiązanie? – developer

+0

Używam sencha touch 2, a w Ext.ajax.request, który ma z tym konflikt. jak tego uniknąć? – developer

+0

To jest niebezpieczne, bądź ostrożny. Być może biegasz w warunkach wyścigowych, które działają w twoim przypadku, ale mogą nie działać w innych środowiskach (w zależności od szybkości Internetu użytkownika, typu przeglądarki itd.). Powinieneś w pełni przeczytać i zrozumieć najpierw kolejność wykonywania skryptu: http://www.html5rocks.com/en/tutorials/speed/script-loading/?redirect_from_locale=de – Timo

0

I rozwiązać ten problem poprzez przesuwanie

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

jako ostatniego skryptu być zawarte

+0

To jest niebezpieczne, bądź ostrożny. Być może biegasz w warunkach wyścigowych, które działają w twoim przypadku, ale mogą nie działać w innych środowiskach (w zależności od szybkości Internetu użytkownika, typu przeglądarki itd.). Powinieneś w pełni przeczytać i zrozumieć najpierw kolejność wykonywania skryptu: http://www.html5rocks.com/en/tutorials/speed/script-loading/?redirect_from_locale=de – Timo

Powiązane problemy