Apps bereitstellen

Die Google Play EMM API unterstützt die folgenden Bereitstellungsmethoden für öffentliche und interne Apps:

Apps manuell aus dem Managed Google Play Store installieren

Sie können festlegen, welche Apps ein Nutzer im policy von Device installieren kann. Rufen Sie dazu Devices.update auf. Wenn Sie ein neues Gerät bereitstellen, sollten Sie die Richtlinie festlegen, bevor Sie dem Gerät das verwaltete Google Play-Konto hinzufügen. Andernfalls wird die Richtlinie nach dem Hinzufügen des Kontos zum Gerät für kurze Zeit nicht angewendet.

Das Verhalten des verwalteten Play Store wird durch den Wert von policy.productAvailabilityPolicy definiert:

  • all: Alle öffentlichen Apps aus dem Play Store sind verfügbar.
  • whitelist: Nur die in policy.productPolicy aufgeführten Apps sind verfügbar.

In beiden Fällen werden alle Apps in policy.productPolicy standardmäßig dem Store-Layout des Unternehmens hinzugefügt. Das Store-Layout des Unternehmens ist die Startseite des Managed Play Store, wenn whitelist ausgewählt ist. Wenn all ausgewählt ist, kann darauf über den Tab „Apps für die Arbeit“ zugegriffen werden. Sie können Ihrem Kunden erlauben, das Store-Layout des Unternehmens anzupassen, indem Sie den Managed Google Play-Iframe einbetten (siehe Apps mit dem Managed Google Play-Iframe organisieren).

Apps per Remotezugriff auf den Geräten der Nutzer installieren

Wenn Sie eine App per Remotezugriff (auch Push-Installation genannt) auf dem Gerät eines Nutzers installieren möchten, legen Sie policy.productPolicy.autoInstallPolicy in der policy von Device fest. Wenn Sie ein neues Gerät bereitstellen, sollten Sie die Richtlinie festlegen, bevor Sie dem Gerät das verwaltete Google Play-Konto hinzufügen. Andernfalls wird die Richtlinie nach dem Hinzufügen des Kontos zum Gerät für kurze Zeit nicht angewendet.

Die autoInstallMode kann auf Folgendes eingestellt werden:

  • doNotAutoInstall: Die App wird nicht automatisch installiert.
  • autoInstallOnce: Die App wird einmal automatisch installiert. Wenn der Nutzer die App deinstalliert, wird sie nicht wieder installiert.
  • forceAutoInstall: Die App wird automatisch installiert. Wenn der Nutzer die App deinstalliert, wird sie wieder installiert. Auf verwalteten Geräten sollte der DPC die Deinstallation über DevicePolicyManager.setUninstallBlocked blockieren.

Bei einem Fehler (z. B. Verbindungsverlust oder nicht ausreichender Speicherplatz) werden Installationen automatisch wiederholt, bis sie erfolgreich sind. Es wird eine exponentielle Backoff-Wiederholstrategie angewendet, um bei nicht wiederherstellbaren Fehlern Akku und Daten zu sparen.

Installationspriorität

Sie können die Reihenfolge der Installationen festlegen, indem Sie autoInstallPriority festlegen. Die Priorität muss eine positive Ganzzahl sein. Der Standardwert ist 0. Apps werden in aufsteigender Reihenfolge oder Priorität installiert, d. h., Apps mit dem niedrigeren Prioritätswert werden zuerst installiert.

Installationsbeschränkungen

Sie können Installationsbeschränkungen für jede App festlegen, indem Sie eine autoInstallConstraint festlegen. So können Sie den erforderlichen Status des Geräts während der Installation steuern:

  • ob das Gerät mit einem WLAN verbunden sein sollte,
  • ob das Gerät geladen werden soll,
  • und ob das Gerät inaktiv sein soll (nicht aktiv vom Nutzer genutzt wird).

Wenn die Einschränkungen nicht sofort erfüllt werden, werden die betroffenen Installationen in die Warteschlange gestellt, bis die Einschränkungen erfüllt sind.

In einer autoInstallConstraint wird die AND-Regel zwischen den Feldern angewendet. Bei der folgenden autoInstallConstraint muss das Gerät beispielsweise geladen und mit einem pauschal abgerechneten Netzwerk (z.B. WLAN) verbunden sein, damit die App installiert werden kann:

"autoInstallConstraint": [
  "chargingStateConstraint" : "chargingRequired",
  "networkTypeConstraint" : "unmeteredNetwork"
]

Apps automatisch auf neu bereitgestellten Geräten installieren

Die Google Play EMM API sendet eine NewDeviceEvent-Benachrichtigung, wenn ein Gerät zum ersten Mal bereitgestellt wird. Wenn Sie Apps automatisch per Push auf neu bereitgestellten Geräten installieren möchten, achten Sie auf NewDeviceEvent-Benachrichtigungen. Rufe für jede NewDeviceEvent die userId und deviceId ab und rufe dann Devices.update auf, um die Richtlinie für dieses Gerät festzulegen.

Informationen zum Abonnieren von EMM-Benachrichtigungen finden Sie unter EMM-Benachrichtigungen einrichten.

Feedback zu Fehlern bei der automatischen App-Installation

Fehler im Zusammenhang mit der App-Installation werden über App-Feedback gemeldet. Der DPC kann die EnterprisePolicyStatus-Nachricht, die über KeyedAppStatesService gesendet wird, überwachen.

