デバイスをプロビジョニングするには、いくつかの方法があります。使用するプロビジョニング方法はユーザーのビジネス要件によって決まります。
デバイスのプロビジョニングの基本
お客様がサポートしたいデバイス プロビジョニングのデプロイ シナリオ(BYOD や会社所有デバイスなど)によって、使用する運用モード(デバイス所有者モードやプロファイル所有者モードなど)が決まります。同様に、サポートする運用モードと Android リリースによって、実装するプロビジョニング方法が決まります。
デプロイメント シナリオ
会社所有のデプロイのシナリオでは、企業は従業員が使用するデバイスを所有し、完全に管理します。一般に、組織はデバイス全体を厳密にモニタリングして管理する必要がある場合に、会社所有のデバイスをデプロイします。
BYOD デプロイ シナリオをサポートする会社は、従業員が個人所有のデバイスを稼働させ、それらのデバイスを使用して特権的な企業情報やアプリケーションにアクセスできます。
運用モード
会社所有のデプロイは、デバイス所有者オペレーション モードでサポートされます。Android では、管理アプリは Device Policy Controller(DPC)と呼ばれます。DPC は Android デバイスにポリシーを適用し、デバイス所有者として機能するときはデバイス全体を管理します。DPC はデバイス所有者として、デバイス全体の接続の構成、グローバル設定の構成、出荷時設定へのリセットなど、デバイス全体のアクションを実行できます。
BYOD のデプロイは、プロファイル オーナーのオペレーション モードでサポートされています。企業は DPC を通じて、デバイス上のプライマリ ユーザー アカウントに仕事用プロファイルを追加することで、個人用デバイスを仕事用に利用できます。仕事用プロファイルはプライマリ ユーザーに関連付けられていますが、独立したプロファイルとして関連付けられています。プロファイル所有者として、DPC はデバイス上の仕事用プロファイルのみを管理し、仕事用プロファイルの外部では制御を限定します。
レガシー デバイスのデプロイはレガシー オペレーション モードでサポートされています。このモードでは、DPC によるデバイスの制御が制限されます(デバイスのワイプ、パスコードの要求、一部のポリシーの適用など)。ユーザーに Google アカウントの追加を許可するか、DPC のレガシー デバイスに managed Google Play アカウントを追加できるようにすることで、Google Play によるレガシー デバイスでのアプリ管理を提供できます。
デバイス所有者モードまたはプロファイル所有者モードを実装できるデプロイでは、以前のモードはおすすめしません。大規模なフリート全体で「最小公分母」のソリューションを使用するのではなく、可能な限り最高レベルのデバイス管理を使用する必要があります。
デバイス所有者のプロビジョニング方法
新しいデバイスの初期セットアップ時または出荷時設定へのリセット後に、デバイス所有者モードをプロビジョニングする必要があります。それ以外の時点では、デバイス所有者モードをプロビジョニングすることはできません。
デバイス所有者モードのプロビジョニングには、ユースケースに応じて 2 つの主要なプロビジョニング タイプがあります。
- デバイス ドリブン フローでは、IT 管理者は NFC を使用して多数のデバイスをプロビジョニングできます。このフローは managed Google Play アカウントまたは G Suite のシナリオで使用できます。
- ユーザー主導のフローでのオプションは、組織が G Suite を使用するかどうかによって異なります。
- G Suite のシナリオでは、最初のデバイスのセットアップ時に Google アカウントを追加し、DPC がデバイス所有者の設定手順をお客様に案内する必要があります。ユーザー主導のフローでは、エンドユーザーが新しいデバイスをセットアップしやすくなります。また、デバイスが NFC をサポートしていない場合の代替手段にもなります。
- 組織で G Suite を使用していない場合は、managed Google Play アカウント メソッドを使用してください。
プロファイル所有者のプロビジョニング方法
プロファイル オーナーの運用モードをプロビジョニングする方法は、組織が G Suite を使用しているかどうかによって異なります。
- G Suite の場合、おすすめの方法は、ユーザーがユーザー Google アカウントを追加して、DPC がプロファイル所有者の設定手順を行うユーザー主導のフローです。
- 組織で G Suite を使用しない場合は、managed Google Play アカウント メソッドを使用することをおすすめします。
DPC を手動でインストールするように指示されている従来の方法もサポートされます。DPC は、ユーザーが Google Play から DPC をダウンロードしてインストールすることに依存します。その後、DPC は、ユーザーにプロファイル所有者を設定する残りのプロセスを案内します。
レガシー デバイスのプロビジョニング方法
従来のデバイスに搭載されている Android のバージョンが 5.0 より前、または仕事用プロファイルをサポートしていない。レガシー デバイスをプロビジョニングする方法は、組織が管理対象の Google アカウントを使用しているかどうかによって異なります。
- 管理対象の Google アカウントの場合、ユーザーが Google アカウントを追加するユーザー主導のフローをおすすめします。DPC は、ユーザーに設定手順をご案内します。
- 組織で managed Google アカウントを使用しない場合は、managed Google Play アカウント メソッドを使用することをおすすめします。この方法では、ユーザーが Google Play から DPC をインストールします。DPC では、以前の Google Play アカウントを追加できます。これは、アカウントを仕事用プロファイルに追加する場合と同様です。
DPC を手動でインストールするようユーザーに指示され、DPC が Google アカウントを追加する従来の方法もサポートされます。Google Play から DPC をダウンロードしてインストールするには、ユーザーの判断が必要になります。DPC はセットアップの残りのプロセスをユーザーに案内します。
Android バージョン間のプロビジョニングに関する主な違い
デプロイ シナリオ |
運用 モード |
プロビジョニング メソッド |
*5.0 より前 |
5.0、 5.1 |
6.0 後 |
7.0 後 |
会社所有 | デバイス所有者 | QR コード | ✓ | |||
managed Google Play アカウント | ✓ | ✓ | ||||
Google アカウント | ✓ | ✓ | ||||
NFC | ✓ | ✓ | ✓ | |||
レガシー | managed Google Play アカウント | ✓ | ||||
Google アカウント | ✓ | |||||
BYOD | プロファイル所有者 | managed Google Play アカウント | ✓ | ✓ | ✓ | |
Google アカウント | **5.1 | ✓ | ✓ | |||
DPC を手動でインストールする | ✓ | ✓ | ✓ | |||
レガシー | managed Google Play アカウント | ✓ | ||||
Google アカウント | ✓ | |||||
DPC を手動でインストールする | ✓ |
*以前のモードは、仕事用プロファイルをサポートしていないデバイスにも推奨されます。デバイスに搭載された Android のバージョンが 5.0 以降である場合も同様です。通常は RAM の容量が少ないデバイスです。
**Android 5.1 の Google アカウント メソッドでサポートされるのは、プロファイル所有者モードのみで、ユーザーは [設定] > [アカウントを追加] でのみ設定できます。
実装に関する一般的な考慮事項
実装するオペレーションの種類にかかわらず、DPC を記述する際は、次の点を考慮してください。
Google Play 開発者サービスの互換性
Google Play 開発者サービスの APK ガイドでは、API トランザクションを実行する前に Google Play 開発者サービスのバージョン チェックを行うようデベロッパーに説明されています。Google Play 開発者サービスの更新を試みると、デバイスのセットアップ プロセスに大幅な中断が生じるため、DPC はデバイスのプロビジョニングが完了する前に Google Play 開発者サービスの更新を試行してはなりません。
DPC と Google Play 開発者サービスとの互換性に関する重要ポイントは次のとおりです。
- DPC は、特定のデバイスに付属の Google Play 開発者サービスを使用して実行する必要があります。
- DPC は、デバイスのプロビジョニング時に使用可能な Google Play 開発者サービスの今後のバージョンで新機能に依存しないようにしてください。
デバイスのプロビジョニングが完了すると、DPC は Google Play 開発者サービスを更新してユーザーに最新の機能を使用できるようにすることができます。ただし、なんらかの理由で機能を利用できない場合は、DPC はデバイスに同梱されているバージョンにフォールバックする必要があります。
プロファイル所有者モードの実装に関する考慮事項
プロファイル所有者の運用モードを実装する DPC を作成する際は、次の点を考慮してください。
個人の DPC を削除または無効化する
プロファイル所有者モードをプロビジョニングすると、DPC は個人用プロファイルで動作し、仕事用プロファイルを作成するプロセスを開始します。仕事用プロファイルを作成すると、DPC も仕事用プロファイル内で実行されます。仕事用プロファイルの DPC は、プロビジョニング プロセスを完了します。その時点で、個人用プロファイルの DPC は自身で無効にするか、デバイス ユーザーがそれを削除する必要があります。
ユーザーが個人の DPC を削除する
- 個人用 DPC は
ACTION_MANAGED_PROFILE_PROVISIONED.
をリッスンします(Android 5.1 デバイスでは、代わりに個人用 DPC がACTION_MANAGED_PROFILE_ADDED
をリッスンします)。 - 個人用 DPC がアンインストール リクエスト
ACTION_UNINSTALL_PACKAGE
を開始します。これにより、ユーザーは個人用 DPC をアンインストールするように求められます。最高のユーザー エクスペリエンスを実現するには、プロビジョニング フロー中にアンインストール プロセスを行う必要があります。
個人用 DPC は自動的に無効化
- 個人用 DPC は
ACTION_MANAGED_PROFILE_PROVISIONED.
をリッスンします(Android 5.1 デバイスでは、代わりに個人用 DPC がACTION_MANAGED_PROFILE_ADDED
をリッスンします)。 - 該当する場合、個人用 DPC は、自身を無効にする前にデバイスの管理者権限を解放する必要があります。
- 個人用 DPC は、
COMPONENT_ENABLED_STATE_DISABLED
パラメータを使用してsetApplicationEnabledSetting
無効化リクエストを開始します。 - ユーザーは Google Play から個人の DPC を再度有効にすることができます。
デバイス所有者モードの実装に関する考慮事項
デバイス所有者モードの DPC を作成する際は、次の点を考慮してください。
新品または出荷時設定へのリセット
新しいデバイスの初期セットアップ時または出荷時設定へのリセット後に、デバイス所有者モードをプロビジョニングする必要があります。他のデバイスでデバイス所有者モードをプロビジョニングすることはできません。
デバイス所有者モードは、DPC がデバイスを完全に制御できるようにします。初期セットアップが許可された後にデバイス所有者モードをプロビジョニングする場合:
- マルウェアがデバイス所有者を作成し、デバイスを乗っ取る可能性もあります。
- デバイスにユーザーデータやアプリがすでに存在する場合、プライバシーの問題が発生する可能性があります。
会社所有デバイスでのみデバイス所有者モードを設定する
デバイス所有者モードは、お客様の会社で所有していることが確認されたデバイスにのみプロビジョニングします。これを確認するには、一意のデバイス識別子(シリアル番号など)を検出するか、EMM ポリシーでデバイスを登録するための承認済みの専用アカウントを使用します。
デバイスの所有権を証明できない場合は、デバイス所有者モードが誤ってプロビジョニングされないように、フェイルセーフ メカニズムを作成する必要があります。たとえば、デバイス所有者モードをプロビジョニングする前に、デバイス ユーザーに確認やなんらかのアクションを促します。
システムアプリを有効にする
DPC が仕事用プロファイルをプロビジョニングする場合、ランチャー アイコンのないシステムアプリはデバイスで不可欠であると見なされ、仕事用プロファイルでの実行が自動的に許可されます。ランチャー アイコンがあるシステムアプリはオプションとみなされるため、有効にするかどうかを決定できます。
Google Play を通じてシステムアプリを有効にする
Google Play でシステムアプリを簡単に有効化できます。アプリのアップデートが利用可能になり次第、お客様に配信されます。
Android フレームワーク API を使用してシステムアプリを有効にする
ユーザーがデバイスの使用を開始したらすぐにシステムアプリを表示するには、デバイスのプロビジョニング プロセスの一環としてシステムアプリを有効にします。DPC は、DevicePolicyManager.enableSystemApp()
を使用してパッケージ名またはインテントでシステムアプリを有効にします。
EMM コンソールで有効にして IT 管理者に提示するシステムアプリを特定する方法はいくつかあります。
システムアプリ カタログを作成する
この方法では、各デバイスがデバイス上のアプリを判別し、そのデータを EMM コンソールに返します。EMM コンソールは、デバイス ポリシーの作成時にこのデータを動的に表示するため、IT 管理者はアプリごとにアプリを管理できます。
- 仕事用プロファイルがまだデバイスにプロビジョニングされていない場合は、
queryIntentActivities()
を使用して、デバイス上のランチャー アイコンがあるすべてのアプリのリストを取得します。
private List
getAppsWithLauncher() {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
return getPackageManager().queryIntentActivities(i, 0);
} - 仕事用プロファイルがすでにデバイスでプロビジョニングされている場合は、
PackageManager.GET_DISABLED_COMPONENTS
とPackageManager.GET_UNINSTALLED_PACKAGES
を使用して、仕事用プロファイルのすべてのアプリのリストを取得します。 - アプリリストでシステムアプリを見つけるには、
FLAG_SYSTEM
を確認します。これは、アプリがデバイスのシステム イメージにインストールされているかどうかを示します。
長所:
- IT 管理者には、すべてのデバイスにおけるアプリの全体像を提示します。
- 有効にするアプリをきめ細かく制御できます。
デメリット:
- デバイスごとに異なるアプリカタログがあるため、単一のポリシー構成のモデルを複数のデバイスタイプに適用することは困難です。
- OEM 固有のアプリを IT 管理者にとって意味のある形で提示することは困難な場合があります。
システムアプリを機能別に分類する
IT 管理者がデバイスのグループでシステムアプリを有効にする場合、機能に基づいて一般的なアプリ(「システム ブラウザ」など)を選択します。DPC はそのインテントに対してすべてのシステムアプリを許可します。
長所:
- IT 管理者向けのシンプルな機能ベースの支援。
- さまざまなデバイスで一貫した機能を確保します(少なくとも一般的なユースケースで使用)。
デメリット:
- システムアプリを、すべてのデバイスタイプでサポートされているものに制限します。
- IT 管理者は、アプリのいずれかの OEM バージョン(Samsung® ブラウザなど)をプッシュし、別の OEM アプリ(LG® ブラウザなど)はプッシュしないことをおすすめします。
- IT 管理者は複数のアプリを push したくない場合がありますが、複数のインテント ハンドラが存在する場合は防止できません。
承認済みのシステムアプリのみをサポートする
OEM と協力して特定の OEM パッケージを特定し、EMM コンソールでそれらのパッケージのみをサポートします。また、OEM アプリが Google Play でホストされていないため、OEM アプリのマネージド構成をカタログ化することもできます。
長所:
- 統合ワークフローを大幅に簡素化し、最初の 2 つのオプションに問題があるエッジケースを排除します。
- OEM アプリのマネージド構成をカタログ化して、IT 管理者の EMM コンソールで表示できます。
- フラッグシップ デバイスをサポートするために、OEM との緊密な関係を実現します。
デメリット:
- スケーラビリティが低く、結果的に消費者の選択が少なくなります。
以前のモードの実装に関する考慮事項
以前の運用モードを実装する DPC を作成する際は、次の点を考慮してください。
デバイスが仕事用プロファイルをサポートしているか確認する
仕事用プロファイルをサポートしていないデバイスの場合は、従来の運用モードをプロビジョニングできます。次のような場合、デバイスは仕事用プロファイルをサポートしていません。
- 5.0 より前のバージョンの Android を搭載している。
- 5.0 以降の Android バージョンでも、RAM 容量が小さい。
仕事用プロファイルがサポートされているかどうかを確認するには、DPC で PackageManager を使用します。
if (!getPackageManager().hasSystemFeature(
PackageManager.FEATURE_MANAGED_USERS)) {
// Use legacy mode
...
}
DPC のテストシナリオ
Test DPC は、DPC アプリの機能をテストするために Google が提供するオープンソースのアプリです。Test DPC は github または Google Play から入手できます。Test DPC では次のことができます。
- Android で機能をシミュレートする
- ポリシーの設定と適用
- アプリとインテントの制限を設定する
- 仕事用プロファイルの設定
- フルマネージドの Android デバイスを設定する
Test DPC は、主に Android 向けのエンタープライズ ソリューションのテストに使用するものですが、Android 機能のサンプルコードのソースとして使用することもできます。
プロビジョニングのカスタマイズ
デバイスのプロビジョニング中は、システム ユーザー インターフェースのステータスバーにデフォルトの色が表示され、画面上部にデフォルトのロゴが表示されます。カスタムの色とロゴを設定して、DPC とシステム インターフェース間の視覚的な遷移に一貫性を持たせたり、管理者が EMM コンソールを使用して移行したりできるようにします。たとえば、管理者は会社のロゴをアップロードしたり、通知を表示する画面の外観をカスタマイズしたりできます。
DPC では、DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR
エクストラと DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI
エクストラを使用して、色とロゴを選択できます。
カスタムカラーを設定するには、EXTRA_PROVISIONING_MAIN_COLOR
を使用して、デバイスのプロビジョニング中に表示するメインの色を示す整数を設定します。ACTION_PROVISION_MANAGED_PROFILE
または ACTION_PROVISION_MANAGED_DEVICE
を使用して、インテントにエクストラ(定数)を追加します。
整数の表現方法については、色をご覧ください。例として、MAIN_COLOR in
the TestDPC app
をご覧ください。
カスタムロゴを設定するには、EXTRA_PROVISIONING_LOGO_URI
を使用して、デバイスのプロビジョニング中に画面上部に表示される画像を設定します。ACTION_PROVISION_MANAGED_PROFILE
または ACTION_PROVISION_MANAGED_DEVICE
を使用して、エクストラ(定数)をインテントに配置します。画像のピクセル密度が適正であることを確認します。
例については、TestDPC アプリの LOGO_URI
をご覧ください。
QR コード方式
QR コードのプロビジョニング方法では、設定ウィザードから QR コードをスキャンしてデバイス所有者モードを設定および構成します。QR コードには、DPC がデバイスをプロビジョニングするために必要なすべての情報を含む Key-Value ペアのペイロードが含まれています。
EMM コンソールには、プロビジョニングするデバイス用の QR コードを IT 管理者が作成できます。IT 管理者はエンドユーザーに QR コードを送信し、エンドユーザーは QR コードをスキャンしてデバイスをプロビジョニングします。
QR コードのプロビジョニングのユースケース
タブレットなどの一部のデバイスは NFC に対応していません。QR コードのプロビジョニングは、NFC をサポートしていない一連のデバイスを簡単にプロビジョニングするための方法です。IT 管理者は、ユーザーに対して QR コードを送信して、ユーザー主導のプロビジョニングを行うことができます。
QR コード プロビジョニングには、Google ドメインや Google アカウントなどの Google の ID は必要ありません。Android を使用しているが G Suite を使用していない組織には、Google ID がありません。
NFC と同様に、QR コードのプロビジョニングにより、Google ID(または任意の ID)を必要としない、または望ましくないキオスクや単一用途のデプロイが可能になります。たとえば、店舗のキオスク デバイスは誰のものでもなく、エンドユーザー ID を持つべきではありません。
QR コードを作成
QR コードのプロビジョニングに有効な QR コードは、UTF-8 でエンコードされた JavaScript® Object Notation(JSON)文字列です。有効な QR コードに以下のプロパティを含めることができます。
常に必要
DPC がまだデバイスにインストールされていない場合に必須
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
デバイスがまだ Wi-Fi に接続されていない場合に推奨
Optional
EXTRA_PROVISIONING_LOCALE
EXTRA_PROVISIONING_TIME_ZONE
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER
EXTRA_PROVISIONING_LOCAL_TIME
EXTRA_PROVISIONING_WIFI_HIDDEN
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
EXTRA_PROVISIONING_WIFI_PROXY_HOST
EXTRA_PROVISIONING_WIFI_PROXY_PORT
EXTRA_PROVISIONING_WIFI_PROXY_BYPASS
EXTRA_PROVISIONING_WIFI_PAC_URL
EXTRA_PROVISIONING_SKIP_ENCRYPTION
このサンプルで有効な QR コードを作成します。
{ "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME": "com.emm.android/com.emm.android.DeviceAdminReceiver", "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM": "gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=", "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://path.to/dpc.apk", "android.app.extra.PROVISIONING_SKIP_ENCRYPTION": false, "android.app.extra.PROVISIONING_WIFI_SSID": "GuestNetwork", "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": { "dpc_company_name": "Acme Inc.", "emm_server_url": "https://server.emm.biz:8787", "another_custom_dpc_key": "dpc_custom_value" } }
QR コードのプロビジョニング プロセス
- セットアップ ウィザードで、ようこそ画面を 6 回タップすると、タップは画面上の同じ場所で行う必要があります。
- セットアップ ウィザードで QR コードリーダーをダウンロードできるように、インターネットに接続するよう求めるメッセージが表示されます。
- Google Play 開発者サービスは、QR コード認識エンジンを含むモジュールをダウンロードします。
- ユーザーが、IT 管理者から提供された QR コードをスキャンします。
- 設定ウィザードが DPC アプリをダウンロードし、
ACTION_PROVISION_MANAGED_DEVICE
を使用してデバイス所有者のプロビジョニング プロセスを開始します。
managed Google Play アカウント メソッド
DPC は、managed Google Play アカウントのプロビジョニング方法を使用して、デバイス所有者モードまたはプロファイル所有者モードを設定できます。このプロビジョニング方法は、現在 G Suite を使用していない組織を対象としています。
managed Google Play アカウントのプロビジョニング方法では、 DPC サポート ライブラリを使用します。このクライアント ライブラリを使用すると、managed Google Play アカウントをスムーズに運営できます。また、managed Google Play アカウントのプロビジョニング プロセスに対する今後の更新との互換性も維持されます。
デバイスのプロビジョニングの前提条件
- エンタープライズの作成と登録で説明されているように、エンタープライズ ID が作成されて EMM ID で登録され、ESA が設定されます。
- ユーザーの企業 ID は EMM コンソールで知られています。
- ユーザーは、EMM コンソールで承認された認証情報(通常は会社のメール認証情報)を使用して DPC アプリにログインできます。
プロファイル所有者モードを設定する
個人所有デバイスとして BYOD シナリオで使用されているデバイスには、プロファイル オーナーの運用モードをプロビジョニングできます。
- ユーザーが Google Play から手動で DPC をダウンロードして、起動します。
- DPC は、
ACTION_PROVISION_MANAGED_PROFILE
を使用して仕事用プロファイルをプロビジョニングします。 - 最後の設定手順を完了します。
デバイス所有者モードを設定する
新しいデバイスの初期セットアップ時または出荷時設定へのリセット後に、デバイス所有者モードをプロビジョニングする必要があります。それ以外の時点では、デバイス所有者モードをプロビジョニングすることはできません。
デバイスのセットアップ中に、アカウントの追加を求めるメッセージが表示されたら、特別な DPC 固有のトークンを入力します。トークンは「afw#DPC_IDENTIFIER」の形式です。ACME という名前の EMM の場合、「afw#acme」は ACME EMM のデフォルトの DPC をインストールします。各 EMM は、プロビジョニング プロセスで使用するために、特定の DPC 識別子を Google にリクエストする必要があります。
- ユーザーが新しいデバイスまたは初期状態にリセットしたデバイスの電源を入れると、設定ウィザードが起動します。
- アカウントを追加するように求められたら、「afw#DPC_IDENTIFIER」の形式で特別なトークンを入力します。このトークンは EMM の DPC を識別します。
- トークンで DPC 識別子を使用して、設定ウィザードにより、一時的な Google アカウントがデバイスに追加されます。この一時アカウントは、Google Play から EMM の DPC をダウンロードする目的でのみ使用され、最後の設定手順で削除されます。
- DPC は、
ACTION_PROVISION_MANAGED_DEVICE
を使用してデバイスをプロビジョニングします。 - 最後の設定手順を完了します。
以前のモードを設定
デバイスが仕事用プロファイルをサポートしていない場合は、個人所有デバイスとして BYOD シナリオで使用されているデバイスに、従来の運用モードをプロビジョニングできます。
すべての運用モードの最終設定手順
以下の手順は、プロファイル所有者モード、デバイス所有者モード、以前のモードのいずれかを設定する後にのみ行ってください。
- DPC は、DPC サポート ライブラリを初期化することで、デバイスが managed Google Play アカウントをサポートできるようにします。
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin); androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
デバイス所有者モードをセットアップする場合、この手順では、DPC をダウンロードするために追加された一時的な Google アカウントを削除します。 - EMM 認証情報を使用して DPC にログインします。通常、これらは会社のメール認証情報です。
- DPC は、認証済みの企業ユーザーの Google Play アカウントの認証情報を EMM コンソールにリクエストします。
- EMM コンソールにそのユーザーの Google Play
userId
がない場合は、Users.insert()
を呼び出して新しいユーザーを作成します。デバイス所有者モードをプロビジョニングする場合は、デバイス アカウント(専用のデバイス デプロイ用)またはユーザー アカウント(会社所有のデプロイ用)を指定します。注: ユーザー ID は EMM 固有のものであるため、企業の登録を解除した後、別の EMM で再登録すると、その ID を再利用することはできません。
Devices.update
を呼び出して、デバイスのポリシーを設定します。このポリシーは、managed Google Play アカウントをデバイスに追加する前に設定する必要があります。そうしないと、アカウントにデバイスを追加した後しばらくの間、ポリシーは適用されません。- EMM コンソールが
Users.generateAuthenticationToken()
を呼び出して、userId
のアカウント認証情報をリクエストします。この認証トークンは有効期間が短いため、再利用できません。DPC はトークンを使用して、プログラムによってアカウントを追加する必要があります(エンドユーザーは使用しません)。 - Google Play EMM API は EMM コンソールに認証トークンを返します。
- EMM コンソールが認証トークンを DPC に転送します。
- DPC は、
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
を使用して managed Google Play アカウントをデバイスに追加します。
Google アカウントによる方法
DPC は、Google アカウントのプロビジョニング方法を使用して、デバイス所有者モード、プロファイル所有者モード、または以前のモードを設定できます。Google アカウントのプロビジョニング方法では、DPC は、ユーザーがデバイスの初期設定中に Google アカウントを追加した後、プロビジョニングの手順をユーザーに案内します。
ユーザーが Google アカウントの認証情報を入力すると、次のようになります。
- Google 認証サーバーがユーザー アカウントを認証します。
- その後、認証サーバーはエンタープライズ サーバーと通信して、アカウントのドメインが G Suite ドメインと EMM 管理ドメインのどちらとして登録されているかを確認します。
- その場合、システムはドメインに関連付けられた DPC を Google Play から自動的にダウンロードしてインストールします。
プロファイル所有者モードを設定する
デバイスの初期セットアップ時、またはユーザーが [設定] > [アカウントを追加] を使用してアカウントを追加する際に、プロファイル所有者の運用モードをプロビジョニングできます。
- アカウントの認証は、ユーザーが設定ウィザードまたは [設定] > [アカウントを追加] から開始します。
GMSCore が
[PROVISION_FROM_TRUSTED_SOURCE]
.
を使用して仕事用プロファイルのプロビジョニングを開始します。DPC はデバイスに自動的にダウンロードされ、
ACTION_GET_PROVISIONING_MODE
ハンドラを使用して起動されます。これにより、仕事用プロファイルのプロビジョニングが DPC でサポートされていることを確認できます。EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
-仕事用プロファイルに関する追加情報(メールアドレスなど)。このバンドルの一部として、DPC も is_setup_wizard を受け取ります。このバンドルは、ACTION_GET_PROVISIONING_MODE
ハンドラとACTION_ADMIN_POLICY_COMPLIANCE
ハンドラに含まれます。
EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
-新しい仕事用プロファイルに移行する認証済みアカウントの名前。プラットフォームにより、仕事用プロファイルのプロビジョニングが行われます。
仕事用プロファイルがプロビジョニングされると、DPC はブロードキャストを受信します。
ACTION_PROFILE_PROVISIONING_COMPLETE
DPC のACTION_ADMIN_POLICY_COMPLIANCE
ハンドラが仕事用プロファイルで起動されます。
仕事用プロファイルが作成されると、DPC も仕事用プロファイル内で実行されます。DPC はその管理対象 Google アカウントのポリシーをプッシュし、デバイスが不正使用されていない状態を保ち、ポリシーが適用されていることを確認します(パスワードの要求など)。個人用プロファイルの DPC は無効になるか、ユーザーが削除する。

