Home | History | Annotate | Download | only in admin
      1 page.title=Provisioning for Device Administration
      2 @jd:body
      3 
      4 <!--
      5     Copyright 2015 The Android Open Source Project
      6 
      7     Licensed under the Apache License, Version 2.0 (the "License");
      8     you may not use this file except in compliance with the License.
      9     You may obtain a copy of the License at
     10 
     11         http://www.apache.org/licenses/LICENSE-2.0
     12 
     13     Unless required by applicable law or agreed to in writing, software
     14     distributed under the License is distributed on an "AS IS" BASIS,
     15     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16     See the License for the specific language governing permissions and
     17     limitations under the License.
     18 -->
     19 <div id="qv-wrapper">
     20   <div id="qv">
     21     <h2>In this document</h2>
     22     <ol id="auto-toc">
     23     </ol>
     24   </div>
     25 </div>
     26 
     27 <p>This page describes the process for deploying devices to corporate users
     28 using NFC or with an activation code (for a complete list of requirements, see
     29 <a href="{@docRoot}devices/tech/admin/implement.html">Implementing Device
     30 Administration</a>).</p>
     31 
     32 <p>To get started, download the
     33 <a href="https://github.com/googlesamples/android-NfcProvisioning">NfcProvisioning
     34 APK</a>
     35 and
     36 <a href="https://github.com/googlesamples/android-DeviceOwner">Android-DeviceOwner
     37 APK</a>.
     38 </p>
     39 
     40 <p class="caution"><strong>Caution:</strong> If provisioning has already
     41 started, affected devices must be factory reset first.</p>
     42 
     43 <h2 id=managed_provisioning>Managed provisioning</h2>
     44 
     45 <p>Managed Provisioning is a framework UI flow to ensure users are adequately
     46 informed of the implications of setting a device owner or managed profile. It is
     47 designed to act as a setup wizard for managed profiles.</p>
     48 
     49 <p class="note"><strong>Note:</strong> The device owner can be set only from an
     50 unprovisioned device. If <code>Settings.Secure.USER_SETUP_COMPLETE</code> has
     51 ever been set, the device is considered provisioned and the device owner cannot
     52 be set.</p>
     53 
     54 <p>Devices that enable default encryption offer a considerably simpler and
     55 quicker device administration provisioning flow. The managed provisioning
     56 component:</p>
     57 
     58 <ul>
     59   <li>Encrypts the device</li>
     60   <li>Creates the managed profile</li>
     61   <li>Disables non-required applications</li>
     62   <li>Sets the enterprise mobility management (EMM) app as profile owner</li>
     63 </ul>
     64 
     65 <p>In turn, the EMM app:</p>
     66 
     67 <ul>
     68   <li>Adds user accounts</li>
     69   <li>Enforces device compliance</li>
     70   <li>Enables any additional system applications</li>
     71 </ul>
     72 
     73 <p>In this flow, managed provisioning triggers device encryption. The framework
     74 copies the EMM app into the managed profile as part of managed provisioning. The
     75 instance of the EMM app inside of the managed profile gets a callback from the
     76 framework when provisioning is done. The EMM can then add accounts and enforce
     77 policies; it then calls <code>setProfileEnabled()</code>, which makes the
     78 launcher icons visible.</p>
     79 
     80 <h2 id=profile_owner_provisioning>Profile owner provisioning</h2>
     81 
     82 <p>Profile owner provisioning assumes the user of the device (and not a company
     83 IT department) oversees device management. To enable profile owner provisioning,
     84 you must send an intent with appropriate extras. For an example, use the TestDPC
     85 application
     86 (<a href="https://play.google.com/store/apps/details?id=com.afwsamples.testdpc&hl=en">Download
     87 from Google Play</a> or <a href="https://github.com/googlesamples/android-testdpc/">Build
     88 from GitHub</a>). Install TestDPC on the device, launch the app from the
     89 launcher, then follow the app instructions. Provisioning is complete when badged
     90 icons appear in the launcher drawer.</p>
     91 
     92 <p>Mobile Device Management (MDM) applications trigger the creation of the
     93 managed profile by sending an intent with action:
     94 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/admin/DevicePolicyManager.java">DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE</a>
     95 . Below is a sample intent that triggers the creation of the managed profile
     96 and sets the DeviceAdminSample as the profile owner:</p>
     97 
     98 <pre>adb shell am start -a android.app.action.PROVISION_MANAGED_PROFILE \
     99           -c android.intent.category.DEFAULT \
    100 	      -e wifiSsid $(printf '%q' \"WifiSSID\") \
    101           -e deviceAdminPackage "com.google.android.deviceadminsample" \
    102 	      -e android.app.extra.deviceAdminPackageName $(printf '%q'
    103                         .DeviceAdminSample\$DeviceAdminSampleReceiver) \
    104 	      -e android.app.extra.DEFAULT_MANAGED_PROFILE_NAME "My Organisation"
    105 </pre>
    106 
    107 <h2 id=device_owner_provisioning_via_nfc>Device owner provisioning</h2>
    108 <p>Use one of the following methods to set up device owner (DO)
    109 provisioning.</p>
    110 
    111 <h3 id=do_provision_nfc>Provisioning via NFC</h3>
    112 <p>DO provisioning via NFC is similar to the profile owner method but requires
    113 more bootstrapping. To use this method,
    114 <a href="http://developer.android.com/guide/topics/connectivity/nfc/nfc.html">NFC
    115 bump</a> the device during the initial setup step (i.e., first page of the setup
    116 wizard). This low-touch flow configures Wi-Fi, installs the DPC, and sets the
    117 DPC as device owner.</p>
    118 
    119 <p>A typical NFC bundle includes the following:</p>
    120 
    121 <pre>
    122                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME
    123                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LOCATION
    124                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
    125                 EXTRA_PROVISIONING_WIFI_SSID
    126                 EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
    127 </pre>
    128 
    129 <p>Devices must have NFC configured to accept the managed provisioning
    130 mimetype from the setup experience:</p>
    131 
    132 <pre>/packages/apps/Nfc/res/values/provisioning.xml
    133 
    134       &lt;bool name="enable_nfc_provisioning"&gt;true&lt;/bool&gt;
    135       &lt;item&gt;application/com.android.managedprovisioning&lt;/item&gt;
    136 </pre>
    137 
    138 <h3 id=do_provision_cs>Provisioning via Cloud Services</h2>
    139 <p>Device owner provisioning via cloud services includes the ability to
    140 provision a device in device owner mode during out-of-the-box setup. The device
    141 can collect credentials (or tokens) and use them to perform a lookup to a cloud
    142 service, which can then be used to initiate the device owner provisioning
    143 process.</p>
    144 
    145 <h2 id=emm_benefits>EMM benefits</h2>
    146 
    147 <p>An enterprise mobility management (EMM) app can help by conducting the
    148 following tasks:</p>
    149 
    150 <ul>
    151   <li>Provision managed profile</li>
    152   <li>Apply security policies
    153   <ul>
    154     <li>Set password complexity</li>
    155     <li>Lockdowns: disable screenshots, sharing from managed profile, etc.</li>
    156   </ul></li>
    157   <li>Configure enterprise connectivity
    158   <ul>
    159     <li>Use WifiEnterpriseConfig to configure corporate Wi-Fi</li>
    160     <li>Configure VPN on the device</li>
    161     <li>Use <code>DPM.setApplicationRestrictions()</code> to configure corporate
    162     VPN</li>
    163   </ul></li>
    164   <li>Enable corporate app Single Sign-On (SSO)
    165   <ul>
    166     <li>Install desired corporate apps
    167     <li>Use <code>DPM.installKeyPair()</code> to silently install corp client
    168     certs</li>
    169     <li>Use <code>DPM.setApplicationRestrictions()</code> to configure
    170     hostnames, cert alias of corporate apps</li>
    171   </ul></li>
    172 </ul>
    173 
    174 <p>Managed provisioning is just one part of the EMM end-to-end workflow, with
    175 the end goal of making corporate data accessible to apps in the managed
    176 profile. For testing guidance, see
    177 <a href="{@docRoot}devices/tech/admin/testing-setup.html">Setting up Device
    178 Testing</a>.</p>
    179 
    180 <h2 id=automate>Automated provisioning testing</h2>
    181 <p>To automate the testing of enterprise provisioning processes, use
    182 the Android for Work (AfW) Test Harness. For details, see
    183 <a href="{@docRoot}devices/tech/admin/testing-provision.html">Testing Device
    184 Provisioning</a>.</p>
    185