EMM-специалисты могут реализовать ряд типичных задач управления в своих корпоративных решениях для Android, например задачи, показанные в этом руководстве. В примере кода используется клиентская библиотека Google Play EMM API для Java® .
Найдите пользователей и получите подробную информацию о них
 Многим API EMM Google Play требуется userId (в дополнение к enterpriseId ) для выполнения некоторых задач, связанных с пользователем, таких как установка приложения, получение разрешений и лицензирование. Для некоторых вызовов требуется объект пользователя.
 Если организация использует управляемые учетные записи Google Play, вы поддерживаете сопоставление между адресами электронной почты пользователей и идентификаторами пользователей этих учетных записей. В учетных записях Google вы используете UsersListResponse .
Поиск пользователей
Этот пример кода получает идентификаторы пользователей, связанные с учетными записями Google. Это не относится к организациям, использующим управляемые аккаунты Google Play.
 В этом примере предполагается, что вы импортировали модели User и UsersListResponse в свой код. Чтобы получить конкретную учетную запись пользователя, получите ее userId , передав enterpriseId и адрес электронной почты в UsersListResponse .
public UsersListResponse list(String enterpriseId, String email) throws
   IOException {
    return androidEnterprise
        .users()
        .list(enterpriseId, email)
        .execute();
}Получить данные пользователя
 Получив userId , вы можете получить другие данные. См. Users.Get .
public User get(String enterpriseId, String userId) throws IOException {
    return androidEnterprise
        .users()
        .get(enterpriseId, userId)
        .execute();
}Предоставьте пользователю доступ к приложениям
Вы можете использовать API-интерфейсы Google Play EMM, чтобы контролировать, к каким приложениям пользователь может получить доступ из управляемого магазина Google Play. Доступ к приложению включает в себя возможность его поиска, просмотра, установки и обновления. Доступны три различных уровня доступа:
- Только разрешенные приложения: пользователь имеет доступ только к определенным приложениям.
- Все одобренные приложения. Пользователь имеет доступ ко всем приложениям, одобренным для предприятия.
- Все приложения. Пользователь имеет доступ ко всем общедоступным приложениям в магазине Google Play.
Предоставьте пользователю доступ только к определенным приложениям
В примере ниже показано, как предоставить пользователю доступ к определенному набору приложений из управляемого магазина Google Play. Процесс включает в себя следующие шаги:
-  Соберите список productIds(приложений), одобренных для пользователя (productSet).
-  Укажите, что пользователь может получать доступ только к приложениям из данного списка, установив для строки productSetBehaviorзначение"whitelist".
-  Примените список productIdsи настройку поведения к доступному набору продуктов пользователя с помощьюsetAvailableProductSet.
public ProductSet setProductSet(String enterpriseId, String userId,
    List<String> productIds) throws IOException {
  ProductSet productSet = new ProductSet();
  productSet.setProductId(productIds);
  productSet.setProductSetBehavior("whitelist");
  return androidEnterprise
      .users()
      .setAvailableProductSet(enterpriseId, userId, productSet)
      .execute();
}Предоставьте пользователю доступ ко всем одобренным приложениям
В приведенном ниже примере показано, как предоставить пользователю доступ к любому приложению, одобренному для предприятия, из управляемого магазина Google Play. Процесс включает в себя следующие шаги:
-  Укажите, что пользователь может получить доступ ко всем приложениям, одобренным для предприятия, установив для строки productSetBehaviorзначение"allApproved".
-  Примените этот параметр к пользователю с помощью setAvailableProductSet.
public ProductSet setUserIncludeApprovedApps(String enterpriseId, String userId)
    throws IOException {
  ProductSet productSet = new ProductSet();
  productSet.setProductSetBehavior("allApproved");
  return androidEnterprise
      .users()
      .setAvailableProductSet(enterpriseId, userId, productSet)
      .execute();
} Примечание. Если для productSetBehavior установлено значение "allApproved" , вам не нужно указывать какие-либо productIds для ProductSet.
Предоставьте пользователю доступ ко всем приложениям
В приведенном ниже примере показано, как предоставить пользователю в управляемом магазине Google Play доступ к любому приложению, доступному в общедоступном магазине Google Play. Пользователи, имеющие доступ ко всем приложениям, по-прежнему видят макет магазина своего предприятия только тогда, когда открывают корпоративный Google Play, но могут находить дополнительные приложения с помощью поиска.
Некоторым доверенным пользователям, например ИТ-администраторам, может потребоваться более высокий уровень доступа для тестирования и оценки приложений, прежде чем утверждать их для предприятия. Процесс предоставления пользователю доступа ко всем приложениям включает в себя следующие шаги:
-  Укажите, что пользователь может получить доступ ко всем приложениям в магазине Google Play, установив для строки productSetBehaviorзначение"includeAll".
-  Примените этот параметр к пользователю с помощью setAvailableProductSet.
public ProductSet setUserIncludeAllApps(String enterpriseId, String userId)
    throws IOException {
  ProductSet productSet = new ProductSet();
  productSet.setProductSetBehavior("includeAll");
  return androidEnterprise
      .users()
      .setAvailableProductSet(enterpriseId, userId, productSet)
      .execute();
} Примечание. Если для productSetBehavior установлено значение "includeAll" , вам не нужно указывать какие-либо productIds для ProductSet.
Создайте макет магазина
Предоставив пользователям доступ к приложениям, сгруппируйте их в кластеры для отображения на витрине управляемого магазина Google Play.
 Вы можете создать уникальный индивидуальный макет магазина для каждого из своих клиентов, используя API Storelayoutpages и Storelayoutclusters . Типичный макет состоит из набора страниц, каждая из которых может содержать кластеры приложений. Вы можете поместить связанные приложения в один кластер. Дополнительные сведения и пример кода см. в разделе Создание пользовательских макетов магазинов .