デバイス所有者モードまたは COPE をセットアップする
新しいデバイスの初期セットアップ時または出荷時設定へのリセット後に、デバイス所有者モードをプロビジョニングする必要があります。デバイス所有者モードをデバイスに追加することはできません。
- アカウントの認証は、設定ウィザードでユーザーによって開始されます。
- GMSCore が、
[PROVISION_FROM_TRUSTED\SOURCE]
を使用してデバイス所有者のプロビジョニングを開始します。 3. DPC は自動的にデバイスにダウンロードされ、GET_PROVISIONING_MODE
ハンドラで起動して目的のプロビジョニング モードを選択します。EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
-仕事用プロファイルの追加情報(言語 / 地域、Wi-Fi、メールアドレスなど)。このバンドルの一部として、DPC も is_setup_wizard を受け取ります。このバンドルは、ACTION_GET_PROVISIONING_MODE
とACTION_ADMIN_POLICY_COMPLIANCE
のハンドラに含まれます。 - プラットフォームにより、目的のプロビジョニング モードにデバイスがプロビジョニングされます。
デバイスがプロビジョニングされると、DPC は次のブロードキャストを受信し、DPC の
ACTION_ADMIN_POLICY_COMPLIANCE
ハンドラが起動します。
ACTION_READY_FOR_USER_INITIALIZATION
ACTION_PROFILE_PROVISIONING_COMPLETE
.DPC は
Global.DEVICE_PROVISIONED
の値を使用して、デバイスが新品または出荷時設定へのリセット(プロビジョニングされていない)であることを確認します。
0 - プロビジョニングされていません。
1 - プロビジョニング済み。DPC は、その管理対象デバイスのポリシーをプッシュしてプロビジョニング プロセスを完了し、デバイスが不正使用されていないことと、ポリシーが適用されていることを確認します(パスワードの要求など)。

