私が携わるプロジェクトで、タイトルの通りアプリが突然削除されました。
時系列に沿って、備忘録として書き記します。
どなたかのお役に立てると幸いです。
あの時は、本当にビビりました……。
前提
このプロジェクトは、お客様(一般企業)から依頼を受けて開発しています。
スマホ向けアプリケーションの保守開発です。
削除から復旧までの流れ
発覚
突然、お客様からこんな連絡が入りました。
GooglePlayストアでアプリを検索しても表示されないんだけど……?
実際にURLを叩いても、検索をしてもストアのページが表示されませんでした。
そして GooglePlayConsole で確認すると、アプリが削除された旨が記載されていました。
いや、ちょっと待って。
なんで!?
Googleからのメッセージ
Google曰く「onReceivedSslError
の実装に脆弱性がある」とのことでした。
この脆弱性が原因で、アプリが危険だと判断され、ストアから削除されたようです。
【補足】onReceivedSslError とは
この onReceivedSslError
は、間違ったSSL証明書が使われている時にハンドリングするエラー処理です。
一般的な例でいうと、HTTPプロトコルのページをWebViewで開こうとすると「あ、このサイトHTTP通信だ!危ない!」とハンドリングする処理です。
このエラー処理では「SSL証明書が間違ったサイトにアクセスしようとしていますが、よろしいですか」などユーザに判断させる方法があります。
しかし、Googleとしては「ユーザにその判断は難しいので推奨していない」そうです。
そしてこのハンドリング処理を実装していない場合、自動的にキャンセル処理が実行されるので、実質この実装は必要ないのが現状です。
そもそも、HTTP通信は許可すべきでは無いです。
HTTPS通信がデファクトスタンダードになっているので、そもそもHTTPアクセスする必要ないだろうという考えに基づいています。
調査・確認
実際にアプリのソースコード、ライブラリ(SDK)の開発元に連絡を取り、確認しました。
アプリのソースコードはもちろん対応済み。
SDK側も「昨年に対応済みです」との回答をもらいました。
つまり 「どこにも脆弱性のある処理がないのに削除された」 という結論に至ります。
次のアクション
こうなったら、実際にGoogleに問い合わせるしかありません!
下記のリンクの一番下「メール」から問い合わせを行いました。
内容は下記のような感じです。ご参考ください。
○月○日(○) に、弊社の ○○アプリが GooglePlay ストアから削除されました。
その対策として下記の記事を参照いたしました。
https://support.google.com/faqs/answer/7071387
『1つ以上のアプリに onReceivedSslError ハンドラの安全でない実装が含まれているため…』という記載がございましたが、該当アプリのソースコードには『onReceivedSslError ハンドラ』の実装はしておりませんでした。
この『onReceivedSslError ハンドラ』の実装が無いことが問題となっているのでしょうか。
これまで何度かアプリをリリースしておりましたが、特に問題なくリリース出来ておりました。
お手数ですが、ご確認のほどよろしくお願い致します。
年末年始ということもあり、3営業日ほど見込んでいましたが、翌日の早朝には回答が来ました!
…ですが、回答は定型文で結局具体的な対応策はわかりませんでした🫤
Googleからの解答にあったヒント
よくよく読み返してみると、以下のような文言がありました。
製品版リリースに加えてテストや品質保証チェックに使用する他のリリースタイプ(内部テスト版、クローズドテスト版、オープンテスト版など)があれば、当該トラックも必ず更新してください。
つまり、再申請するときは、製品版の対応だけでなく他のテスト用のアプリも更新しろってことです。
めんどくさいなーと思いつつ確認したところ、案の定、内部テストに1年以上前のアプリが居座っていました(1年以上、内部テスト配信を行なっていなかった状況です)。
これが原因であると判断しました。
対応
1年以上前のアプリとなると、ソースコードもライブラリももちろん異なります。
内部テストは削除することができないため、新しいリリースバージョンをダミーで作成し、蓋閉じするイメージで対応しました。
これでバイナリ(アプリケーション)が空になっているリリースバージョンになります。
この状態で再申請したところ、無事復旧することができました。
今回の反省点
管理者メールの受信者を、お客様個人にしていました。
お客様が、逐一メールを確認するのは非現実的です。
他のメールに埋もれてしまえば、誤って警告メールを削除してしまう可能性もあります。
その後の対策
対策として、以下のようなことを実施いたしました。
- メーリングリストを作成し、関係者各位にGooglePlayConsoleからのメールが届くようにした
- 製品版だけでなく、内部テストやクローズドテスト版も適宜更新する
今回の疑問点
今回、事前の警告もなしにストアから削除されていました。
通常であれば、GooglePlayConsoleから何かしらの警告メッセージが届いたり、トップ画面上に表示されます。
しかし、その警告など一切なしに突然削除されてしまいました。
謎です。GooglePlayConsoleを定期的に開いて確認する以外の対処法が見つかりませんが……。
まとめ
Androidは、アプリの削除理由が明確に示されません。
Googleとしては「削除された理由は教えないけど、こういうの試したらどうかな?」というスタンスです。
したがって、根本原因を見つけるのに時間がかかる上にお門違いな対応をしてしまうリスクがあります。
それに対してiOSは、少しでもポリシーに反するとリジェクトされたりするので原因特定が容易です。
Androidは知見の蓄積をするしかないというわけですね。
皆さんもお気をつけて……👋