Um die Base64-codierten Daten zu decodieren, muss der DPC Klassen basierend auf der Proto-Definition von EnterprisePolicyStatus generieren. Eine Anleitung zum Generieren von Proto-Klassen finden Sie in der Dokumentation zu Protocol Buffers.

Mit den generierten Klassen kann der DPC das EnterprisePolicyStatus-Objekt decodieren:

EnterprisePolicyStatus enterprisePolicyStatus = EnterprisePolicyStatus.parseFrom(
    BaseEncoding.base64().decode(base64EncodedString)
);

Die Geräterichtlinie enthält jetzt das neue optionale Feld PolicyId. Beim Erstellen oder Aktualisieren einer Richtlinie kann der EMM PolicyId auf einen beliebigen Stringwert festlegen, um eine bestimmte Version der Geräterichtlinie anzugeben.

Sofern verfügbar, wird im Feedback zur App-Installation die PolicyId angegeben, damit der DPC die empfangenen Fehler mit bestimmten Richtlinien abgleichen kann.

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;
}

Apps für geschlossene Tests bereitstellen

Bei geschlossenen Tests können App-Entwickler Feedback zu frühen Versionen ihrer App von vertrauenswürdigen Nutzern erhalten. Entwickler können geschlossene Tests in der Google Play Console einrichten. Mit der Play EMM API können IT-Administratoren geschlossene Versionen (auch Tracks genannt) von Apps an bestimmte Nutzer verteilen. Ihre Unternehmenskunden können diese Funktion nicht nur zum Testen von Drittanbieter-Apps, sondern auch zum Testen von intern entwickelten privaten Apps verwenden.

Teilnehmende Apps

Bevor ein Entwickler einer App eine Organisation zur Liste der geschlossenen Tester hinzufügt, muss die App die folgenden Kriterien erfüllen:

  • Eine Produktionsversion der App wird bei Google Play veröffentlicht.
  • In der Google Play Console ist Verwaltetes Google Play auf der Seite Erweiterte Einstellungen der App aktiviert.
  • Alle geschlossenen Versionen der App erfüllen die Anforderungen an Versionscodes.

Geschlossenen Tests ein Unternehmen hinzufügen

App-Entwickler können Unternehmen zu Tests hinzufügen, die die Methoden Geschlossener Alphatest oder Alphatest mit Google Groups verwenden. Eine Anleitung finden Sie im Hilfeartikel Offenen, geschlossenen oder internen Test einrichten. Der Entwickler muss die Organisations-ID (auch Unternehmens-ID genannt) jedes teilnehmenden Unternehmens eingeben. IT-Administratoren können Entwicklern von Drittanbieter-Apps die ID ihrer Organisation mitteilen. Gehen Sie dazu so vor:

  1. Melden Sie sich im Managed Play Store an.
  2. Klicken Sie auf Administratoreinstellungen.
  3. Kopieren Sie den Organisations-ID-String aus dem Feld mit den Organisationsinformationen und senden Sie ihn an den Entwickler.

Zusätzliche Anforderungen für private Apps

Bei privaten Apps muss der Entwickler außerdem auf der Seite „Erweiterte Einstellungen“ der App auf dem Tab Managed Google Play die Organisations-ID jedes teilnehmenden Unternehmens hinzufügen. Eine Anleitung finden Sie unter Private App veröffentlichen.

Geschlossene Titel an Nutzer verteilen

Wenn Sie eine Liste der Tracks abrufen möchten, die für ein Unternehmen für eine bestimmte App verfügbar sind, rufen Sie Products.get auf. Die Liste appTracks[] in der Antwort enthält die für jede App verfügbaren Tracks. appTracks[].trackAlias ist ein für Nutzer lesbarer Name für den Track, den Sie in Ihrer EMM-Konsole anzeigen können. appTracks[].trackId ist die maschinenlesbare ID für den Track.

Wenn Sie einem Nutzer Zugriff auf den geschlossenen Track einer App gewähren möchten, setzen Sie die policy.productPolicy[].trackIds[] in der policy der Device auf „Ein“. Wenn für ein Gerät mehrere Tracks verfügbar sind, wird die verfügbare Version mit dem höchsten Versionscode installiert.

Die trackIds werden in bestimmten Fällen automatisch aus dem Products.get-Aufruf entfernt, z. B. in folgenden Szenarien:

  • Die App-Version des Tracks wird in einen anderen Track oder in die Produktion hochgestuft.
  • Die Produktionsversion wird auf eine höhere Version als die des Tracks aktualisiert.
  • Ein Entwickler stoppt den Track.

Kostenpflichtige App-Lizenzen im Blick behalten

Bei kostenpflichtigen Apps wird mit dem Objekt Grouplicenses erfasst, wie viele Lizenzen ein Unternehmen besitzt und wie viele Lizenzen in Verwendung sind. Sie können Grouplicenses.get aufrufen, um Lizenzdetails für eine App zu erhalten.

Bevor eine kostenpflichtige App auf einem Gerät installiert werden kann, muss das Unternehmen eine Lizenz für die App haben. Ist eine Lizenz verfügbar, wird die App auf dem Gerät installiert und ein Entitlements-Objekt erstellt. Ein Entitlements-Objekt verknüpft eine Lizenz mit einem Nutzer und verringert die Anzahl der verfügbaren Lizenzen für die App. Wenn keine Lizenzen verfügbar sind, schlägt die App-Installation fehl und es wird kein Entitlements-Objekt erstellt.

Grouplicenses- und Entitlements-Objekte werden nicht von Anwendungen verwendet, die kostenlos verteilt werden.