Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ビジネス向けアプリを開発するときに知っておくべきAndroid Enterpriseの世界
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yusaku Tanaka
September 15, 2023
Technology
3.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ビジネス向けアプリを開発するときに知っておくべきAndroid Enterpriseの世界
https://2023.droidkaigi.jp/timetable/495201/
Yusaku Tanaka
September 15, 2023
More Decks by Yusaku Tanaka
See All by Yusaku Tanaka
Jetpack Compose Pagerを触ってみよう
imsaku
0
1.8k
Managed Configurations - Enterprise向け設定機能を知る
imsaku
0
1.1k
Other Decks in Technology
See All in Technology
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.1k
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
200
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
4
1k
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
130
フィジカル版Github Onshapeの紹介
shiba_8ro
0
260
AIはどのように 組織のアジリティを変えるのか?
junki
3
930
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
890
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.2k
RAG を使わないという選択肢
tatsutaka
1
250
200個のGitHubリポジトリを横断調査したかった
icck
0
130
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
3
2.2k
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Bash Introduction
62gerente
615
220k
Code Reviewing Like a Champion
maltzj
528
40k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Facilitating Awesome Meetings
lara
57
7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Site-Speed That Sticks
csswizardry
13
1.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
Amusing Abliteration
ianozsvald
1
200
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
310
Odyssey Design
rkendrick25
PRO
2
700
Transcript
ビジネス向けアプリを 開発するときに知っておくべき Android Enterpriseの世界 Yusaku Tanaka (@imsaku) - 2023/09/15, DroidKaigi
2023
About Me Yusaku Tanaka (saku, @imsaku) https://twitter.com/imsaku 2
• デバイス管理の実例を示すためにGoogle Workspaceを利用します ◦ 同等のサービスはGoogle Workspace以外からも提供されています • 特別な機能の実例を示すためにGoogle製のアプリを利用します ◦ これらの機能はGoogle以外のアプリでも利用・実装可能です
本発表について 3
アジェンダ • Android EnterpriseとMDM • MDMの仕組み • 特別な機能 4
Android Enterpriseと MDM • Android EnterpriseとMDM • MDMの仕組み • 特別な機能
5
Android Enterprise 6
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
Android Enterpriseって? • デバイス管理ソリューションの提供 • エンタープライズ向けデバイス • ソリューションを提供するパートナーの認定プログラム • ビジネス向けのカスタマーサポートなど
8 https://www.android.com/enterprise/
• デバイス管理ソリューションの提供 • エンタープライズ向けデバイス • ソリューションを提供するパートナーの認定プログラム • ビジネス向けのカスタマーサポートなど Android Enterpriseって?
9 https://www.android.com/enterprise/
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
Androidのビジネス利用 • 従業員への業務用デバイスの貸与 • 私用端末の持ち込み(BYOD, Bring Your Own Device) •
専用端末(Kiosk) ◦ 飲食店の注文端末 ◦ 配送・在庫管理のハンドヘルドデバイス 11
Androidのビジネス利用 • 従業員への業務用デバイスの貸与 • 私用端末の持ち込み(BYOD, Bring Your Own Device) •
専用端末(Kiosk) ◦ 飲食店の注文端末 ◦ 配送・在庫管理のハンドヘルドデバイス -> デバイス単体でも実現可能だが、運用に課題が生じることもある 12
ビジネス利用における課題の例 13 運用効率 セキュリティ プライバシー セットアップ 紛失による情報漏洩リスク 私物の持ち込み 問い合わせ・トラブル対応 悪意あるアプリの
インストール 労働時間の管理 労働時間外の端末利用 *これらは一例で、企業や組織、ユースケースによって多様な課題が生じる
デバイス管理(MDM) MDM (Mobile Device Management) 企業や組織におけるモバイルデバイス運用をより効率的かつ安全にするためのサービ スのこと。 EMM(Enterprise Mobility Management)と呼ばれることもある。
Androidに限らず、iOSやWindowsなど他プラットフォームと併せてサポートしている 場合がある。 -> 今回はAndroidに限定した領域を扱う。 14
ビジネス利用における課題の例 15 運用効率 セキュリティ プライバシー セットアップ 紛失による情報漏洩リスク 私物の持ち込み 問い合わせ・トラブル対応 悪意あるアプリの
インストール 労働時間の管理 労働時間外の端末利用
MDMによる課題解決の例 16 運用効率 セキュリティ プライバシー アプリの自動インストール Wi-Fi接続情報の配布 リモートからの デバイス初期化・ロック 仕事用プロファイル
管理コンソール 提供元不明アプリの インストール禁止 Google Playストアの管理 仕事用アプリの 一時的な無効化
17 https://developers.google.com/android/work/requirements AndroidにおけるMDMの実装や機能セッ トは、Android Enterpriseとして標準化さ れている。 Android EnterpriseとMDM
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
MDMの仕組み • Android EnterpriseとMDM • MDMの仕組み • 特別な機能 19
20 • すでに使用中の端末を用意する • 設定アプリのアカウントの追加から、 管理対象となっているGoogleアカウ ントにログインする セットアップの例(BYOD)
21 管理対象のアカウントでログインすると、仕 事用プロファイルの設定が始まる セットアップの例(BYOD)
22 • IT管理者が定めたポリシーによって、 セットアップ完了前に各種設定が求め られる。 • ポリシーの例 ◦ ロック画面のパスワード強度 ◦
指定アプリの自動インストール セットアップの例(BYOD)
23 セットアップが完了すると、 仕事用のアプリが表示されるようになる。 セットアップの例(BYOD)
24 セットアップの例(BYOD) $ adb shell pm list users Users: UserInfo{0:my_user_name:123}
running UserInfo{10:仕事用プロファイル:234} running
セットアップの例(BYOD) 25 https://admin.google.com/
26 Digital Wellbeing設定から、 仕事用プロファイルが有効な時間をスケ ジュールできる 仕事プロファイルが無効な時間帯は全て の仕事用アプリが強制終了され、通知や バックグラウンドでの動作をしなくなる BYOD Tips
MDMの主な登場人物 • Androidデバイス / Android OS • MDMサーバー / Web
• Google Play 27
MDMの主な登場人物 • Androidデバイス / Android OS • MDMサーバー / Web
• Google Play 28
Androidデバイスの主な管理対象と権限 デバイスを 企業が所有している デバイスを 個人が所有している( BYOD) デバイス全体を管理する * デバイス内に仕事用の領域を作成し、 仕事用の領域のみを管理する
Device Owner権限 Profile Owner権限 29 *BYODのように個人領域と仕事領域を分ける管理方法も存在する
Device Owner / Profile Owner • MDMを利用するために、デバイス内の特定のアプリに対して付与される管理権 限。 • これらの権限を持つアプリは、DevicePolicyManagerというシステムサービスか
らデバイス管理のための強力なAPIを実行することができる。 30
31 https://developer.android.com/reference/android/app/admin /DevicePolicyManager Device Owner/Profile Owner権限を持 つ特定のアプリから実行可能なAPIを提供 するシステムサービス。 デバイス単位の管理機能は基本的に内部 でこのサービスを実行している。
(e.g.: パスワードの要件、端末初期化) DevicePolicyManager
32 https://developer.android.com/reference/android/app/admin /DevicePolicyManager Device Owner/Profile Owner権限を 持つ特定のアプリから実行可能なAPIを提 供するシステムサービス。 デバイス単位の管理機能は基本的に内部 でこのサービスを実行している。
(e.g.: パスワードの要件、端末初期化) DevicePolicyManager
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
MDMの主な登場人物 • Androidデバイス / Android OS • MDMサーバー / Web
• Google Play 34
MDMサーバー • Google Playが提供しているAndroid Management APIを使用して、MDMの 各機能を実装する。 • このAPIではデバイスの登録から利用ポリシーの設定、アプリの自動インストールと いったAndroid
Enterpriseの標準的な機能が全て提供されている。 35 https://developers.google.com/android/management
36 https://admin.google.com/ 一般的にMDMサービスでは、IT管理者向 けの管理コンソールをWebで提供してい る。 これによって、従業員のデバイスの状態を 確認することができる。 MDMサーバー / Web
MDMの主な登場人物 • Androidデバイス / Android OS • MDMサーバー / Web
• Google Play 37
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
特別な機能 • Android EnterpriseとMDM • MDMの仕組み • 特別な機能 39
Managed Configurations • IT管理者がアプリに対してリモートで設定を配布する Connected Apps • アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 40
Managed Configurations • IT管理者がアプリに対してリモートで設定を配布する Connected Apps • アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 41
Managed Configurations IT管理者がアプリの設定を変更して各デバイスに反映することができる。 設定値はMDMとデバイスの間をGoogle Play経由でやりとりするため、 アプリは設定値の定義とPlatform APIからの値取得のみで実装できるのが特徴。 42 https://developer.android.com/work/managed-configurations
Managed Configurations アプリ • Managed Configurationsの設定スキーマを定義 • Managed Configurationsを受け取る処理を実装 •
Google Playでアプリを公開* MDM • Google Playから提供されるアプリ情報を元に設定UIを表示 • IT管理者が管理コンソールから設定を作成 43 *厳密にはこの限りではなく、 Google Playがホストするプライベートアプリでも利用可能
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
Managed Configurations アプリ • Managed Configurationsの設定スキーマを定義 • 設定値を受け取る処理の実装 • Google
Playでアプリを公開 MDM • Google Playから設定スキーマを参照 • 管理コンソールから設定を作成 45
Managed Configurations アプリ • Managed Configurationsの設定スキーマを定義 • 設定値を受け取る処理の実装 • Google
Playでアプリを公開 MDM • Google Playから設定スキーマを参照 • 管理コンソールから設定を作成 46
Managed Configurationsの宣言 <application> <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions" <> <<. 47 AndroidManifest.xmlでManaged
Configurationsの使用を宣言する
res/xml/app_restrictions.xml <?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http:</schemas.android.com/apk/res/android"> <restriction android:key="my_feature_enabled" android:title="@string/title_my_feature" android:description="@string/description_my_feature"
android:restrictionType="bool" android:defaultValue="true" <> </restrictions> 48 https://developer.android.com/work/managed-configurations#define-configuration
res/xml/app_restrictions.xml <?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http:</schemas.android.com/apk/res/android"> <restriction android:key="my_feature_enabled" android:title="@string/title_my_feature" android:description="@string/description_my_feature"
android:restrictionType="bool" android:defaultValue="true" <> </restrictions> 49 https://developer.android.com/work/managed-configurations#define-configuration
res/xml/app_restrictions.xml <?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http:</schemas.android.com/apk/res/android"> <restriction android:key="my_feature_enabled" android:title="@string/title_my_feature" android:description="@string/description_my_feature"
android:restrictionType="bool" android:defaultValue="true" <> </restrictions> 50 https://developer.android.com/work/managed-configurations#define-configuration
res/xml/app_restrictions.xml <?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http:</schemas.android.com/apk/res/android"> <restriction android:key="my_feature_enabled" android:title="@string/title_my_feature" android:description="@string/description_my_feature"
android:restrictionType="bool" <> </restrictions> 51 https://developer.android.com/work/managed-configurations#define-configuration
Managed Configurations アプリ • Managed Configurationsの設定スキーマを定義 • 設定値を受け取る処理の実装 • Google
Playでアプリを公開 MDM • Google Playから設定スキーマを参照 • 管理コンソールから設定を作成 52
設定値を受け取る 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
設定値を受け取る 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
設定値を受け取る 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
設定値を受け取る 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
設定値を受け取る 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
val restrictionsFilter = IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED) val restrictionsReceiver = object : BroadcastReceiver()
{ override fun onReceive(context: Context, intent: Intent) { </ ここでRestrictionsManagerからの設定値の取得などを行う } } registerReceiver(restrictionsReceiver, restrictionsFilter) 58
59 https://chromeenterprise.google/policies Chrome for Android ChromeにはEnterprise向けに利用ポリ シーを配布する機能がある。 そのAndroid向け実装にManaged Configurationsが使われている。 Managed
Configurations を使用したアプリの例
Managed Configurationsに対応している場合 60
Managed Configurationsに対応している場合 61
Managed Configurationsに対応していない場合 62
Managed Configurationsの設定 63
Managed Configurationsの設定 64
Managed Configurationsの設定 65
Managed Configurationsの設定 66 https://chromeenterprise .google/policies
Managed Configurationsの設定 67 <?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android=<<. <restriction android:key=<<.
android:title=<<. android:description=<<. android:restrictionType=<<. <> </restrictions>
Managed Configurationsの設定 68 <?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android=<<. <restriction android:key=<<.
android:title=<<. android:description=<<. android:restrictionType=<<. <> </restrictions>
Managed Configurationsの設定 69
70 [ { "toplevel_name": "sample" }, { "name": "DroidKaigi", "url":
"droidkaigi.jp" } ] Chrome for Android への反映
Managed Configurations • IT管理者がアプリに対してリモートで設定を配布する Connected Apps • アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 71
仕事用プロファイルで管理されたデバイスにおいて、 個人用と仕事用両方にインストールされたアプリが領域間を通信できる機能。 アプリが個人用プロファイルと仕事用プロファイルの間を通信できるようになった状態を シングルプロファイルモードという。 *2023/08時点ではアーリーアクセスのプログラムのため、 実装や公開手順などの詳細は公式のドキュメントを参照してください。 https://developers.google.com/android/work/connected-apps Connected Apps 72
73 Googleカレンダー Connected Appsに対応したアプリは、 設定>アプリ>特別なアプリアクセス からシ ングルプロファイルモードをONにすること ができる。 Connected Apps
を使用したアプリの例
Connected Appsの許可 74
75 Googleカレンダー Googleカレンダーでシングルプロファイル モードを有効にすると、 個人用のカレンダーと仕事用のカレンダー を同時に表示することができる。 シングルプロファイルモード Googleカレンダー
76 Googleカレンダー Googleカレンダーでシングルプロファイル モードを有効にすると、 個人用のカレンダーと仕事用のカレンダー を同時に表示することができる。 シングルプロファイルモード Googleカレンダー
77 アプリがプロファイル間で通信できるように なるため、仕事用のアプリが個人のアプリ データにアクセスできてしまう。 Connected Apps の注意点
Managed Configurations • IT管理者がアプリに対してリモートで設定を変更する Connected Apps • アプリが仕事用プロファイルと個人用プロファイルの間で通信を行う ビジネス向けのアプリが実装可能な特別な機能 78
まとめ 79
• MDMはデバイスを効率的かつ安全に運用するためのサービス • Android EnterpriseとしてMDMの機能が標準化されている ◦ サーバーサイド:Android Management API ◦
クライアント:Android Device Policy(DPC), Device Policy Manager • MDMを提供するためにGoogle Playが重要な役割を果たしている ◦ 自動インストールのようなGoogle Playストアのビジネス向け機能の提供 ◦ サーバーとクライアントの連携 まとめ 1/2 80
• Managed Configurations や Connected Appsによって特殊なユースケース へ対応することができる • Managed Configurations
◦ IT管理者がアプリの設定をリモートで配布できる機能 ◦ アプリ側の実装のみで対応が可能 • Connected Apps ◦ 仕事用プロファイルと個人用プロファイルの間をアプリが通信できる機能 ◦ アーリーアクセスプログラムのため、実装方法や公開手順には注意が必要 まとめ 2/2 81
• 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
ありがとうございました 83
ビジネス向けアプリを 開発するときに知っておくべき Android Enterpriseの世界 Yusaku Tanaka (@imsaku) - 2023/09/15, DroidKaigi
2023