Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ビジネス向けアプリを開発するときに知っておくべきAndroid Enterpriseの世界

Yusaku Tanaka
September 15, 2023

ビジネス向けアプリを開発するときに知っておくべきAndroid Enterpriseの世界

Yusaku Tanaka

September 15, 2023
Tweet

More Decks by Yusaku Tanaka

Other Decks in Technology

Transcript

  1. ビジネス向けアプリを
    開発するときに知っておくべき
    Android Enterpriseの世界
    Yusaku Tanaka (@imsaku) - 2023/09/15, DroidKaigi 2023

    View Slide

  2. About Me
    Yusaku Tanaka (saku, @imsaku)
    https://twitter.com/imsaku
    2

    View Slide

  3. ● デバイス管理の実例を示すためにGoogle Workspaceを利用します
    ○ 同等のサービスはGoogle Workspace以外からも提供されています
    ● 特別な機能の実例を示すためにGoogle製のアプリを利用します
    ○ これらの機能はGoogle以外のアプリでも利用・実装可能です
    本発表について
    3

    View Slide

  4. アジェンダ ● Android EnterpriseとMDM
    ● MDMの仕組み
    ● 特別な機能
    4

    View Slide

  5. Android
    Enterpriseと
    MDM
    ● Android EnterpriseとMDM
    ● MDMの仕組み
    ● 特別な機能
    5

    View Slide

  6. Android Enterprise
    6

    View Slide

  7. Android Enterpriseって?
    Androidプラットフォームのビジネス利用を支えるために、
    Googleが主導している取り組みのこと。
    > Android Enterprise is a Google-led initiative to enable the use of
    Android devices and apps in the workplace.*
    7
    *https://developers.google.com/android/work/overview

    View Slide

  8. Android Enterpriseって?
    ● デバイス管理ソリューションの提供
    ● エンタープライズ向けデバイス
    ● ソリューションを提供するパートナーの認定プログラム
    ● ビジネス向けのカスタマーサポートなど
    8
    https://www.android.com/enterprise/

    View Slide

  9. ● デバイス管理ソリューションの提供
    ● エンタープライズ向けデバイス
    ● ソリューションを提供するパートナーの認定プログラム
    ● ビジネス向けのカスタマーサポートなど
    Android Enterpriseって?
    9
    https://www.android.com/enterprise/

    View Slide

  10. Android Enterpriseって?
    Androidプラットフォームのビジネス利用を支えるために、
    Googleが主導している取り組みのこと。
    > Android Enterprise is a Google-led initiative to enable the use of
    Android devices and apps in the workplace.*
    10
    *https://developers.google.com/android/work/overview

    View Slide

  11. Androidのビジネス利用
    ● 従業員への業務用デバイスの貸与
    ● 私用端末の持ち込み(BYOD, Bring Your Own Device)
    ● 専用端末(Kiosk)
    ○ 飲食店の注文端末
    ○ 配送・在庫管理のハンドヘルドデバイス
    11

    View Slide

  12. Androidのビジネス利用
    ● 従業員への業務用デバイスの貸与
    ● 私用端末の持ち込み(BYOD, Bring Your Own Device)
    ● 専用端末(Kiosk)
    ○ 飲食店の注文端末
    ○ 配送・在庫管理のハンドヘルドデバイス
    -> デバイス単体でも実現可能だが、運用に課題が生じることもある
    12

    View Slide

  13. ビジネス利用における課題の例
    13
    運用効率 セキュリティ プライバシー
    セットアップ 紛失による情報漏洩リスク 私物の持ち込み
    問い合わせ・トラブル対応
    悪意あるアプリの
    インストール
    労働時間の管理
    労働時間外の端末利用
    *これらは一例で、企業や組織、ユースケースによって多様な課題が生じる

    View Slide

  14. デバイス管理(MDM)
    MDM (Mobile Device Management)
    企業や組織におけるモバイルデバイス運用をより効率的かつ安全にするためのサービ
    スのこと。
    EMM(Enterprise Mobility Management)と呼ばれることもある。
    Androidに限らず、iOSやWindowsなど他プラットフォームと併せてサポートしている
    場合がある。
    -> 今回はAndroidに限定した領域を扱う。
    14

    View Slide

  15. ビジネス利用における課題の例
    15
    運用効率 セキュリティ プライバシー
    セットアップ 紛失による情報漏洩リスク 私物の持ち込み
    問い合わせ・トラブル対応
    悪意あるアプリの
    インストール
    労働時間の管理
    労働時間外の端末利用

    View Slide

  16. MDMによる課題解決の例
    16
    運用効率 セキュリティ プライバシー
    アプリの自動インストール
    Wi-Fi接続情報の配布
    リモートからの
    デバイス初期化・ロック
    仕事用プロファイル
    管理コンソール
    提供元不明アプリの
    インストール禁止
    Google Playストアの管理
    仕事用アプリの
    一時的な無効化

    View Slide

  17. 17
    https://developers.google.com/android/work/requirements
    AndroidにおけるMDMの実装や機能セッ
    トは、Android Enterpriseとして標準化さ
    れている。
    Android EnterpriseとMDM

    View Slide

  18. Android Enterprise Recommended
    サードパーティ製MDMをGoogleが検証するプログラムのこと。
    > It’s a shortlist of devices and service providers that meet Google’s
    strict enterprise requirements.*1
    Android Enterprise Recommendedとして認定されたMDMサービスは、Android
    Enterprise公式のソリューションリストに掲載される*2。
    18
    *1. https://www.android.com/enterprise/recommended/
    *2. https://androidenterprisepartners.withgoogle.com/emm/#!?aer

    View Slide

  19. MDMの仕組み
    ● Android EnterpriseとMDM
    ● MDMの仕組み
    ● 特別な機能
    19

    View Slide

  20. 20
    ● すでに使用中の端末を用意する
    ● 設定アプリのアカウントの追加から、
    管理対象となっているGoogleアカウ
    ントにログインする
    セットアップの例(BYOD)

    View Slide

  21. 21
    管理対象のアカウントでログインすると、仕
    事用プロファイルの設定が始まる
    セットアップの例(BYOD)

    View Slide

  22. 22
    ● IT管理者が定めたポリシーによって、
    セットアップ完了前に各種設定が求め
    られる。
    ● ポリシーの例
    ○ ロック画面のパスワード強度
    ○ 指定アプリの自動インストール
    セットアップの例(BYOD)

    View Slide

  23. 23
    セットアップが完了すると、
    仕事用のアプリが表示されるようになる。
    セットアップの例(BYOD)

    View Slide

  24. 24
    セットアップの例(BYOD)
    $ adb shell pm list users
    Users:
    UserInfo{0:my_user_name:123} running
    UserInfo{10:仕事用プロファイル:234} running

    View Slide

  25. セットアップの例(BYOD)
    25
    https://admin.google.com/

    View Slide

  26. 26
    Digital Wellbeing設定から、
    仕事用プロファイルが有効な時間をスケ
    ジュールできる
    仕事プロファイルが無効な時間帯は全て
    の仕事用アプリが強制終了され、通知や
    バックグラウンドでの動作をしなくなる
    BYOD Tips

    View Slide

  27. MDMの主な登場人物
    ● Androidデバイス / Android OS
    ● MDMサーバー / Web
    ● Google Play
    27

    View Slide

  28. MDMの主な登場人物
    ● Androidデバイス / Android OS
    ● MDMサーバー / Web
    ● Google Play
    28

    View Slide

  29. Androidデバイスの主な管理対象と権限
    デバイスを
    企業が所有している
    デバイスを
    個人が所有している( BYOD)
    デバイス全体を管理する *
    デバイス内に仕事用の領域を作成し、
    仕事用の領域のみを管理する
    Device Owner権限 Profile Owner権限
    29
    *BYODのように個人領域と仕事領域を分ける管理方法も存在する

    View Slide

  30. Device Owner / Profile Owner
    ● MDMを利用するために、デバイス内の特定のアプリに対して付与される管理権
    限。
    ● これらの権限を持つアプリは、DevicePolicyManagerというシステムサービスか
    らデバイス管理のための強力なAPIを実行することができる。
    30

    View Slide

  31. 31
    https://developer.android.com/reference/android/app/admin
    /DevicePolicyManager
    Device Owner/Profile Owner権限を持
    つ特定のアプリから実行可能なAPIを提供
    するシステムサービス。
    デバイス単位の管理機能は基本的に内部
    でこのサービスを実行している。
    (e.g.: パスワードの要件、端末初期化)
    DevicePolicyManager

    View Slide

  32. 32
    https://developer.android.com/reference/android/app/admin
    /DevicePolicyManager
    Device Owner/Profile Owner権限を
    持つ特定のアプリから実行可能なAPIを提
    供するシステムサービス。
    デバイス単位の管理機能は基本的に内部
    でこのサービスを実行している。
    (e.g.: パスワードの要件、端末初期化)
    DevicePolicyManager

    View Slide

  33. 33
    https://play.google.com/store/apps/details?id=com.google.a
    ndroid.apps.work.clouddpc
    Device Owner/Profile Owner権限を持
    ちデバイス上でMDMクライアントとして振
    る舞うアプリのことを
    Device Policy Controller(DPC)
    という。
    現在のAndroid Enterpise*では、
    Android Device Policyというアプリが
    DPCとして動作する。
    特定のアプリ
    *以前は各MDMサービスがDPCを実装する必要があった
    https://github.com/googlesamples/android-testdpc

    View Slide

  34. MDMの主な登場人物
    ● Androidデバイス / Android OS
    ● MDMサーバー / Web
    ● Google Play
    34

    View Slide

  35. MDMサーバー
    ● Google Playが提供しているAndroid Management APIを使用して、MDMの
    各機能を実装する。
    ● このAPIではデバイスの登録から利用ポリシーの設定、アプリの自動インストールと
    いったAndroid Enterpriseの標準的な機能が全て提供されている。
    35
    https://developers.google.com/android/management

    View Slide

  36. 36
    https://admin.google.com/
    一般的にMDMサービスでは、IT管理者向
    けの管理コンソールをWebで提供してい
    る。
    これによって、従業員のデバイスの状態を
    確認することができる。
    MDMサーバー / Web

    View Slide

  37. MDMの主な登場人物
    ● Androidデバイス / Android OS
    ● MDMサーバー / Web
    ● Google Play
    37

    View Slide

  38. Google Play
    ● サーバーサイドで利用するAndroid Management APIは、Google Play
    servicesの一部として提供されている。
    ● これによって、Android Enterpriseの機能セット全てをMDMベンダーに対して標
    準化して提供することができている。
    ● Managed Google Play*1によってインストール可能なアプリを制限したり、プライ
    ベートなアプリをGoogle Playでホストする*2機能も提供している。
    38
    *1.https://developers.google.com/android/management/apps#managed_google_pla
    y_iframe
    *2. https://developers.google.com/android/management/apps#private-apps

    View Slide

  39. 特別な機能
    ● Android EnterpriseとMDM
    ● MDMの仕組み
    ● 特別な機能
    39

    View Slide

  40. Managed Configurations
    ● IT管理者がアプリに対してリモートで設定を配布する
    Connected Apps
    ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う
    ビジネス向けのアプリが実装可能な特別な機能
    40

    View Slide

  41. Managed Configurations
    ● IT管理者がアプリに対してリモートで設定を配布する
    Connected Apps
    ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う
    ビジネス向けのアプリが実装可能な特別な機能
    41

    View Slide

  42. Managed Configurations
    IT管理者がアプリの設定を変更して各デバイスに反映することができる。
    設定値はMDMとデバイスの間をGoogle Play経由でやりとりするため、
    アプリは設定値の定義とPlatform APIからの値取得のみで実装できるのが特徴。
    42
    https://developer.android.com/work/managed-configurations

    View Slide

  43. Managed Configurations
    アプリ
    ● Managed Configurationsの設定スキーマを定義
    ● Managed Configurationsを受け取る処理を実装
    ● Google Playでアプリを公開*
    MDM
    ● Google Playから提供されるアプリ情報を元に設定UIを表示
    ● IT管理者が管理コンソールから設定を作成
    43
    *厳密にはこの限りではなく、
    Google Playがホストするプライベートアプリでも利用可能

    View Slide

  44. Managed Configurations
    Android OS / Google Play
    ● Google Play servicesがMDMサーバーからの設定変更を受ける*1
    ● Android OSのシステム領域に設定値をファイルとして保存*2
    ● RestrictionsManagerが設定値の取得をPlatform APIとして提供
    44
    *1 Android Management API ApplicationPolicy
    https://developers.google.com/android/management/reference/rest/v1/enterprises.policies#applicationpolicy
    *2 UserManagerService#writeApplicationRestrictionsLAr()
    https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/services/core/java/com/
    android/server/pm/UserManagerService.java

    View Slide

  45. Managed Configurations
    アプリ
    ● Managed Configurationsの設定スキーマを定義
    ● 設定値を受け取る処理の実装
    ● Google Playでアプリを公開
    MDM
    ● Google Playから設定スキーマを参照
    ● 管理コンソールから設定を作成
    45

    View Slide

  46. Managed Configurations
    アプリ
    ● Managed Configurationsの設定スキーマを定義
    ● 設定値を受け取る処理の実装
    ● Google Playでアプリを公開
    MDM
    ● Google Playから設定スキーマを参照
    ● 管理コンソールから設定を作成
    46

    View Slide

  47. Managed Configurationsの宣言

    android:resource="@xml/app_restrictions" <>
    <<.
    47
    AndroidManifest.xmlでManaged Configurationsの使用を宣言する

    View Slide

  48. res/xml/app_restrictions.xml

    xmlns:android="http:
    android:key="my_feature_enabled"
    android:title="@string/title_my_feature"
    android:description="@string/description_my_feature"
    android:restrictionType="bool"
    android:defaultValue="true" <>

    48
    https://developer.android.com/work/managed-configurations#define-configuration

    View Slide

  49. res/xml/app_restrictions.xml

    xmlns:android="http:
    android:key="my_feature_enabled"
    android:title="@string/title_my_feature"
    android:description="@string/description_my_feature"
    android:restrictionType="bool"
    android:defaultValue="true" <>

    49
    https://developer.android.com/work/managed-configurations#define-configuration

    View Slide

  50. res/xml/app_restrictions.xml

    xmlns:android="http:
    android:key="my_feature_enabled"
    android:title="@string/title_my_feature"
    android:description="@string/description_my_feature"
    android:restrictionType="bool"
    android:defaultValue="true" <>

    50
    https://developer.android.com/work/managed-configurations#define-configuration

    View Slide

  51. res/xml/app_restrictions.xml

    xmlns:android="http:
    android:key="my_feature_enabled"
    android:title="@string/title_my_feature"
    android:description="@string/description_my_feature"
    android:restrictionType="bool" <>

    51
    https://developer.android.com/work/managed-configurations#define-configuration

    View Slide

  52. Managed Configurations
    アプリ
    ● Managed Configurationsの設定スキーマを定義
    ● 設定値を受け取る処理の実装
    ● Google Playでアプリを公開
    MDM
    ● Google Playから設定スキーマを参照
    ● 管理コンソールから設定を作成
    52

    View Slide

  53. 設定値を受け取る
    val manager = activity.getSystemService(
    Context.RESTRICTIONS_SERVICE) as RestrictionsManager
    val restrictions = manager.applicationRestrictions <: return
    val myFeatureEnabled =
    if (restrictions.containsKey("my_feature_enabled")) {
    restrictions.getBoolean("my_feature_enabled")
    } else {
    defaultValue
    }
    doSomething(myFeatureEnabled)
    53
    https://developer.android.com/reference/android/content/RestrictionsManager

    View Slide

  54. 設定値を受け取る
    val manager = activity.getSystemService(
    Context.RESTRICTIONS_SERVICE) as RestrictionsManager
    val restrictions = manager.applicationRestrictions <: return
    val myFeatureEnabled =
    if (restrictions.containsKey("my_feature_enabled")) {
    restrictions.getBoolean("my_feature_enabled")
    } else {
    defaultValue
    }
    doSomething(myFeatureEnabled)
    54
    https://developer.android.com/reference/android/content/RestrictionsManager

    View Slide

  55. 設定値を受け取る
    val manager = activity.getSystemService(
    Context.RESTRICTIONS_SERVICE) as RestrictionsManager
    val restrictions = manager.applicationRestrictions <: return
    val myFeatureEnabled =
    if (restrictions.containsKey("my_feature_enabled")) {
    restrictions.getBoolean("my_feature_enabled")
    } else {
    defaultValue
    }
    doSomething(myFeatureEnabled)
    55
    https://developer.android.com/reference/android/content/RestrictionsManager

    View Slide

  56. 設定値を受け取る
    val manager = activity.getSystemService(
    Context.RESTRICTIONS_SERVICE) as RestrictionsManager
    val restrictions = manager.applicationRestrictions <: return
    val myFeatureEnabled =
    if (restrictions.containsKey("my_feature_enabled")) {
    restrictions.getBoolean("my_feature_enabled")
    } else {
    defaultValue
    }
    doSomething(myFeatureEnabled)
    56
    https://developer.android.com/reference/android/content/RestrictionsManager

    View Slide

  57. 設定値を受け取る
    val manager = activity.getSystemService(
    Context.RESTRICTIONS_SERVICE) as RestrictionsManager
    val restrictions = manager.applicationRestrictions <: return
    val myFeatureEnabled =
    if (restrictions.containsKey("my_feature_enabled")) {
    restrictions.getBoolean("my_feature_enabled")
    } else {
    defaultValue
    }
    doSomething(myFeatureEnabled)
    57
    https://developer.android.com/reference/android/content/RestrictionsManager

    View Slide

  58. val restrictionsFilter =
    IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED)
    val restrictionsReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
    ここでRestrictionsManagerからの設定値の取得などを行う
    }
    }
    registerReceiver(restrictionsReceiver, restrictionsFilter)
    58

    View Slide

  59. 59
    https://chromeenterprise.google/policies
    Chrome for Android
    ChromeにはEnterprise向けに利用ポリ
    シーを配布する機能がある。
    そのAndroid向け実装にManaged
    Configurationsが使われている。
    Managed Configurations
    を使用したアプリの例

    View Slide

  60. Managed Configurationsに対応している場合
    60

    View Slide

  61. Managed Configurationsに対応している場合
    61

    View Slide

  62. Managed Configurationsに対応していない場合
    62

    View Slide

  63. Managed Configurationsの設定
    63

    View Slide

  64. Managed Configurationsの設定
    64

    View Slide

  65. Managed Configurationsの設定
    65

    View Slide

  66. Managed Configurationsの設定
    66
    https://chromeenterprise
    .google/policies

    View Slide

  67. Managed Configurationsの設定
    67

    android:key=<<.
    android:title=<<.
    android:description=<<.
    android:restrictionType=<<. <>

    View Slide

  68. Managed Configurationsの設定
    68

    android:key=<<.
    android:title=<<.
    android:description=<<.
    android:restrictionType=<<. <>

    View Slide

  69. Managed Configurationsの設定
    69

    View Slide

  70. 70
    [
    {
    "toplevel_name": "sample"
    },
    {
    "name": "DroidKaigi",
    "url": "droidkaigi.jp"
    }
    ]
    Chrome for Android
    への反映

    View Slide

  71. Managed Configurations
    ● IT管理者がアプリに対してリモートで設定を配布する
    Connected Apps
    ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う
    ビジネス向けのアプリが実装可能な特別な機能
    71

    View Slide

  72. 仕事用プロファイルで管理されたデバイスにおいて、
    個人用と仕事用両方にインストールされたアプリが領域間を通信できる機能。
    アプリが個人用プロファイルと仕事用プロファイルの間を通信できるようになった状態を
    シングルプロファイルモードという。
    *2023/08時点ではアーリーアクセスのプログラムのため、
    実装や公開手順などの詳細は公式のドキュメントを参照してください。
    https://developers.google.com/android/work/connected-apps
    Connected Apps
    72

    View Slide

  73. 73
    Googleカレンダー
    Connected Appsに対応したアプリは、
    設定>アプリ>特別なアプリアクセス からシ
    ングルプロファイルモードをONにすること
    ができる。
    Connected Apps
    を使用したアプリの例

    View Slide

  74. Connected Appsの許可
    74

    View Slide

  75. 75
    Googleカレンダー
    Googleカレンダーでシングルプロファイル
    モードを有効にすると、
    個人用のカレンダーと仕事用のカレンダー
    を同時に表示することができる。
    シングルプロファイルモード
    Googleカレンダー

    View Slide

  76. 76
    Googleカレンダー
    Googleカレンダーでシングルプロファイル
    モードを有効にすると、
    個人用のカレンダーと仕事用のカレンダー
    を同時に表示することができる。
    シングルプロファイルモード
    Googleカレンダー

    View Slide

  77. 77
    アプリがプロファイル間で通信できるように
    なるため、仕事用のアプリが個人のアプリ
    データにアクセスできてしまう。
    Connected Apps
    の注意点

    View Slide

  78. Managed Configurations
    ● IT管理者がアプリに対してリモートで設定を変更する
    Connected Apps
    ● アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う
    ビジネス向けのアプリが実装可能な特別な機能
    78

    View Slide

  79. まとめ
    79

    View Slide

  80. ● MDMはデバイスを効率的かつ安全に運用するためのサービス
    ● Android EnterpriseとしてMDMの機能が標準化されている
    ○ サーバーサイド:Android Management API
    ○ クライアント:Android Device Policy(DPC), Device Policy Manager
    ● MDMを提供するためにGoogle Playが重要な役割を果たしている
    ○ 自動インストールのようなGoogle Playストアのビジネス向け機能の提供
    ○ サーバーとクライアントの連携
    まとめ 1/2
    80

    View Slide

  81. ● Managed Configurations や Connected Appsによって特殊なユースケース
    へ対応することができる
    ● Managed Configurations
    ○ IT管理者がアプリの設定をリモートで配布できる機能
    ○ アプリ側の実装のみで対応が可能
    ● Connected Apps
    ○ 仕事用プロファイルと個人用プロファイルの間をアプリが通信できる機能
    ○ アーリーアクセスプログラムのため、実装方法や公開手順には注意が必要
    まとめ 2/2
    81

    View Slide

  82. ● https://www.android.com/enterprise/management
    ● https://developers.google.com/android/work/requirements
    ● https://androidenterprisepartners.withgoogle.com/glossary/emm
    ● https://developers.google.com/android/management
    ● https://developer.android.com/work/managed-configurations
    ● https://developer.android.com/reference/android/content/RestrictionsManager
    ● https://developer.android.com/reference/android/app/admin/DevicePolicyManager
    ● https://source.android.com/docs/devices/admin/managed-profiles
    ● https://github.com/googlesamples/android-testdpc
    ● https://developers.google.com/android/work/terminology
    Appendix
    82

    View Slide

  83. ありがとうございました
    83

    View Slide

  84. ビジネス向けアプリを
    開発するときに知っておくべき
    Android Enterpriseの世界
    Yusaku Tanaka (@imsaku) - 2023/09/15, DroidKaigi 2023

    View Slide