Android
DroidKaigi
kiosk

Kioskアプリと端末の作り方 ~DroidKaigi2018発表内容の要約+α~


はじめに

光栄なことに「Kioskアプリと端末の作り方」というテーマで DroidKaigi 2018 に登壇させて頂きました。

セッションにお越し頂いた方々、ありがとうございました!

本記事は発表内容の要約+オフィスアワーでのお話し、です。


本記事の対象者

本記事の対象者は下記の通りです。


  • セッションに参加したが、その後のオフィスアワーでどのような話があったのか気になる

  • セッションは不参加だが、要点だけをざっくり確認したい


発表動画

https://www.youtube.com/watch?v=ofUJaIiaVlw


発表資料

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



  • デバッグメニューが欲しい


    • Activityの邪魔にならない箇所にデバッグメニュー表示ボタンを置いておく




オフィスアワーでのお話し

※公開するとマズイお話しがある場合、ご連絡ください。


  • セーフモードではKioskアプリの起動を回避できてしまうのでは?


    • いいえ。回避は出来ず、Kioskアプリが起動します。

    • この回答は自分では無く、 DroidKaigi 2018 サポーター アイキューブドシステムズ 所属のエンジニア様が答えてくださいました!ありがとうございます。



  • ユーザー様側でKiosk端末化をお願いすることはできそうか?


    • NFCを使えばワンタッチでKiosk化できるみたいですが、試せていません。

    • 弊社では端末セットアップ手順書を作成し、キッティング作業を専用の会社様に委託しています。



  • Kioskアプリ自体をサイレントインストールでアップデートできるか?


    • 今回のサンプルソースでは試せていませんが、できると思います。



  • オフィスアワーで電源ボタン無効化の話題があったが、電源ボタンの長押しを onWindowFocuschanged() で検出(電源オフするか確認のダイアログが表示されるので)し、自分自身を起動することで回避できる。



    • 株式会社東京 のエンジニア様に教えていただきました!ありがとうございます!




最後に

発表準備は大変(公の場での発表はこれまで5分LTだけだったので)でしたが、

皆様からのフィードバックを頂き「発表して良かった!」という気持ちが強いです。

(特にKiosk化の苦労を分かち合えたのが嬉しい)

また、逆に開発ノウハウを教えて頂く事もあり、「情報を発信すると情報が集まってくる」を実感いたしました。

次はもっとうまく発表できるように頑張ります!