MiRmサービスのプロダクトの一つとして、サーバーを管理するアプリを作ってみた。
簡単に紹介を。
自己紹介
普通科の高校に通う2年生男子。
Javaを主に使っている。kotlinも少しづつ...
MiRm(Minecraftの無料マルチプレイサーバー ホスティングサービス)の開発チームをやってる。
MiRmとは
Minecraft BEでマルチプレイをしたい!
↓
サーバーを立てなきゃ!!
↓
サーバーがないよ...
↓
じゃあサーバーを借りたいな←ここと
↓
サーバーは借りれた。面白くするためにプラグインも入れよう!←ここをやってくれるサービスです。
↓
わーい(友達がいなかった)
詳しく
@haniokasai 氏が始動したプロジェクト。
https://mirm.jp を参照。
アプリで何ができるの?
- 立てたサーバーを起動・停止する
- サーバーのステータスを確認する
- サーバーを共有する
- サーバーの利用期間を更新する
などなど...
アーキテクチャ
アプリ周辺のみ記載してみた。
アプリ自体は基本的なMVPアーキテクチャを採用した。
SteadyMistressとはシステムの中央サーバのこと。ほかにも各ユーザーのサーバーの起動・メモリ管理やバックアップ等を担っている。
アプリを支える技術
- Android SDK Java
- Google Firebase(中央サーバーからの通知)
- Google Admob(バナー広告・動画広告)
- Gson(Json処理)
- Junit(テスト環境)
- Zxing Android Embedded(QRコードの作成)
MiRm API
httpsのGET/POSTによるWeb API通信で起動・停止・強制停止・コマンド送信・標準出力送信などを行った。
はまったところ
EditTextでEnterキーを押したときの処理
Enterキーを押したときに入力されたものを取得し、コマンドを送信するという処理を実装しようとしてsetOnkeyListenerをした。
→ソフトウェアキーボードだとイベントが発火しない!
→onTextChanged(TextWatcher)を使って実装
→TextWatcher#afterTextChangedをオーバライドし、改行コードが含まれてるかどうかで処理
このとき、EditTextはmultiline属性にしておいた。アクティビティに設定したフラグメントをバックキーで切り替えたいが...
一番最初まで戻るとフラグメントがなくなり、真っ白になってしまう!
→一番最初に設定するフラグメントをスタックに積まないようにした重い
AsyncTaskをstaticに管理していたため。禁忌や。やってはいけない!!RewardedAdVideoの抽象メソッドが多すぎてコードが冗長化する
状態がいろいろあるから仕方ないと思うが、ここは必要なメソッドだけ抽象化したクラスを定義して対応。
課題とか
- UI/UXをもっと改善できるはず。
- 広告のロードが遅いからもう少し早くならないか。
- 将来的にはkotlin/NativeをつかったiOSアプリとのクロスプラットフォームアプリに。
- Googleの審査に落ちないようなアプリにしたい
感想
実はAndroidアプリとしては処女作となるアプリだったが、なかなか出来のいいアプリになったと思う。
開発途中にPCがフリーズしたりクラッシュしたりで何度かデータを失った。つらい。今度からはもっと細かいタイミングでGitにコミットしていきたい。
2019/4/25 追記
当該アプリはリリース直後にGoogle Playから削除され、ユーザーが使うことがなかった。