Получите разрешения приложения
Чтобы добавить приложение в пользовательский макет магазина (или установить приложение на устройстве пользователя в автоматическом режиме) и отобразить приложение, чтобы пользователь мог его выбрать, администратор должен принять разрешения для этого приложения для всей организации. Администраторы могут принимать разрешения приложений и помечать приложения как одобренные для распространения в управляемой консоли Google Play (см. обзор управляемого Google Play ).
 Мы рекомендуем встроить iframe разрешений в консоль EMM. Это означает, что пользователю не нужно отдельно переходить к управляемой консоли Google Play. Используйте Products.getApprovalUrl чтобы получить URL-адрес iframe.
public String getApprovalUrl(String enterpriseId, String productId)
    throws IOException {
  return androidEnterprise
      .products()
      .generateApprovalUrl(enterpriseId, productId)
      .execute()
      .getUrl();
} Используйте Products.approve , чтобы принять эти разрешения.
public void approveProduct(String enterpriseId,
    String productId,
    String approvalUrl) throws IOException {
  ProductsApproveRequest productsApproveRequest =
      new ProductsApproveRequest()
          .setApprovalUrlInfo(
              new ApprovalUrlInfo().setApprovalUrl(approvalUrl));
  androidEnterprise
      .products()
      .approve(enterpriseId, productId, productsApproveRequest)
      .execute();
  }Получить устройства пользователя
 Чтобы выполнить действия, специфичные для устройства, вам необходимо идентифицировать устройства, связанные с пользователем. В этом примере возвращается список устройств для данного userID с помощью DevicesListResponse .
public DevicesListResponse list(String enterpriseId, String userId) throws
   IOException {
    return androidEnterprise
        .devices()
        .list(enterpriseId, userId)
        .execute();
} Если пользователь согласился с Условиями использования, представленными при первой попытке доступа к корпоративному Google Play, в ответ будут включены неуправляемые устройства (устройства с типом управления unmanagedProfile ).
Получить и установить состояние устройства
Эта задача управления применима только к организациям, использующим учетные записи Google. Это не относится к организациям, использующим управляемые аккаунты Google Play .
Когда управляемая учетная запись Google пользователя активируется на управляемом устройстве, доступ к службам Google включается (или отключается) на основании:
- Состояние устройства.
- Применил ли администратор домена политики EMM (настроив «Применять политики EMM» на устройствах Android в консоли администратора Google).
Если принудительное использование EMM отключено, состояние устройства игнорируется, и учетной записи предоставляется доступ к службам Google при каждой ее активации на устройстве Android. Если принудительное применение EMM включено, но состояние устройства отключено, пользователи не смогут устанавливать приложения из Google Play, а API-интерфейсы EMM Google Play не смогут автоматически устанавливать приложения для этого пользователя на устройство.
 В этом примере показано, как получить состояние данного устройства (указанного путем передачи enterpriseId , userId и deviceId ).
 Операции getState() и setState() работают только для устройств с managementType managedDevice или managedProfile (в ресурсе Devices ). Устройствами с managementType unmanagedProfile нельзя управлять с помощью этих API.
