はじめに
光栄なことに「Kioskアプリと端末の作り方」というテーマで DroidKaigi 2018 に登壇させて頂きました。
セッションにお越し頂いた方々、ありがとうございました!
本記事は発表内容の要約+オフィスアワーでのお話し、です。
本記事の対象者
本記事の対象者は下記の通りです。
- セッションに参加したが、その後のオフィスアワーでどのような話があったのか気になる
- セッションは不参加だが、要点だけをざっくり確認したい
発表動画
発表資料
GIFアニメ無し
https://speakerdeck.com/tomoya0x00/kioskapuritoduan-mo-falsezuo-rifang …
GIFアニメ有り(環境によってはちょっとレイアウト崩れるかも)
https://docs.google.com/presentation/d/1K9-Tn13yRAyOmN480DhchDTchVANaUDMn5y4gvRpoLc/edit?usp=sharing …
サンプルソース
https://goo.gl/ryz8mX
発表内容の要約
Kiosk端末とは?
- 特定用途に特化した情報端末
- 回転寿司屋や居酒屋に設置してあるタッチパネルなど
Kiosk端末の実現方法
- DeviceOwnerをうまく活用する
- 端末に様々な制約を課すことが出来る特別な管理者
- Android 5.0から追加された
- 基本的に端末の初期化が必要
- Lock task mode
- 特定アプリ以外への遷移を制限できる
- DeviceOwnerで許可されたアプリだけが開始できる
- 強制的にホームアプリ化
- DevicePolicyManager#addPersistentPreferredActivity でできる
- DeviceOwner権限が必要
- DeviceOwner指定時の注意点
- 端末のファクトリーリセット後、極力初期設定をスキップすること
- WiFiやアカウント設定してしまうと、DeviceOwnerの指定に失敗することがある
- 挙動は端末依存
活用事例紹介
実際のサービスで活用しているDeviceOwnerの機能紹介
- サイレントインストール
- ワイプ
- USBデバッグOFF
- スクリーンショットOFF
Kiosk端末開発のノウハウ
- バッテリー残量と電波強度が表示されない
- Lock task modeではステータスバーが表示されない
- APIで取得してアプリ内で表示
- ホームアプリ化すると再起動後にロック画面が表示される
- 設定でロック画面無しにする
- Kioskアプリが落ちると他画面に遷移できてしまう
- 例外処理を横取りして自分自身を再起動させる
- 端末起動直後のアップデート確認処理が毎回失敗する
- 端末起動直後はネットワーク接続確立されてないので注意
- リトライ回数や間隔を増やしましょう
- ホームアプリ化が解除されない
- DeviceOwner権限削除前にホームアプリ化解除
or
セキュリティ->端末管理アプリからチェック外してadb uninstall
- DeviceOwner権限削除前にホームアプリ化解除
- デバッグメニューが欲しい
- Activityの邪魔にならない箇所にデバッグメニュー表示ボタンを置いておく
オフィスアワーでのお話し
※公開するとマズイお話しがある場合、ご連絡ください。
- セーフモードではKioskアプリの起動を回避できてしまうのでは?
- いいえ。回避は出来ず、Kioskアプリが起動します。
- この回答は自分では無く、 DroidKaigi 2018 サポーター アイキューブドシステムズ 所属のエンジニア様が答えてくださいました!ありがとうございます。
- ユーザー様側でKiosk端末化をお願いすることはできそうか?
- NFCを使えばワンタッチでKiosk化できるみたいですが、試せていません。
- 弊社では端末セットアップ手順書を作成し、キッティング作業を専用の会社様に委託しています。
- Kioskアプリ自体をサイレントインストールでアップデートできるか?
- 今回のサンプルソースでは試せていませんが、できると思います。
- オフィスアワーで電源ボタン無効化の話題があったが、電源ボタンの長押しを onWindowFocuschanged() で検出(電源オフするか確認のダイアログが表示されるので)し、自分自身を起動することで回避できる。
- 株式会社東京 のエンジニア様に教えていただきました!ありがとうございます!
最後に
発表準備は大変(公の場での発表はこれまで5分LTだけだったので)でしたが、
皆様からのフィードバックを頂き「発表して良かった!」という気持ちが強いです。
(特にKiosk化の苦労を分かち合えたのが嬉しい)
また、逆に開発ノウハウを教えて頂く事もあり、「情報を発信すると情報が集まってくる」を実感いたしました。
次はもっとうまく発表できるように頑張ります!