2016年2月26日金曜日

【Ionic(Cordova)】Telerik版WKWebViewのpluginでLocal Storageにデータを保存できるようにするには?

Ionic(Cordova)でWKWebViewを使う時にハマるのがLocal Storageの扱い。アプリを起動するたびにLocal Storageに保存したデータがリセットされるという問題だ。

公式のApache版 はこのように解決できる。

iPhoneアプリ開発メモ: WKWebViewでの環境構築がついに発表される

iPhoneアプリ開発メモ: RPGツクールMVでiPhoenアプリビルド最新のcordovaでWKWebViewを使うセッティング

著者の方に感謝!


Telerik版 は独自に解決した。Apache版が使えるようになった今となっては二度と使わない解決法だろうが、念の為に残しておこうと思う。

ポイントはドキュメントにあるここだ。

0.5.1 Added support for config.xml property DisableLocalStorageSyncWithUIWebView (default false). Set it to true if you want to switch back to UIWebView and retain LS changes made while running WKWebView.

つまり、デフォルトではUIWebViewのLSとWKWebViewのLSを同期するようになっていて、起動のたびにWKWebViewのLSが空のUIWebViewのLSで上書きされることが問題と考えられる。

この機能をOFFにするには (プロジェクト名)/config.xml に

<preference name="DisableLocalStorageSyncWithUIWebView" value="true" />

と書く必要がある。もちろん保存した後、ionic prepare iosして設定を反映させる必要がある。

これで保存できるようになった。

2016年2月19日金曜日

AmazonのAppStoreで位置情報を使うアプリの対応端末を増やす方法

最近AmazonのAppStoreはパーミッションに関する制約が厳しくなり、これまで何も言われなかったアプリが警告扱いになり、ついに非対応ということになってしまった。


問題のアプリは位置情報を扱うアプリなのだが、Amazonの端末はGPSを搭載している端末が少ないので、このままでは対応端末が非常に限られてしまう。



改善すべきはAndroidManifest.xmlに設定しているパーミッションの指定。現在、位置情報関連のパーミッションは次の2つ。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

アプリの性質上、GPSほどの高い精度の位置情報は必要無いので、初めはACCESS_FINE_LOCATIONを消してみた。これでGPSを使わないようになるのではと考えたからだ。

これで対応端末は増えたが、ACCESS_COARSE_LOCATIONだけではキロ単位のズレが発生してしまうことが分かった。これはさすがにまずい^^;

エラーの内容をよく見ると、「android.hardware.location.gps」がダメだと言っている。



ということは、「GPSは必須でない」という設定があるはず。ドキュメントを見ると

<uses-feature> | Android Developers

「android.hardware.location.gps」というプロパティーがあった。そこで、このように指定することにした。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />

すると、位置情報の精度はそのままで、対応端末が増えた(・∀・)