The Google Play EMM API supports two different distribution methods for apps. You can let users manually install apps from the managed Google Play store or you can let IT admins remotely install apps onto users' devices.
Make apps available in the managed Play Store
The managed Play Store behavior is defined by the value of
all: All public apps from the Play Store are available.
whitelist: Only the apps listed in
In both cases, all apps in
policy.productPolicy are added by default to the
enterprise's store layout. The enterprise's store layout is the homepage of the
managed Play Store when
whitelist is selected, and can be accessed in a "Work
Apps" tab when
all is selected. You can allow your customer to customize the
enterprise's store layout by embedding the managed Google Play iframe (see
Organize apps with the managed Google Play iframe)
or by integrating with the
custom store layout APIs.
Remotely install apps
To remotely install (also called push install) an app on a user’s device, set
policy.productPolicy.autoInstallPolicy in the
autoInstallMode can be set to:
doNotAutoInstall: The app is not automatically installed.
autoInstallOnce: The app is automatically installed once, if the user uninstalls the app it will not be installed again.
forceAutoInstall: The app is automatically installed, if the user uninstalls the app it will be installed again. On managed devices the DPC should block uninstall using
In case of failure (loss of connectivity, lack of storage, etc), installs are retried automatically until they succeed. An exponential backoff retry strategy is applied to avoid wasting battery and data in the case of unrecoverable failures.
You can choose the order of installs by setting
priority must be an unsigned integer and the default value is 0. Apps will be
installed in increasing order or priority, meaning that apps with the lower
priority value will be installed first.
You can set install constraints for each app by setting an
autoInstallContraint, allowing you to control the required state of the device
during the install:
- whether the device should be connected to a Wi-Fi network,
- whether the device should be charging,
- and whether the device should be idle (not actively used by the user).
If the constraints are not met immediately then affected installs will be queued until the constraints are met.
autoInstallConstraint the AND rule is applied between the fields. For
example, with the following
autoInstallConstraint, the device must be both
charging and connected to an unmetered network (e.g. Wi-Fi) for the app to be
"autoInstallConstraint": [ "chargingStateConstraint" : "chargingRequired", "networkTypeConstraint" : "unmeteredNetwork" ]
Auto-install apps on newly provisioned devices
The Google Play EMM API sends a
NewDeviceEvent notification when a device is
first provisioned. To automatically push-install apps onto newly provisioned
devices, listen for
NewDeviceEvent notifications. From each
deviceId, and then call
Devices.update to set the
policy for that device.
To learn how to subscribe to EMM notifications, see Set up EMM notifications.
Distribute private apps to users
You can distribute private apps to users using the two methods described above.
Distribute apps for closed testing
Closed testing allows app developers to get feedback on early versions of their app from trusted users. Developers can set up closed tests in the Google Play Console. You use the Play EMM API to enable IT admins to distribute closed versions (also called tracks) of apps to specific users. Your enterprise customers can use this feature to not only test 3rd party apps, but also to test private apps developed in-house.
Before a developer adds an enterprise to an app’s list of closed testers, the app should meet the following criteria:
- A production version of the app is published on Google Play.
- In the Play Console, Advanced managed Google Play features are enabled in the app’s Pricing & distribution page.
- Any closed versions of the app meet version code requirements.
Add an enterprise to closed tests
App developers can add enterprises to tests that use the methods Closed Alpha Testing, or Alpha Testing using Google Groups. For instructions, see Set up an open, closed, or internal test. The developer needs to enter the organization ID (also referred to as enterprise ID) of each participating enterprise. IT admins can provide their organization’s ID to 3rd party app developers by following these steps:
- Sign in to the managed Google Play store.
- Click Admin Settings.
- Copy the Organization ID string from the Organization information box and send it to the developer.
Additional requirements for private apps
For private apps, the developer also needs to add the organization ID of each participating enterprise in the Pricing & distribution page of the Play Console. For instructions, see Publish a private app.
Distribute closed tracks to users
To retrieve a list of tracks available to an enterprise for a specified app,
appTracks list contained in the response includes the tracks available for
each app. The
appTracks.trackAlias is a user readable name for the track
that you can display in your EMM console, and the
appTracks.trackId is the
machine readable ID for the track.
To grant a user visibility to an app’s closed track, set the
policy.productPolicy.trackIds in the
policy. If multiple tracks
are available for a device, the available version with the highest version code
will be installed.
Keep track of paid app licenses
For paid apps the
object keeps track of how many licenses an enterprise owns and how many licenses
are currently in use. You can call
Grouplicenses.get to obtain
license details for an app.
Before a paid app can be installed on a device, the enterprise needs to have a
license available for the app. If a license is available, the app is installed
on the device and an
Entitlements object is created.
Entitlements object links a license with a user and decrements the
available license count for the app. If there are no licenses available, then
app installation fails and no
Entitlements object is created.
For free apps,
Entitlements objects are not used.