safariの位置情報

WebアプリでgeolocationAPIを使用すると、たいていのブラウザでは確認のダイアログが表示され、ユーザーが許可すると位置情報が利用できる。
PCのブラウザやAndroidの標準ブラウザなどでは許可の際に「保存/記憶する」的な機能があり、一度許可したドメインでは以降透過的に位置情報が利用できるようになる。

が、iPhonesafariだと毎回このダイアログが表示される。
しかも任意に記憶させておくことが出来ず、とにかくアクセスのたびに改めて聞かれる。ウザイ。

まあ、確認が表示されるのはいいんだけど、ここで誤ってドメイン別のダイアログで「許可しない」を2回選んでしまうと、以降そのサイト(ドメイン)では位置情報を二度と利用できなくなるらしい。
最初は設定画面でリセットなり操作すれば復帰できるだろうと思っていたが、Web上の情報を見るかぎりリセットする手段がないようだ(safariのアプリ単位の警告はリセットできる)。

これ、位置情報をネタにするWebアプリサービスではかなり致命的な仕様だと思う。

アプリ内にUIWebViewを持たせてWebアプリを表示させる、ハイブリッドなアプリの場合でも同様の挙動だった。
iPhoneで位置情報を透過的にWebアプリで利用するためには、フロントエンドになるアプリをつくり、そのネイティブアプリ側でGPS情報を取得、それをバックグラウンドでサーバ経由で通知するとか、UIWebViewに表示されているコンテンツのJavaScriptに対して非同期に(stringByEvaluatingJavaScriptFromStringなどを使って)流しこむといった妙な事をしなければならないっぽい。

全てをネイティブで作れば面倒なことを考えなくてもいいんだけど、WebアプリにはWebアプリの利点もあったりするので・・・。


あとはファイルアップロードが出来ないとか。
仕様や動作の検証を進めればすすめるほど、なんだかAppleの理不尽な仕様や怠慢(safariブラウザのGPS不許可の問題は随分前から指摘されているらしいんだけど全然改善されない)に振り回されているような気分で、不愉快さが募っている。

なんだかなー。