Cordova
ionic

ionicでwkwebviewプラグインの移行(apache版→ionic-team版)で詰みそうになった話

結論を先に言うならwkwebviewプラグインはionic-teamが出しているものを使った方が無難そうです。(ただし、ionic-team版wkwebviewプラグインは最終的にはapache版にマージされる予定らしいですが・・・)

・ionic-team版wkwebviewプラグイン
https://github.com/ionic-team/cordova-plugin-wkwebview-engine

あと、ストレージ周りはなるべくSQLite(ionic-storage)を使った方が無難そうです。
ionic-storage
https://github.com/ionic-team/ionic-storage

wkwebviewとは?

iOSのアプリ内ブラウザです。ionicアプリならこれを使うだけでパフォーマンスの向上する可能性があります。

apache版とionic-team版のwkwebviewプラグインの違いは?

一番はXHR周りが動くことだと思います。特にngx-translateモジュールを動かそうとした時に、apache版だと動かず、ionic-team版だと動作するといったことが起こりました。私も、元々apache版を使っていましたが前述のXHR周りのこともあって後からionic-team版に乗り換えました。

しかし、プラグインの移行で詰みそうになる・・・

本題ですが、プラグインの移行自体は簡単にできたんですが、何故か移行するとアプリ内で保存していたものが全て初期化されてしまう事象が・・・。
どうやら、アプリ内のフラグ保持にwindow.localStorageを使用していたことが良くなかったみたいで、apache版とionic-team版のwkwebviewプラグイン間でlocalStorageが共有されない様子でした。
そのため、このままリリースするとバージョンアップとともにアプリがほぼ初期化されてしまうという問題が・・・。

対処

実はアプリの途中のバージョンから将来swiftに置き換えることを考慮しwindow.localStrogeと並行してSQLite(ionic-storage)にも同じフラグ情報を保持するようにしていました。
そのため、バージョンアップ後にlocalStorageになかったらSQLiteの方も確認するようにして対処しました。
とはいえ、たまたまSQLiteに保存してあったらかよかったものの、もしそれをしていなかったらと思うと面倒なことになっていました・・・。

まとめ

・wkwebviewプラグインはionic-team版を使ったほうが無難
・window.localStorageは使わずなるべくSQLite(ionic-storage)を使った方が無難
 →ionic serve中はlocalStorageを自動的に使ってくれるのでデバッグも用意

あと、Objective-Cに強ければ、直接wkwebviewのプラグインをいじってapache版でXHR周りも動かしたり、両プラグイン間でlocalStorageを共有したりといった他の対処方法ができたかも・・・。