iOS6でGeolocation APIが動かない?
iOS上で動くWebアプリでHTML5のGeolocation APIを利用し、現在位置を定期的に捕捉しています。
このアプリがiOS5.1.1では問題ないのですが、iOS6以降で正しく動作しません。何か解決策はありますか?
watchPosition()を使用すると定期的に位置情報をチェックし、変化が起これば指定された処理(when_gps_is_updated)をコールします。初回起動時には問題なく動きます。しかし同じ処理を記述した別ページに画面遷移した場合、あるいは本体を一度サスペンドした後は動きが止まります。なお、GPSを使用した別のネイティブアプリ(Google Maps等)を起動すると再び動き出したりすることもあり、非常に動作が不安定(使い物になりません)です。
外国サイトの情報では、ホーム画面から起動したWebアプリでGeoLocation APIが動作しなくなる点が指摘されていますが、ブラウザを起動してからブックマーク経由で呼び出しても症状が再現してしまいます。
参考: https://discussions.apple.com/thread/4313850?start=0&tstart=0
iPad2 + iOS5.1.1 では問題なく、iPad3 + iOS6.1.2(6.0以降すべて)では正しく動きません。
Safali特有の問題かと疑いましたが、Chrome、あるいは Firefoxでも同様の症状が発生します。
ソースの一部を以下に公開します。表記中に出現するGPS_**** はグローバル変数です。
when_gps_is_updated() が成功時に起動する筈なのですが、これが呼び出されません。
この時、当然ですが、when_gps_is_error() も呼び出されていません。(成功している筈)
=== ここから ===
function ExecGPS() {
// GPSによる現在位置が利用可能な場合
if (window.navigator.geolocation) {
GPS_HANDLER = window.navigator.geolocation.watchPosition(
when_gps_is_updated,
when_gps_is_error,
{
enableHighAccuracy: GPS_HIGH_LV,
timeout: GPS_TIMEOUT,
maximunAge: GPS_MAX_AGE
}
);
return GPS_HANDLER;
// GPSによる現在位置が利用できない場合
} else {
return 0;
}
}
=== ここまで ===
iPad, iOS 6