
アクティブユーザー数が3万を超えた「シンプル体重管理」ですが、ユーザー数が増えると共にトラブルも増え、アプリの低評価も目立つようになってきました。
その原因の一つが、localStorageが消えてしまう問題です。
アプリの設定データをlocalStorageに保存していますが、何らかの理由で消えてしまうと、設定データが初期化されてしまいます。
昨年12月にも「「Google Chrome」「AndroidシステムのWebView」のアップデートで大変なことになりました」で大きな問題になりました。
そこでアプリ起動時にSQLiteからアプリの設定データを読み込もうとしましたが、データベースをオープンする前にSQL文を実行してエラーとなってしまいました。
※cordova-sqlite-storageプラグインを使用します。
cordova-sqlite-storageプラグインのサンプルコードは以下のようになっています。
| 1 2 3 4 5 6 7 8 | var db = null; document.addEventListener('deviceready', function() {   db = window.sqlitePlugin.openDatabase({     name: 'my.db',     location: 'default',   }); }); | 
しかし、これではデータベースのオープンが成功したか失敗したかわかりません。
cordova-sqlite-storageプラグインのコードを調べた結果、コールバックを指定することができるようです。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var db = null; document.addEventListener('deviceready', function () {     db = window.sqlitePlugin.openDatabase({         name: 'my.db',         location: 'default',     }, function () {         var event = new CustomEvent("opendatabase");         document.dispatchEvent(event);     }, function () {         var event = new CustomEvent("opendatabaseerror");         document.dispatchEvent(event);     }); }); document.addEventListener("opendatabase", openDatabase, false); function openDatabase() {     // DBオープン成功     console.log("DBオープン成功");     document.removeEventListener("opendatabase", openDatabase, false); } document.addEventListener("opendatabaseerror", openDatabaseError, false); function openDatabaseError() {     // DBオープン失敗     console.log("DBオープン失敗");     document.removeEventListener("opendatabaseerror", openDatabaseError, false); } | 

もしかすると、現状のアプリは偶然タイミングよく動いていた可能性があります。
今となっては気持ち悪いので、すべてのアプリを上記の方法に変更しようと思います。





