アクティブユーザー数が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); } |
もしかすると、現状のアプリは偶然タイミングよく動いていた可能性があります。
今となっては気持ち悪いので、すべてのアプリを上記の方法に変更しようと思います。