【障害】ローカルストレージの会員認証データが消えた【ごめんなさい】
こんにちは、Stacaの中の人です。
公開しているアプリで、かなり致命的なバグを出してしまいました。
アプリの不具合でローカルストレージの会員認証データが消えてしまい、スタンプカードの情報が表示されなくなったのです。
被害を受けた方、ごめんなさい。
目次
1.会員認証データが消えたら何がヤバいのか
2.そもそもアプリをアップデートした経緯
3.あれ、バグったかも、と気付いた瞬間
4.予想通り、問い合わせメールが来た・・・
5.ありったけの知恵を絞って復旧にいそしむ
6.教訓
1.会員認証データが消えたら何がヤバいのか
Stacaでは初回の会員登録時にローカルストレージに認証情報を保存しています。これは次回以降のアプリ起動時に自動ログインできるようにするためです。
※ 「そもそもStacaって何?」という方はこちらを先にお読みください
ローカルストレージには
- メールアドレス会員の場合は「メールアドレス」と「パスワード」
- 匿名会員の場合は「ニフクラmobile backend」で生成される認証キー(authData)
を保存していました。
今回、アプリにバグがあり、ローカルストレージの認証情報が消失してしまったのです。
メールアドレス会員の場合は「メールアドレス」と「パスワード」を再入力してもらえればログインできるため、「一度だけ自動ログインができない」というだけでそれほど大きな影響はありませんでした。
ニフクラ mobile backend メールアドレス認証
しかし、匿名会員の場合はユーザーには見えないローカルストレージに保存している「認証キー」が消えてしまったので、ログインすることができなくなってしまいました。
ニフクラ mobile backend 匿名認証
Stacaにログインできないということは、お客さまがコツコツ貯めたスタンプカードの情報を見ることができなくなるということ。スタンプを貯めることもできなければ、利用できるはずの特典も利用できません。
さらにはお店(ショップユーザー)の場合はもっと深刻です。昨日まで見えていたお客様のスタンプカードの一覧が表示されなくなるのです。
お客さまがカードを提示しているのに、お店側でスタンプを押せないのです。もちろん、お店側で特典を利用済み状態にすることもできません。
お店によっては「スタンプが一杯になったら1000円割引」とか「次回サービス料が無料」といった特典を設けておられます。
お店やお客さまにとって、スタンプカードはお金と同じ価値があるということ。それが突然、アプリから消えてなくなるんです。
思い出しただけでイヤな汗が出てきました。
2.そもそもアプリをアップデートした経緯
2020年11月、monacaからこんなリリースがありました。
cordovaのバージョンアップはとても厄介で、以前、cordova9にバージョンアップしたときも、何もソースを触ってないのにアプリが動かなくなったりしてとても苦労しました。
できるだけ先送りにしたかったのですが、実機でテストするツール「monacaデバッガー」が先にバージョンアップされてしまい、cordova9のアプリのデバッグができなくなったんですね、
それで仕方なくアプリをcordova10にバージョンアップすることにしました。
・・・これが不幸の始まりでした。
cordova10にバージョンアップした瞬間、予想通り動かなくなるアプリ。実機でテストしてもスプラッシュスクリーンのまま固まっています。
ログを調べてみると、アプリを起動したときに、cordovaプラグインが使える状態になったら呼ばれるはずの「devicereadyメソッド」が呼ばれていない模様。
試しに怪しそうなcordovaプラグインをアップデートしてもダメ、消してもダメ。
ええい、何が原因か分からないから、いったん全部のcordovaプラグインを外してしまおう!
(今思えばこれが悪かった・・・)
しかし、それでもアプリが動くことはありませんでした。
かれこれ、1か月以上は調査を続けましたが原因は分からず、「もうこの先アプリをアップデートできないんじゃないか」という状況で途方に暮れていたころ、こんな情報にたどり着きました。
【stack overflow】Cordova DeviceReady not firing
簡単に言うと、「index.html」に「cordova.js」の読み込みを追加すればいいとのこと。
<script src="cordova.js"></script>
6年前、しかも「cordova4.1.2」での情報でしたし、「cordova9」ではこの記述がなくても動いてたので、「どうせまた駄目だろうな」と思いながらも試したところ、、、なんと動きました!
※ 実際に追加したのはmonacaの環境に合わせたこの1行です
<script src="components/monaca-cordova-loader/cordova-loader.js"></script>
「よかった、これでようやくアプリをアップデートできる・・・」
ハマっていた期間が長かった分、喜びもひとしおです。
調査のために外していたcordovaプラグインをもう一度、全部入れ直して、そそくさとアプリをリリースしました。
ひとつだけ、とても重要なcordovaプラグインを入れ忘れたまま。。。
3.あれ、バグったかも、と気付いた瞬間
リリース後、少し気になってアプリに入れているcordovaプラグインを確認していたところ、「cordova-plugin-migrate-localstorage」が入ってないことに気づきました。
このプラグインは以前、「UIWebView」から「WKWebView」にアップデートするときに、ローカルストレージのデータ移行をするために実装したものです。
CordovaのUIWebView→WKWebView移行についてまとめ
「ん?このプラグインがないとデータ移行前のパスを参照しているんじゃないか?」
「そのパスには認証データはないぞ。。。」
ここで、はじめて障害に気づきました。
認証データが見れないということは、匿名会員がログインできないということ。
ログインできないということはスタンプカードも見れなくなっているということ。
これはヤバい!
急いで、プラグインを入れ直して修正版のアプリをリリース。
でも不具合のあったバージョンを使っていたユーザーの認証データは既にローカルストレージから消えていたのでした。
どうしよう。。。
4.予想通り、問い合わせメールが来た・・・
悩んでいるうちにユーザーから続々と問い合わせメールががが。
会員登録せずに利用してたのですが履歴がきえてるのですがどうしたらいいですか?
ショップユーザーとして使用しておりましたがログインできなくなりました。
何かログイン方法ありますか?
あわわわ、なんとかせねば。
でも消えたのはスマホ端末上のローカルストレージのデータなので、こちらからは復旧のしようがありません。
さてどうするか。。。
一つの妙案が浮かびました。
「そうだ! サーバの認証キーをローカルに落としてくればいいんじゃないか」
5.ありったけの知恵を絞って復旧にいそしむ
「ニフクラmobile backend」の会員データには「userName」と認証キー「authData」が保存されています。
「userName」はシステムで自動付与されるユニークかつランダムな文字列です。
なので、
- 問い合わせのあったユーザーに「userName」をお知らせする。
- ユーザーに「userName」を入力してもらって、サーバから認証データ「authData」を引っ張ってきてローカルストレージに保存し直す
この対応でなんとかなりそうです。
早速、アプリにデータ復旧専用の画面を作って即日リリース。その後は問い合わせメールが来るたびに、データ復旧の案内をする日々が続きました。
最終的には、復旧対応も10件程度で済み、障害は無事に収束したのでした。
6.教訓
アプリをアップデートする際の検証は入念に実施すること。
今回はcordova10のバージョンアップ対応が解決して安心していた、ということも一因ではありますが、アプリを更新したときの確認が不十分なままリリースしたのが良くなかったですね。
障害に気づいてからは、生きた心地がしませんでしたが、ユーザー様への影響は最小限で済んでよかったと思います。
最後に、データ復旧の案内をしたユーザー様からは、
スタンプカードが見れるようになりました。ありがとうございました!
ログインできました。助かりました。復旧ありがとうございます。
という、暖かいメッセージをいただきました。
アプリの不具合が原因なのに、申し訳ない気持ちでいっぱいです。
ご迷惑をかけた方、ごめんなさい。
今後はバグを出さないよう、くれぐれも気をつけます!
プログラミング未経験からアプリ開発の近道!
プログラミングスクール【無料/有料】の選び方&おすすめスクールを3つずつ紹介
【障害】ローカルストレージの会員認証データが消えた【ごめんなさい】 関連ページ
- 【個人スマホアプリ開発】公開しているアプリ<Staca>の紹介
- スマホアプリ開発で【monaca】を選んだ理由と実際に使ってみた感想
- 【アプリで稼ぎたい】個人開発のスマホアプリってどれくらい儲かるの?【無理ゲー】
- 【monaca】開発を効率化するために実践している4つのこと【Tips】
- 【monaca】アプリ公開前にこれだけはやっておこう!【あとで困ります】
- 【悲報】初めてアプリ課金が発生!喜んだのもつかの間【現実は厳しかった】
- 【初心者向け】スマホアプリ開発の始め方【最短ルートでアプリ公開】
- 【祝】Stacaの会員数が5000人を突破しました【スマホアプリ開発】
- 【20代限定】未経験から3年で年収1000万の安定収入(+α)を得る方法【IT業界】
- 【monaca】AppTrackingTransparencyの実装方法【IDFA対応】
- 【障害】すべてのリアルタイム通信がエラーになってしまった【アプリ保守は面倒っす】
PR