Device Policy Controller を構築する

このガイドでは、Android または iOS モバイル デバイス用の Device Policy Controller(DPC)を開発する方法について説明します。 Android Enterprise デプロイメント セキュリティ モデルです。DPC アプリ(旧称: Work Policy Controller として、ローカル デバイス ポリシーとシステムを制御する インストールできます。

<ph type="x-smartling-placeholder">

DPC について

Android Enterprise デプロイメントでは、企業が Android エンタープライズ ユーザーのデバイスのさまざまな側面から、 ユーザーの個人データ、承認済みアプリの事前構成、 デバイスの機能(カメラなど)を無効にするなどの操作を行えます。

EMM として開発した DPC アプリを EMM コンソールと組み合わせて使用し、 あります。お客様が、管理するユーザー デバイスに DPC をデプロイします。 DPC は EMM コンソール(およびサーバー)とデバイスの間のブリッジとして機能します。 管理者は、EMM コンソールを使用して、次のようなさまざまなタスクを行うことができます。 デバイス設定やアプリを構成できます

DPC は、インストール先のデバイス上で仕事用プロファイルを作成して管理します。 仕事用プロファイルは、仕事関連の情報を暗号化して、仕事用プロファイルと ユーザー保護します。仕事用プロファイルを作成する前に、DPC は デバイスで使用するために managed Google Play アカウントをプロビジョニングします。

このガイドでは、仕事用プロファイルを作成、管理できる DPC を開発する方法について説明します。

EMM 向け DPC サポート ライブラリ

EMM 向けの DPC サポート ライブラリには、 企業での Android デバイスのプロビジョニングと管理を容易にする できます。ライブラリを使用すると、 DPC アプリ:

  • managed Google Play アカウントのプロビジョニングのサポート: プロビジョニング管理 DPC アプリの Google Play アカウントを使用するには、Google Play と Google Play 開発者サービス アプリは最小バージョン要件を満たしています。ただし、これらを更新すると、 複雑になることがあります。これらの更新は DPC サポート ライブラリによって 管理対象の Google Workspace の今後のアップデートとの互換性が確保されます。 Play アカウントのプロビジョニング プロセス。 managed Google Play アカウントをご覧ください。 プロビジョニングのサポートをご覧ください。
  • 管理対象設定のサポート: Play EMM API を使用して、承認されたアプリの管理対象設定を処理することは、 DPC に管理対象設定を実装する最も簡単な方法です。DPC サポート ライブラリを使用すると、管理対象の 管理者が EMM を使用して設定した設定(旧アプリの制限) できます。Play EMM API を使用して管理対象設定を処理すると、 インストール中にアトミックに適用されるアプリの構成。詳しくは、 管理対象の設定を適用する をご覧ください。この機能を有効にする方法については、 向上します

ライブラリをダウンロードする手順は次のとおりです。このガイドで説明するタスクは、 使用を想定しています。

DPC Support Library をダウンロードする

DPC サポート ライブラリを使用するには、Android Enterprise EMM プロバイダ コミュニティからライブラリをダウンロードします。 build.gradle ファイルにライブラリを追加し、 依存関係も考慮する必要があります。たとえば、ライブラリには 11.4.0 が必要です。 <ph type="x-smartling-placeholder"></ph> Google Play 開発者サービス認証クライアント ライブラリ

  1. build.gradle ファイルにライブラリを追加します。

    Groovy

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. 11.4.0 を追加 Google Play 開発者サービス認証クライアント ライブラリを build.gradle ファイルに追加します。

    Groovy

    implementation 'com.google.android.gms:play-services-auth:11.4.0'
    

    Kotlin

    implementation("com.google.android.gms:play-services-auth:11.4.0")
    
で確認できます。 <ph type="x-smartling-placeholder">

ライブラリの実行には特定の権限が必要なため、これらを Google Play にアップロードする際に DPC アプリのマニフェストを変更する必要があります。

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.providers.gsf.permission.READ_GSERVICES"/>

これらの事前設定とデプロイの手順に加えて、次の作業も行う必要があります。 DPC コード内の特定のライブラリ機能を初期化します。 選択できます。詳細は関連する ご覧ください。

DPC を作成する

デバイス管理アプリケーションに使用する既存のモデル上に DPC を構築します。 具体的には、アプリで DeviceAdminReceiverandroid.app.admin のクラス)をサブクラス化する必要があります。 ( <ph type="x-smartling-placeholder"></ph> デバイス管理をご覧ください。

仕事用プロファイルの作成

基本的な仕事用プロファイルの作成方法を示すサンプルについては、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> BasicManagedProfile をご覧ください。

すでに個人用プロファイルが設定されているデバイスで仕事用プロファイルを作成するには、以下の操作を行います。 まず、デバイスが仕事用プロファイルに対応しているかどうかを 存在する FEATURE_MANAGED_USERS のシステム機能:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

仕事用プロファイルがサポートされているデバイスの場合、インテントを送信して仕事用プロファイルを作成します。 ACTION_PROVISION_MANAGED_PROFILE で できます。(ドキュメントによっては、管理対象プロファイル仕事用プロファイルと同じ意味を持つ一般用語 (企業における Android のコンテキストで)デバイス管理パッケージ名を含める 次のように指定します。

Kotlin

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java)
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString())
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Java

