L'API Google Play EMM est compatible avec les méthodes de distribution suivantes pour les applications publiques et privées:
- Les utilisateurs peuvent installer manuellement des applications depuis le Google Play Store d'entreprise.
- Les administrateurs informatiques peuvent installer à distance des applications sur les appareils des utilisateurs.
Installer manuellement des applications depuis la plate-forme Google Play d'entreprise
Vous pouvez définir les applications disponibles pour un utilisateur à installer dans le policy
de Device
et le définir en appelant Devices.update
. Lorsque vous provisionnez un nouvel appareil, vous devez définir la règle avant d'ajouter le compte Google Play géré à l'appareil. Sinon, la règle ne s'appliquera pas pendant une courte période après l'ajout du compte à l'appareil.
Le comportement du Play Store géré est défini par la valeur de policy.productAvailabilityPolicy
:
all
: toutes les applications publiques du Play Store sont disponibles.whitelist
: seules les applications listées danspolicy.productPolicy
sont disponibles.
Dans les deux cas, toutes les applications de policy.productPolicy
sont ajoutées par défaut à la mise en page de la plate-forme de l'entreprise. La mise en page de la plate-forme de l'entreprise est la page d'accueil du Play Store d'entreprise lorsque whitelist
est sélectionné. Elle est accessible dans un onglet "Applications professionnelles" lorsque all
est sélectionné. Vous pouvez autoriser votre client à personnaliser la mise en page de la plate-forme de l'entreprise en insérant l'iframe Google Play d'entreprise (voir Organiser les applications avec l'iframe Google Play d'entreprise).
Installer des applications à distance sur les appareils des utilisateurs
Pour installer à distance (également appelée installation push) une application sur l'appareil d'un utilisateur, définissez policy.productPolicy.autoInstallPolicy
dans le policy
de Device
. Lorsque vous provisionnez un nouvel appareil, vous devez définir la règle avant d'ajouter le compte Google Play géré à l'appareil. Sinon, la règle ne s'appliquera pas pendant une courte période après l'ajout du compte à l'appareil.
autoInstallMode
peut être défini sur:
doNotAutoInstall
: l'application n'est pas installée automatiquement.autoInstallOnce
: l'application est installée automatiquement une fois. Si l'utilisateur la désinstalle, elle ne sera plus installée.forceAutoInstall
: l'application est installée automatiquement. Si l'utilisateur la désinstalle, elle sera réinstallée. Sur les appareils gérés, le DPC doit bloquer la désinstallation à l'aide deDevicePolicyManager.setUninstallBlocked
.
En cas d'échec (perte de connectivité, manque d'espace de stockage, etc.), les installations sont automatiquement réessayées jusqu'à ce qu'elles aboutissent. Une stratégie de nouvelle tentative avec intervalle exponentiel entre les tentatives est appliquée pour éviter de gaspiller de la batterie et des données en cas d'échecs irrécupérables.
Priorité d'installation
Vous pouvez choisir l'ordre d'installation en définissant autoInstallPriority
. La priorité doit être un entier non signé, et la valeur par défaut est 0. Les applications seront installées dans l'ordre croissant ou prioritaire, ce qui signifie que les applications ayant la valeur de priorité la plus basse seront installées en premier.
Contraintes d'installation
Vous pouvez définir des contraintes d'installation pour chaque application en définissant un autoInstallConstraint
, ce qui vous permet de contrôler l'état requis de l'appareil lors de l'installation:
- si l'appareil doit être connecté à un réseau Wi-Fi ;
- si l'appareil doit être en charge ;
- et si l'appareil doit être inactif (pas utilisé activement par l'utilisateur).
Si les contraintes ne sont pas remplies immédiatement, les installations concernées sont mises en file d'attente jusqu'à ce qu'elles le soient.
Dans un autoInstallConstraint
, la règle AND est appliquée entre les champs. Par exemple, avec la autoInstallConstraint
suivante, l'appareil doit être en charge et connecté à un réseau sans compteur (par exemple, Wi-Fi) pour que l'application soit installée:
"autoInstallConstraint": [
"chargingStateConstraint" : "chargingRequired",
"networkTypeConstraint" : "unmeteredNetwork"
]
Installer automatiquement des applications sur les appareils nouvellement provisionnés
L'API EMM Google Play envoie une notification NewDeviceEvent
lorsqu'un appareil est provisionné pour la première fois. Pour installer automatiquement des applications sur les appareils nouvellement provisionnés, écoutez les notifications NewDeviceEvent
. À partir de chaque NewDeviceEvent
, récupérez userId
et deviceId
, puis appelez Devices.update
pour définir la règle pour cet appareil.
Pour savoir comment vous abonner aux notifications EMM, consultez la page Configurer les notifications EMM.
Commentaires sur les erreurs d'installation automatique d'applications
Les erreurs liées à l'installation d'une application sont signalées via les commentaires sur l'application, et le DPC peut surveiller le message EnterprisePolicyStatus
envoyé via KeyedAppStatesService
.
Pour décoder les données encodées en base64, le DPC doit générer des classes basées sur la définition de proto de EnterprisePolicyStatus
. Pour savoir comment générer des classes proto, consultez la documentation sur les Protocol Buffers.
Avec les classes générées, le DPC peut décoder l'objet EnterprisePolicyStatus
:
EnterprisePolicyStatus enterprisePolicyStatus = EnterprisePolicyStatus.parseFrom(
BaseEncoding.base64().decode(base64EncodedString)
);
La stratégie d'appareil inclut désormais le nouveau champ facultatif PolicyId
.
Lorsque vous créez ou mettez à jour une stratégie, l'EMM peut définir PolicyId
sur n'importe quelle valeur de chaîne afin d'identifier une version spécifique de la stratégie d'appareil.
Le cas échéant, les commentaires sur l'installation de l'application signalent PolicyId
afin que le DPC puisse faire correspondre les erreurs reçues à des règles spécifiques.
EnterprisePolicyStatus
message EnterprisePolicyStatus {
// Individual status for an app in the policy
repeated ApplicationStatus app_status = 1;
// Version of the policy for which this status applies.
PolicyVersion version = 2;
}
ApplicationStatus
// Individual status for an app.
message ApplicationStatus {
// The package name for the app.
string package_name = 1;
// The install status for the app. Only includes status for apps scheduled
// to be auto-installed via the policy resource.
AutoInstallStatus install_status = 2;
}
AutoInstallStatus
// Auto-install status for an app.
message AutoInstallStatus {
// The error causing the install to fail if state is INSTALL_ERROR.
EnterpriseAutoInstallError error = 1;
// The current install state of the app.
EnterpriseAutoInstallState state = 2;
}
PolicyVersion
// The version of the policy which these install states apply to.
message PolicyVersion {
// A policy id which may be optionally set by the EMM.
string policy_id = 1;
}
EnterpriseAutoInstallError
// Install errors resulting in failure to install an app.
enum EnterpriseAutoInstallError {
// Catch-all for unrecognized enum values.
ENTERPRISE_AUTO_INSTALL_ERROR_UNKNOWN = 0;
// The app could not be found.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_FOUND = 1;
// The app is not available in the user's country.
ENTERPRISE_AUTO_INSTALL_ERROR_UNAVAILABLE_COUNTRY = 2;
// The app is not compatible with the device hardware.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE = 3;
// No license remained to grant ownership of the app, and the user did not
// already own the app.
ENTERPRISE_AUTO_INSTALL_ERROR_NO_LICENSES_REMAINING = 4;
// Required permissions for the app have not been accepted.
ENTERPRISE_AUTO_INSTALL_ERROR_MISSING_PERMISSION = 5;
// The app is not available based on the enterprise availability policy.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_APPROVED_OR_UNAVAILABLE = 6;
// The app is not available to the user or device.
ENTERPRISE_AUTO_INSTALL_ERROR_APP_UNAVAILABLE = 7;
// Failed to grant license because the user already has ownership.
ENTERPRISE_AUTO_INSTALL_ERROR_INCOMPATIBLE_OWNERSHIP = 8;
// The admin has not accepted the terms of service.
ENTERPRISE_AUTO_INSTALL_ERROR_TOS_NOT_ACCEPTED = 9;
// The device does not have enough RAM.
ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_RAM = 10;
// The app is incompatible with the device carrier.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_CARRIER = 11;
// The app is incompatible with the country or carrier.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_COUNTRY_OR_CARRIER = 12;
// The app is incompatible with the safe search level.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_SAFE_SEARCH_LEVEL = 13;
// The app could not be installed due to an installer error.
ENTERPRISE_AUTO_INSTALL_ERROR_INSTALL_FAILED = 14;
// The app could not be installed due to network errors.
ENTERPRISE_AUTO_INSTALL_ERROR_NETWORK_FAILED = 15;
// The device does not have enough storage.
ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_STORAGE = 16;
}
EnterpriseAutoInstallState
// The current install state for an app.
enum EnterpriseAutoInstallState {
// Catch-all for unrecognized enum values.
INSTALL_STATE_UNKNOWN = 0;
// The app has been received by Play but an install attempt has not completed
// yet.
INSTALL_STATE_PENDING = 1;
// The latest install attempt failed and will be retried automatically.
INSTALL_STATE_ERROR = 2;
// The app has been installed.
INSTALL_STATE_INSTALLED = 3;
}
Distribuer des applications pour des tests fermés
Les tests fermés permettent aux développeurs d'applications de recueillir les commentaires d'utilisateurs de confiance sur les versions préliminaires de leur application. Les développeurs peuvent configurer des tests fermés dans la Google Play Console. L'API Play EMM permet aux administrateurs informatiques de distribuer des versions fermées (également appelées canaux) d'applications à des utilisateurs spécifiques. Vos clients professionnels peuvent utiliser cette fonctionnalité pour tester non seulement des applications tierces, mais aussi des applications privées développées en interne.
Applications éligibles
Avant qu'un développeur ajoute une entreprise à la liste des testeurs fermés d'une application, celle-ci doit répondre aux critères suivants:
- Une version de production de l'application est publiée sur Google Play.
- Dans la Google Play Console, Google Play géré est activé sur la page Paramètres avancés de l'application.
- Toutes les versions fermées de l'application respectent les exigences concernant les codes de version.
Ajouter une entreprise aux tests fermés
Les développeurs d'applications peuvent ajouter des entreprises aux tests qui utilisent les méthodes Tests alpha fermés ou Tests alpha via Google Groupes. Pour obtenir des instructions, consultez le guide sur la configuration d'un test ouvert, fermé ou interne. Le développeur doit saisir l'ID de l'organisation (également appelé ID d'entreprise) de chaque entreprise participante. Les administrateurs informatiques peuvent fournir l'ID de leur organisation aux développeurs d'applications tierces en procédant comme suit:
- Connectez-vous au Google Play Store d'entreprise.
- Cliquez sur Paramètres de l'administrateur.
- Copiez la chaîne de l'ID de l'organisation dans le champ "Informations sur l'organisation" et envoyez-la au développeur.
Exigences supplémentaires pour les applications privées
Pour les applications privées, le développeur doit également ajouter l'ID de l'organisation de chaque entreprise participante dans l'onglet Google Play d'entreprise de la page "Paramètres avancés" de l'application. Pour obtenir des instructions, consultez Publier une application privée.
Distribuer des voies fermées aux utilisateurs
Pour récupérer la liste des canaux disponibles pour une entreprise pour une application spécifiée, appelez Products.get
. La liste appTracks[]
contenue dans la réponse inclut les canaux disponibles pour chaque application. appTracks[].trackAlias
est un nom lisible par l'utilisateur pour le canal que vous pouvez afficher dans votre console EMM, et appTracks[].trackId
est l'ID lisible par machine du canal.
Pour accorder à un utilisateur la visibilité sur le canal fermé d'une application, définissez policy.productPolicy[].trackIds[]
dans le policy
de Device
. Si plusieurs canaux sont disponibles pour un appareil, la version disponible avec le code de version le plus élevé est installée.
Les trackIds sont automatiquement supprimés de l'appel Products.get
dans certains scénarios, par exemple:
- La version de l'application du canal est promue vers un autre canal ou vers la production.
- La version de production est mise à jour avec une version supérieure à celle du canal.
- Un développeur arrête le canal.
Suivre les licences d'application payantes
Pour les applications payantes, l'objet Grouplicenses
permet de suivre le nombre de licences détenues par une entreprise et le nombre de licences utilisées. Vous pouvez appeler Grouplicenses.get
pour obtenir les informations de licence d'une application.
Avant qu'une application payante puisse être installée sur un appareil, l'entreprise doit disposer d'une licence pour l'application. Si une licence est disponible, l'application est installée sur l'appareil et un objet Entitlements
est créé. Un objet Entitlements
associe une licence à un utilisateur et diminue le nombre de licences disponibles pour l'application. Si aucune licence n'est disponible, l'installation de l'application échoue et aucun objet Entitlements
n'est créé.
Les objets Grouplicenses
et Entitlements
ne sont pas utilisés par les applications distribuées sans frais.