Wie kann eine doppelte Eingabeaufforderung für die Geolokalisierung in der Phonegap App verhindert werden?

8

Ich habe eine PhoneGap-App für das iPhone erstellt, die Geolocation über JavaScript in der Webansicht verwendet.

Wenn ich die App das erste Mal starte, werde ich aufgefordert, Geolocation für diese App zuzulassen.

Wenn ich "ok" drücke, wird es mich erneut mit der gleichen Frage auffordern, aber diesmal sagt es, dass "index.html" die Erlaubnis haben soll, Geolocation zu verwenden.

Das ist sinnvoll, weil iOS wahrscheinlich die Erlaubnis haben soll, die Geolokalisierung für die App selbst zum ersten Mal zuzulassen und das zweite Mal, dass der Browser eine Erlaubnis benötigt.

Allerdings führt das nicht zu einer tollen Benutzererfahrung:

Wie kann ich diese doppelte Aufforderung verhindern? (Ich wäre genug, wenn die zweite Aufforderung verhindert werden könnte)

    
Timo 13.12.2012, 09:52
quelle

4 Antworten

14

Ich habe die Ursache für das Problem gefunden.

Der Aufruf von navigator.geolocation.getCurrentPosition(onsuccess, onerror) findet statt, bevor Phonegap vollständig geladen wurde.

Dies bedeutet, dass der Geolocation-Aufruf von webview (und nicht ein nativer Anruf über PhoneGap) ausgelöst wird, der erneut um Erlaubnis bittet (was sinnvoll ist). Vergleichen Sie es mit dem normalen Safari-Browser auf Ihrem Smartphone. Für jede neue Website wird eine Geolocation-Berechtigung benötigt. Das gleiche gilt beim Laden von index.html über PhoneGap beim Start der Anwendung.

Die Lösung besteht jedoch darin, auf das Geräteereignis zu warten, das ausgelöst wird, wenn PhoneGap vollständig geladen ist:

%Vor%

Dadurch wird die PhoneGap-API verfügbar, die den standardmäßigen HTML5-Gelöschaufruf des Browsers überschreibt und die geografische Position des Geräts über einen nativen Anruf abruft (den Sie bereits in der ersten Eingabeaufforderung akzeptiert haben).

Dies funktioniert, weil die API-Aufrufe von PhoneGap mit dem Standard-W3C-Aufruf für HTML5 identisch sind: Ссылка

    
Timo 13.12.2012, 14:03
quelle
0

Sehen Sie sich das an: Standort-Erlaubnisalarm auf dem iPhone mit PhoneGap

Der zweite scheint der Webkit-Alarm zu sein. Um dies zu verhindern, müssen Sie einfach alle Ihre js-Dateien in das Stammverzeichnis verschieben. Sag mir, ob es funktioniert, da ich bald das gleiche Thema ansprechen muss.

    
bouscher 13.12.2012 10:03
quelle
0

Schließlich wurde das Problem behoben.

Im index.html verschieben Sie einfach Ihre cordova.js

       & lt; script src="cordova.js" & gt; & lt; / script & gt;

als erste js-Datei enthalten sein (vor allem sicherstellen, dass es über Karten js ist). Dadurch wird sichergestellt, dass die Eingabeaufforderung nur einmal angezeigt wird

    
ToughPal 18.07.2014 11:28
quelle
0

Ich habe dieses Problem gelöst, indem ich das

verschoben habe %Vor%

als letztes Skript, das enthalten sein soll

    
Franz 13.07.2015 23:17
quelle