Activity provisioningActivity = getActivity();
// You'll need the package name for the DPC app.
String myDPCPackageName = "com.example.myDPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class);
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
         == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE);
    provisioningActivity.finish();
}

システムはこのインテントに次のように応答します。

  • デバイスが暗号化されていることを確認します。有効になっていない場合は、次のメッセージが表示されます。 続行する前にデバイスを暗号化するようユーザーに求めます。
  • 仕事用プロファイルを作成する。
  • 必須ではないアプリを仕事用プロファイルから削除します。
  • DPC アプリを仕事用プロファイルにコピーし、DPC 自体を 変更することはできません。

onActivityResult() をオーバーライドして プロビジョニングが成功したかどうかを確認します。

Kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Java

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return;
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data);
    }
}

仕事用プロファイルの有効化を完了する

プロファイルのプロビジョニングが完了すると、システムから DPC が呼び出されます。 アプリの DeviceAdminReceiver.onProfileProvisioningComplete() メソッドを使用します。オーバーライド このコールバック メソッドを使って、仕事用プロファイルの有効化を完了します。

一般的な DeviceAdminReceiver.onProfileProvisioningComplete() コールバックの実装では、次の処理が行われます。

仕事用プロファイルを有効にする

これらのタスクが完了したら、Device Policy Manager の setProfileEnabled() メソッドを使用して、仕事用プロファイルを有効にします。

Kotlin

// Get the device policy manager
val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val componentName = myDeviceAdminReceiver.getComponentName(this)
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile")
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName)

Java

// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile");
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName);

デバイス ポリシーを設定する

DPC アプリは、管理者が設定したデバイス ポリシーを適用し、 組織の要件と制約によって異なります。たとえば、セキュリティ ポリシーは、 パスワードの入力に一定回数失敗するとデバイスをロックすることを要求します。 DPC が EMM コンソールに現在のポリシーを照会し、ポリシーを適用する [デバイス] Administration API。

デバイス ポリシーの適用方法については、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> ポリシーをご覧ください。

管理対象設定を適用する 仕事用アプリ

管理対象設定を使用すると、お客様は以下のことを行えるようになります。 デプロイを承認したアプリを事前構成し、それらを更新する 簡単にアプリを構築できます。アプリの構成に デプロイにより、組織のセキュリティ ポリシーとその他のポリシーが アプリが対象デバイスにインストールされたとき。