以前のモードを設定
デバイスの初期設定時、またはユーザーが [設定] > [アカウントを追加] でアカウントを追加する際、従来の運用モードをプロビジョニングすることができます。managed Google Play を Google アカウントのユーザーが利用できるようにするための要件は次のとおりです。
- Google アカウントは、管理対象の Google ドメインの一部です。
- managed Google ドメインは、Google Play EMM API にバインドされた EMM を使用して Android 用に設定されています。
以前のデバイスでのみアプリ管理を行う場合、DPC は必要ありません。この場合は、[設定] > [アカウントを追加] で Google アカウントを追加します。アプリの管理には、おすすめのアプリのキュレーション、限定公開アプリの配布、ライセンスの購入、配布などが含まれます。
DPC に Google アカウントを追加するには:
- ユーザーが Google Play から DPC をダウンロードして起動します。
- DPC は、
AccountManager.addAccount()
を使用して管理対象の Google アカウントを追加します。AccountManager.KEY_ACCOUNT_NAME
を使用して特定の Google アカウントを追加するサンプル実装については、TestDPC をご覧ください。 - (省略可)DPC は自身をデバイス管理として設定します。DPC はデバイス管理者として、アプリの管理以外のデバイス管理機能を使用できます。
Google アカウント メソッドの実装に関する考慮事項
DPC は、使用された起動インテントで特定のエクストラを探すことで Google アカウントの認証フローを検出する必要があります(
LaunchIntentUtil
を参照)。android.accounts.Account
タイプのアカウント: 設定ウィザードまたは [設定] > [アカウントを追加] からアカウントが追加されたことを示します。これには、起動した DPC がデバイスまたはプロファイルを管理する必要があります。is_setup_wizard
ブール値: true の場合、DPC は設定ウィザードが完了する前に設定ウィザードで起動されました。それ以外の場合は、[設定] > [アカウントを追加] または別のフローで起動しました。
DPC が Google アカウント メソッドの一部として起動されたかどうかを簡単にチェックできます。
boolean isSynchronousAuthLaunch(Intent launchIntent) { return launchIntent.hasExtra(“is_setup_wizard”); }
DPC は、セットアップが完了する前に
finish()
を呼び出さないでください。また、startActivityForResult()
を使用して DPC が起動し、結果を待機するため、肯定的な結果コード(RESULT_OK
など)も返される必要があります。DPC のセットアップ フローで
ACTION_PROVISION_*
インテントが送信されるタイミングに到達した場合、DPC はプロビジョニング プロセスの結果コードを待ってからfinish()
を呼び出します。ACTION_PROVISION_*
インテントを起動するときは、startActivityForResult()
コールバックとonActivityResult()
コールバックを使用します。(例については、LaunchActivity
とSetupSyncAuthManagement
をご覧ください)。セットアップ プロセスの非同期の性質上、DPC は
RESULT_OK
の結果コードに依存してプロビジョニングが成功したことを示すことはできません。保証された唯一の方法は、プロビジョニングの成功時にDeviceAdminReceiver
コールバックを使用することです。RESULT_CANCELED
は、設定フローの同期部分でユーザーがバックアップを行い、DPC がそれに反応することを示します。この例では、DPC がプロビジョニングを開始し、アクティビティから結果コードが来るのを待ちます。
Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE); startActivityForResult(intent, REQUEST_MANAGED_PROFILE);
...
@Override public void onActivityResult(int req, int res, Intent i) { if (req == REQUEST_MANAGED_PROFILE) { if (res == Activity.RESULT_OK) { setResult(Activity.RESULT_OK); finish(); } else { Toast.makeText(this, “Provisioning failed”, Toast.LENGTH_SHORT).show(); } } }
- デバイスがすでにプロビジョニングされている場合、DPC はデバイス所有者モードを設定しません(
ProvisioningStateUtil.isDeviceProvisioned()
を参照)。この例では、DPC はデバイスがプロビジョニングされているかどうかを確認します。
public static boolean isDeviceProvisioned(Context context) { ContentResolver cr = context.getContentResolver(); return Settings.Global.getInt(cr, DEVICE_PROVISIONED, 0) != 0; }
- (省略可)DPC は、プロビジョニングを開始する際に
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
エクストラを使用して状態情報をDeviceAdminReceiver
に返すことができます(プロファイル所有者のケースでは仕事用プロファイル内で実行されています)。Test DPC は、このエクストラを使用して、プロビジョニングの完了後に Google アカウントのフローに異なるアクティビティ セットを入力します。詳しくは、DeviceAdminReceiver
をご覧ください。
public class DeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver { @Override public void onProfileProvisioningComplete(Context context, Intent intent) { // Retrieve the admin extras bundle, which we can use to determine the original context for // Test DPC’s launch. PersistableBundle extras = intent.getParcelableExtra( EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE); ...
- 仕事用プロファイルを設定するには、DPC によって追加されたアカウントを新しい仕事用プロファイルに移行する必要があります。これを行うには、DPC は
ACTION_PROVISION_MANAGED_PROFILE
の起動インテントで指定されたアカウントを渡します。 - DPC は、ユーザーがフローの行き先に到達していないとユーザーに感じないように、セットアップの終了時にアプリを終了するための明確な行動を促すフレーズ(終了ボタンなど)をユーザーに提供する必要があります。
- ユーザー エクスペリエンスがスムーズかつ適切に統合されるように、DPC でセットアップ ウィザードのテーマまたはレイアウト ライブラリを使用する必要があります。
NFC 方式
DPC は、NFC プロビジョニング方式を使用してデバイス所有者モードを設定できます。NFC プロビジョニング方式(NFC バンプ)では、デバイス所有者の運用モードを構成するために必要な、初期ポリシーと Wi-Fi 構成、設定、プロビジョニングの詳細を含む NFC プログラマー アプリを作成します。Android デバイスに NFC プログラマー アプリをインストールすると、そのデバイスがプログラマー デバイスになります。
デバイスをプロビジョニングするため、IT 管理者は新しいデバイスを追加で購入し、プログラマー デバイスに接続します。このバンプはデバイスに構成を転送して、インターネットに接続し、適切なポリシーと設定をダウンロードします。デバイスは DPC によって管理されます。
デバイスがプロビジョニングされると、Google Play でしばらくの間、管理対象アプリや承認済みコレクションではなく、管理対象外の一般ユーザー向けコンテンツが表示されます。処理が完了するまでに数分から 1 時間ほどかかります。
NFC プログラマー アプリとプログラマー デバイスを作成する
- Google Cloud Connect の EMM コミュニティから、NFC プログラマーのサンプルアプリをダウンロードします。サンプルアプリはそのまま使用することも、デフォルト値に合わせて変更することもできます。デフォルト パラメータのサンプルコードをご覧ください。
- プログラマー デバイスとなるデバイスに NFC プログラマー アプリをインストールします。
- NFC プログラマー アプリを起動し、[com.example.android.apis] の [Load Defaults] を選択します。(このテキストは、設定したデフォルトのパラメータによって異なります)。
お客様のデバイスをプロビジョニングする
- 新しいデバイスまたは出荷時設定にリセットしたデバイスでプログラマー デバイスをバンプします。
- デバイスの起動時に初期初期の画面が画面に表示されることを確認します。テキストは、プログラマー アプリの
Ready to send:{...}
で指定します。 - DPC が完了するまで待ちます。
- デバイスを暗号化する
- Code-Division Multiple Access(CDMA)デバイスの場合: テレフォニー ユーザー インターフェースが表示されているときにスマートフォンを有効にします(操作は必要ありません)。
- Wi-Fi 接続を設定します。
- com.example.android.apis の .apk ファイルをダウンロードします。
- com.example.android.apis をインストールします。
- com.example.android.apis の Device Device Admin をデバイス所有者に設定します。
- デバイス所有者が有効になったときの成功の「トースト」を表示します。
- ホームページ(設定ウィザードが自動的にスキップされる)に戻り、com.example.android.apis がデバイス所有者として設定されていることを確認します。
- [設定] > [セキュリティ] > [デバイス管理者] で、サンプル デバイスの管理者を削除できないことを確認します。
- [設定] > [ユーザー] > [ユーザーとプロフィール] > [自分(オーナー)] で、所有者が唯一のアカウントであることを確認します(デバイスの所有者は一度に 1 人のみです)。
NFC プログラマー アプリのコードサンプル
NFC プログラマー アプリの特に役立つと思われるセクションには、インライン コメントがあります。NFC プログラマー アプリですべてのサンプルコードを表示するには、Java デコンパイラ プログラムを使用してサンプル .apk ファイルを展開します。
initializePropertyUI() メソッド
initializePropertyUI()
メソッドは、NFC プログラマー アプリのユーザー インターフェース要素(編集可能なテキスト ボックスとチェックボックス)を初期化します。これらの要素の変更は、mProps
変数が保持する Key-Value ペア(KVP)に同期されます。mProps
変数は最終的に NFC バンプでデバイスに送信されます。
private void initializePropertyUI(int paramInt1, int paramInt2, final String paramString) { Log.d("DeviceProvisioningProgrammerSample","initializeProperty for " + paramString); final EditText localEditText = (EditText)findViewById(paramInt1); final CheckBox localCheckBox =(CheckBox)findViewById(paramInt2); /* Here we initialize text boxes so that when their text is edited the changes are synced to mProps. */ if(localEditText != null) localEditText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable paramAnonymousEditable) { } public void beforeTextChanged(CharSequence paramAnonymousCharSequence, int paramAnonymousInt1, int paramAnonymousInt2, int paramAnonymousInt3) { } public void onTextChanged(CharSequence paramAnonymousCharSequence, int paramAnonymousInt1, int paramAnonymousInt2, in paramAnonymousInt3) { if ((localCheckBox != null) && (localCheckBox.isChecked())) { DeviceProvisioningProgrammerSample.this.mProps.put(paramString, localEditText.getText().toString()); DeviceProvisioningProgrammerSample.this.refreshMessageView(); } } }); /* Here we initialize check boxes, so that when they are unchecked, the edit boxes are disabled, and the corresponding KVPs are removed from mProps. When they are checked the KVPs are re added, and the text boxes are enabled. */ if (localCheckBox != null) localCheckBox.setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton paramAnonymousCompoundButton, boolean paramAnonymousBoolean) { Log.d("DeviceProvisioningProgrammerSample", "onCheckedChanged for " + localEditText.getText().toString() + " isChecked = " + paramAnonymousBoolean); if (paramAnonymousBoolean) { localEditText.setEnabled(true); DeviceProvisioningProgrammerSample.this.mProps.put(paramString, localEditText.getText().toString()); DeviceProvisioningProgrammerSample.this.refreshMessageView(); return; } localEditText.setEnabled(false); DeviceProvisioningProgrammerSample.this.mProps.remove(paramString); DeviceProvisioningProgrammerSample.this.refreshMessageView(); } }); }
デフォルトのパラメータ
このコードサンプルでは、NFC バンプでデバイスにプッシュされるデフォルト値を設定します。構成可能なパラメータの一部はサンプルに含まれていませんが、実装に含めることが必要になる場合があります。(サンプルに含まれていないパラメータはこちらで確認できます)。
public void loadDefaults1(View paramView) { /* This EditText holds the KVP for EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME */ ((EditText)findViewById(2131034114)).setText("com.example.android.apis"); ((CheckBox)findViewById(2131034113)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION */ ((EditText)findViewById(2131034116)).setText ("https://sites.google.com/site/apidemodownload/somepage/ApiDemos.apk"); ((CheckBox)findViewById(2131034115)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM (note: must be URL-safe)*/ ((EditText)findViewById(2131034118)).setText("ZYk5xsY0xqic51CTqB9kLiMLqwk"); ((CheckBox)findViewById(2131034117)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_WIFI_SSID */ ((EditText)findViewById(2131034120)).setText("\"GoogleGuest\""); ((CheckBox)findViewById(2131034119)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_TIME_ZONE*/ ((EditText)findViewById(2131034122)).setText("Europe/London"); ((CheckBox)findViewById(2131034121)).setChecked(true); ((CheckBox)findViewById(2131034123)).setChecked(false); /* This EditText holds the KVP for EXTRA_PROVISIONING_LOCALE ((EditText)findViewById(2131034126)).setText("en_GB"); ((CheckBox)findViewById(2131034125)).setChecked(true); }
onCreate() メソッド
onCreate()
メソッドは、NFC プログラマー アプリとその機能と機能を初期化します。android.app.extra 文字列は、DevicePolicyManager
のドキュメントに記載されている文字列に対応しています。(例: DevicePolicyManager.EXTRA_ PROVISIONING_WIFI_SSID ==
"android.app.extra.PROVISIONING_WIFI_SSID"
)。
protected void onCreate(Bundle paramBundle) { Log.d("DeviceProvisioningProgrammerSample", "onCreate"); super.onCreate(paramBundle); setContentView(2130903040); this.mTextView = ((TextView)findViewById(2131034112)); this.mProps = new Properties(); initializePropertyUI(2131034114, 2131034113, "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME"); initializePropertyUI(2131034116, 2131034115, "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION"); initializePropertyUI(2131034118, 2131034117, "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM"); initializePropertyUI(2131034120, 2131034119, "android.app.extra.PROVISIONING_WIFI_SSID"); initializePropertyUI(2131034122, 2131034121, "android.app.extra.PROVISIONING_TIME_ZONE"); initializePropertyUI(2131034124, 2131034123, "android.app.extra.PROVISIONING_LOCAL_TIME"); initializePropertyUI(2131034126, 2131034125, "android.app.extra.PROVISIONING_LOCALE"); refreshMessageView(); /* Next we get the default NFC adapter for the Android device being used, and define CreateNdefMessageCallback() for that adapter, which is invoked when another NFC device capable of NDEF push (Android Beam) is within range. CreateNdefMessageCallback is an interface that has one abstract method that needs to be defined. That method, createNdefMessage, creates the message to be pushed. */ NfcAdapter.getDefaultAdapter(this).setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() { public NdefMessage createNdefMessage(NfcEvent paramAnonymousNfcEvent) { /* Here ndefMessage creates an output stream which contains the values from mProps. */ Log.d("DeviceProvisioningProgrammerSample", "Sending Nfc"); ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream(); try { DeviceProvisioningProgrammerSample.this.mProps.store(localByteArrayOutputStream, DeviceProvisioningProgrammerSample.this.getString(2130968578)); DeviceProvisioningProgrammerSample.this.mTextView.post(new Runnable() { public void run() { DeviceProvisioningProgrammerSample.this.refreshMessageView(); } }); /* Here NdefMessage is created containing an NdefRecord. The NdefRecord contains its record type, and a byte array derived from the mProps output stream. */ return new NdefMessage(new NdefRecord[] { NdefRecord.createMime("application/com.android.managedprovisioning", localByteArrayOutputStream.toByteArray()) }); } catch (IOException localIOException) { while (true) Log.e("DeviceProvisioningProgrammerSample", "io exception", localIOException); } } } , this, new Activity[0]); }
補足資料
高度な NFC は、さまざまなタグ技術との連携、NFC タグへの書き込み、フォアグラウンド ディスパッチなど、高度な NFC に関するトピックについて説明しています。
DPC の手動インストール方法
手動の DPC インストール プロビジョニング方法を使用してプロファイル所有者モードを設定するには、ユーザーが Google Play から DPC をダウンロードしてインストールします。次に、DPC は、マネージド Google アカウントのプロファイル所有者を設定する残りのプロセスをユーザーをサポートします。
DPC は、仕事用プロファイルの作成前または作成後に管理対象の Google アカウントを追加できます。たとえば、DPC は、管理対象の Google アカウントを最初に要求する代わりに、ユーザーの EMM 認証情報に基づいて仕事用プロファイルを作成できます。
プロファイル所有者モードを設定する
はじめに管理対象の Google アカウントを追加してください
- ユーザーが Google Play から DPC をダウンロードしてインストールします。
- DPC は、
AccountManager.addAccount()
を使用して仕事用プロファイルを作成する前に、管理対象の Google アカウントを追加します。 - DPC は個人用プロファイルで動作し、
ACTION_PROVISION_MANAGED_PROFILE
を使用して仕事用プロファイルを作成するプロセスを開始します。- 仕事用プロファイルをプロビジョニングします。
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
-仕事用プロファイルの追加情報(言語 / 地域、Wi-Fi、メールアドレスなど)。
EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
-新しい仕事用プロファイルに移行する認証済みアカウントの名前。 - 仕事用プロファイルの DPC は、プロビジョニング プロセスを完了します。仕事用プロファイルを作成すると、DPC も仕事用プロファイル内で実行されます。仕事用プロファイルの DPC は、その管理対象の Google アカウントにポリシーを push し、デバイスが不正使用されていないことと、ポリシーが適用されていることを確認する(パスワードの要求など)ことで、プロビジョニング プロセスを完了します。
- 仕事用プロファイルがプロビジョニングされると、DPC はブロードキャスト
ACTION_PROFILE_PROVISIONING_COMPLETE
を受信します。 - 個人用プロファイルの DPC は無効になるか、ユーザーが削除する。

まず仕事用プロファイルを作成してください
- ユーザーが Google Play から DPC をダウンロードしてインストールします。
- DPC は個人用プロファイルで動作し、
ACTION_PROVISION_MANAGED_PROFILE
を使用して仕事用プロファイルを作成するプロセスを開始します。- 仕事用プロファイルをプロビジョニングします。
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
-仕事用プロファイルの追加情報(言語 / 地域、Wi-Fi、メールアドレスなど)。 - DPC は、
AccountManager.addAccount()
を使用して管理対象の Google アカウントを追加します。 - DPC はブロードキャスト
ACTION_PROFILE_PROVISIONING_COMPLETE
を受信し、EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
を読み取ります。 - 仕事用プロファイルの DPC は、プロビジョニング プロセスを完了します。仕事用プロファイルを作成すると、DPC も仕事用プロファイル内で実行されます。仕事用プロファイルの DPC は、その管理対象の Google アカウントにポリシーを push し、デバイスが不正使用されていないことと、ポリシーが適用されていることを確認する(パスワードの要求など)ことで、プロビジョニング プロセスを完了します。
- DPC は、
DevicePolicyManager.setProfileEnabled()
を使用して仕事用プロファイルを有効にします。 - 個人用プロファイルの DPC は無効になるか、ユーザーが削除する。

以前のモードを設定
デバイスの初期設定時、またはユーザーが [設定] > [アカウントを追加] でアカウントを追加する際、従来の運用モードをプロビジョニングすることができます。managed Google Play を Google アカウントのユーザーが利用できるようにするための要件は次のとおりです。
- Google アカウントは、管理対象の Google ドメインの一部です。
- managed Google ドメインは、Google Play EMM API にバインドされた EMM を使用して Android 用に企業用に設定されます。
以前のデバイスでのみアプリ管理を行う場合、DPC は必要ありません。この場合は、[設定] > [アカウントを追加] で Google アカウントを追加します。アプリの管理には、おすすめのアプリのキュレーション、限定公開アプリの配布、ライセンスの購入、配布などが含まれます。
DPC に Google アカウントを追加するには:
- ユーザーが Google Play から DPC をダウンロードして起動します。
- DPC は、
AccountManager.addAccount()
を使用して管理対象の Google アカウントを追加します。AccountManager.KEY_ACCOUNT_NAME
を使用して特定の Google アカウントを追加するサンプル実装については、TestDPC をご覧ください。 - (省略可)DPC は自身をデバイス管理として設定します。DPC はデバイス管理者として、アプリの管理以外のデバイス管理機能を使用できます。