public DeviceState getState(String enterpriseId, String userId, String
   deviceId) throws IOException {
    return androidEnterprise
        .devices()
        .getState(enterpriseId, userId, deviceId)
        .execute();
} Включите или отключите службы Google для учетной записи на устройстве, задав для строки AccountState соответствующую константу. 
public DeviceState setState(String enterpriseId, String userId, String
   deviceId, String accountState) throws IOException {
    DeviceState deviceState = new DeviceState();
    deviceState.setAccountState(accountState);
    return androidEnterprise
        .devices()
        .setState(enterpriseId, userId, deviceId, deviceState)
        .execute();
}Принудительная установка приложения на устройство
 Администраторы могут устанавливать приложения в автоматическом режиме. Взаимодействие с пользователем не требуется. В этом примере используется Installs.Update для автоматической установки приложения (идентифицированного productId ) на устройство (идентифицированное deviceId ). 
public Install update(String enterpriseId, String userId, String
   deviceId, String productId) throws IOException {
    return androidEnterprise
        .installs()
        .update(enterpriseId, userId, deviceId, productId,
           new Install())
        .execute();
}Если приложение уже существует на устройстве и доступна обновленная версия, приложение обновляется до новой версии.
Ищите и получайте приложения из списка одобренных приложений.
Администраторы создают и управляют списком одобренных приложений, которые доступны их пользователям в корпоративном Google Play. Пользователи устройств BYOD с рабочими профилями и пользователи устройств, находящихся под корпоративной ответственностью, где все устройство находится под управлением организации, могут загружать приложения только из этого утвержденного списка.
Вы можете настроить консоль EMM, включив в нее поле поиска, чтобы администраторы могли искать приложения только в списке одобренных приложений. Функция поиска принимает те же параметры, что и стандартная управляемая функция поиска Google Play, но ищет приложения только в списке одобренных приложений.
Например, если администратор хочет принудительно установить приложение из списка одобренных приложений на устройства своего предприятия, он может использовать эту функцию поиска в консоли EMM, чтобы найти это приложение.
 В своем запросе вы можете указать максимальное количество продуктов, которые должен содержать ваш результат, например setMaxResults(10L) , ровно столько, чтобы заполнить экран. Значение по умолчанию — 100, что также является максимальным значением, которое может быть возвращено за один раз. Если результат содержит токен нумерации страниц, вы можете получить больше результатов, передав токен нумерации страниц.
 В этом примере показано, как получить первые 10 результатов поиска приложений для повышения производительности. См. Products.List . 
public ListsearchProducts(String enterpriseId) throws IOException { ProductsListResponse executeResult = androidEnterprise .products() .list(enterpriseId) .setMaxResults(10L) .setQuery("productivity") .execute(); return executeResult.getProduct(); } 
Если результат поиска содержит токен нумерации страниц, поиск дал больше результатов, чем setMaxResults , или более 10 в этом примере. Чтобы получить больше результатов, повторите поиск и включите в запрос токен нумерации страниц. В этом примере получаются следующие 10 результатов. 
public ProductsListResponse continueSearch(
    String enterpriseId, ProductsListResponse previousResponse) throws IOException {
  ProductsListResponse nextResults =
      androidEnterprise
          .products()
          .list(enterpriseId)
          .setMaxResults(10L)
          .setToken(previousResponse.getTokenPagination().getNextPageToken())
          .setQuery("productivity")
          .execute();
  return nextResults;
}