アプリの機能は、アプリ デベロッパーが XML スキーマ( (管理対象設定スキーマなど)を含む、Google へのアップロード時にアプリに付随する Play(アプリ デベロッパー、詳しくは管理対象設定のセットアップをご覧ください)。

このスキーマをアプリから取得して、顧客の管理者に表示します 使用する場合は、 設定し、管理者がアプリの設定を事前に構成できるようにします。 その結果、管理者が設定した管理対象設定は通常、 EMM サーバーに保管されたデータを Play EMM API を使用して デバイスの管理対象設定 または Managedconfigurationsforuser を使用できます。詳しくは、 管理対象設定 をご覧ください

Play EMM API を使用して、管理対象設定をアプリに適用できる (推奨されるアプローチ)、または DPC から直接(管理対象の設定を適用する DPC から直接取得できます)。Play EMM API を使用する にはいくつかの利点があります。たとえば、 DPC サポート ライブラリ: DPC タスクを簡素化します。 Play EMM API には以下の特徴もあります。

  • 新しいアプリがインストールされるときに構成をアトミックに設定します。これにより、ユーザーが初めてアプリを起動したときにアプリの準備が整います。
  • ユーザー単位で設定を管理できるため、プロビジョニングをデバイス単位でモニタリングする必要がなくなります。

管理対象設定を適用するには、 Play EMM API

管理対象設定に対して Play EMM API を使用するには、DPC で Google Play で設定できます。DPC サポート ライブラリが対処 Google Play から送信された構成をプロキシすることで、タスクを自動化できます。

Google Play を使用するには EMM API、DPC サポート ライブラリをダウンロードしてください。 次に、DPC で管理対象設定のサポートを有効にします。

管理対象設定のサポートを お客様の DPC

このクラスを DPC にインポートします。

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

マネージド構成ライブラリを初期化します。この例では「admin」です。 DeviceAdminReceiver の ComponentName を指定します。

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

管理対象設定を有効にします。

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

DPC でこのライブラリを初期化すると、 EMM で Google Play EMM API を使用する 承認されたアプリケーションに対して管理対象設定を DPC で直接コーディングできます。詳しくは、 <ph type="x-smartling-placeholder"></ph> Play を介した管理対象設定をご覧ください。

管理対象設定を適用する 新しい P-MAX キャンペーンを

アプリの構成設定を DPC から直接変更するには、 DevicePolicyManager.setApplicationRestrictions() メソッド および の DPC アプリのパラメータと、 DeviceAdminReceiver: 対象アプリのパッケージ名 このBundleは 管理者が設定したアプリの管理対象設定です。詳しくは、 お客様の 詳細については、DPC と EMM のコンソールが連動しています。また、管理対象設定のセットアップもご参照ください。ただし、 マネージド リソースを適用する方法として、 managed Google Play アカウントを導入する場合は、推奨されません。

managed Google Play アカウントのプロビジョニング サポート

DPC サポート ライブラリ: インフラストラクチャを managed Google Play アカウント。このサポートを使用するには、まず そのうえで、インフラストラクチャの 動作環境を設定し、 managed Google Play アカウント

managed Google Play アカウントの初期化 DPC でのサポート

このクラスを DPC にインポートします。

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

プロビジョニング互換性ライブラリを初期化します。この例の「admin」は DeviceAdminReceiverComponentName

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

従業員の作業環境を確保し、 managed Google Play アカウント

DPC がプロファイル所有者モード(ACTION_PROVISION_MANAGED_PROFILE)のデバイスまたはデバイスをプロビジョニングした後 所有者モード(ACTION_PROVISION_MANAGED_DEVICE)の場合は、以下を呼び出して、デバイスが managed Google Play アカウントに対応していることを確認します。

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

このプロセスの成功または失敗がコールバックで報告されます。コールバックが が正常に返されたら、managed Google Play アカウントを追加できます。条件 コールバックがエラーを報告した場合は、 デバイスがネットワーク接続されている(ダウンロードに失敗した場合など)。その他の Google に報告してください。

Kotlin

object : WorkingEnvironmentCallback() {
    override fun onSuccess() {
        // Can now provision the managed Google Play Account
    }
    override fun onFailure(error: Error) {
        // Notify user, handle error (check network connection)
    }
}

Java

new WorkingEnvironmentCallback() {
    @Override
    public void onSuccess() {
        // Can now provision the managed Google Play Account
    }

    @Override
    public void onFailure(Error error) {
        // Notify user, handle error (check network connection)
    }
}

managed Google Play アカウントを追加する

Android フレームワークの AccountManager managed Google Play アカウントをデバイスに追加できます。簡単に操作できるように AccountManager: ヘルパー関数を使用(以下の例を参照) DPC サポート ライブラリをご覧ください。関数 Google Play サーバーから返されたトークンを処理し、プロビジョニングを容易にする managed Google Play アカウント。この関数は、managed Google Play アプリが アカウントが有効な状態である:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token - Google Cloud によって生成されたユーザー認証トークン EMM API の Users.generateAuthenticationToken() 呼び出しを再生します。
  • accountAddedCallback - managed Google Play アカウントを返します。 デバイスに追加したものが表示されます。このコールバックには、 onAccountReady() メソッドと onFailure() メソッド。

Kotlin

val workAccountAddedCallback = object : WorkAccountAddedCallback() {
    override fun onAccountReady(account: Account, deviceHint: String) {
        // Device account was successfully added to the device
        // and is ready to be used.
    }

    override fun onFailure(error: Error) {
        // The account was not successfully added. Check that the token
        // provided was valid (it expires after a certain period of time).
    }
}

Java

WorkAccountAddedCallback workAccountAddedCallback =
    new WorkAccountAddedCallback() {
        @Override
        public void onAccountReady(Account account, String deviceHint) {
            // Device account was successfully added to the device
            // and is ready to be used.
        }

        @Override
        public void onFailure(Error error) {
            // The account was not successfully added. Check that the token
            // provided was valid (it expires after a certain period of time).
        }
};
  • Device Administration API の詳細については、以下をご覧ください。 デバイス 管理
  • Android Enterprise のプロビジョニング方法については、以下をご覧ください。 [デバイスのプロビジョニング] Android Enterprise デベロッパー ガイド。
  • 基本的な仕事用プロファイルの作成方法を示す GitHub サンプルについては、 BasicManagedProfile をご覧ください。
  • 外部 IP アドレスとして他のアプリの構成を設定する方法を示す GitHub のサンプルは、 プロファイルの所有者については、以下をご覧ください。 AppRestrictionEnforcer