Bedingte Zustellung konfigurieren

Mit der bedingten Übermittlung können Sie bestimmte Anforderungen an die Gerätekonfiguration festlegen, damit Funktionsmodule während der App-Installation automatisch heruntergeladen werden. Beispielsweise können Sie ein Funktionsmodul mit Augmented-Reality-Funktionen (AR) so konfigurieren, dass es bei der App-Installation nur für Geräte verfügbar ist, die AR unterstützen.

Dieser Übermittlungsmechanismus unterstützt derzeit die Steuerung des Downloads eines Moduls bei der App-Installation anhand der folgenden Gerätekonfigurationen:

Wenn ein Gerät nicht alle von Ihnen angegebenen Anforderungen erfüllt, wird das Modul nicht bei der App-Installation heruntergeladen. Ihre App kann jedoch später über das Play Core SDK den Download des Moduls bei Bedarf anfordern.

Stellen Sie zunächst sicher, dass Sie Android Studio 3.5 oder höher verwenden. In den folgenden Abschnitten wird beschrieben, wie Sie Ihren Funktionsmodulen die Unterstützung für die bedingte Zustellung hinzufügen.

Neues Modul mit Optionen für bedingte Zustellung hinzufügen

Am einfachsten können Sie ein neues Funktionsmodul mit bedingter Übermittlung über den Assistenten Neues Modul erstellen. Gehen Sie dazu so vor:

  1. Wählen Sie in der Menüleiste File > New > New Module aus, um das Dialogfeld New Module zu öffnen.
  2. Wählen Sie im Dialogfeld „Neues Modul“ die Option Dynamisches Funktionsmodul aus und klicken Sie auf Weiter.
  3. Konfigurieren Sie das Modul wie gewohnt und klicken Sie auf Weiter.
  4. Führen Sie im Abschnitt Module Download Options (Optionen zum Download des Moduls) die folgenden Schritte aus:

    1. Geben Sie den Modultitel mit bis zu 50 Zeichen an. Die Plattform verwendet diesen Titel, um Nutzern das Modul zu identifizieren, z. B. um zu bestätigen, ob der Nutzer das Modul herunterladen möchte. Aus diesem Grund muss das Basismodul Ihrer App den Modultitel als Stringressource enthalten, die übersetzt werden kann. Beim Erstellen des Moduls mit Android Studio fügt die IDE dem Basismodul die String-Ressource hinzu und schleust den folgenden Eintrag in das Manifest des Funktionsmoduls ein:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. Wählen Sie im Drop-down-Menü unter Aufnahme bei der Installation die Option Nur Modul bei der App-Installation für Geräte mit bestimmten Funktionen einschließen aus. Dadurch wird ein Modul erstellt, das bei der App-Installation auf Geräten mit bestimmten Konfigurationen, die Sie angeben können, wie Gerätefunktionen oder Land in Ihre App eingebunden wird. Android Studio fügt im Manifest des Moduls Folgendes ein, um Ihre Auswahl widerzuspiegeln:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. Wenn Sie den automatischen Download des Moduls auf bestimmte Länder oder ein Mindest-API-Level beschränken möchten, klicken Sie auf Fertigstellen, um die Erstellung des Moduls abzuschließen. Lesen Sie dann den Abschnitt zum Angeben von Bedingungen basierend auf dem Land oder zum Mindest-API-Level. Klicken Sie andernfalls auf + Gerätefunktion, um eine Funktion hinzuzufügen, die ein Gerät benötigt, um das Modul bei der Installation herunterzuladen.

    4. Wählen Sie neben device-feature eine der folgenden Optionen aus dem Drop-down-Menü aus und geben Sie den Wert an:

      • Name:Hier kannst du ein Hardware- oder Softwarefeature angeben, das ein Gerät benötigt, um das Modul bei der Installation herunterzuladen. Die Funktionen, die die bedingte Zustellung unterstützt, sind die gleichen, die in PackageManager als FEATURE_*-Konstanten aufgeführt sind. Wenn Sie diese Option auswählen, geben Sie im Feld neben dem Drop-down-Menü einen beliebigen Teil des konstanten Werts der Funktion ein, z. B. "Bluetooth", und wählen Sie einen der angezeigten Vorschläge aus.
      • OpenGL ES-Version:Hier können Sie die OpenGL ES-Version angeben, die ein Gerät benötigt, um das Modul bei der Installation herunterzuladen. Wenn Sie diese Option auswählen, beginnen Sie im Feld neben dem Drop-down-Menü mit der Eingabe der Version, z. B. „0x00030001“, und wählen einen der angezeigten Vorschläge aus.
    5. Wenn Sie mehrere Bedingungen basierend auf den verfügbaren Gerätefunktionen hinzufügen möchten, klicken Sie für jede Bedingung, die Sie angeben möchten, auf + Gerätefunktion.

    6. Klicke das Kästchen neben Fusing an, wenn dieses Modul für Geräte mit Android 4.4 (API-Level 20) und niedriger verfügbar und in Multi-APKs enthalten sein soll. Das bedeutet, dass Sie das On-Demand-Verhalten für dieses Modul aktivieren und die Zusammenführung deaktivieren können, um es auf Geräten auszuschließen, die das Herunterladen und Installieren von unterteilten APKs nicht unterstützen. Android Studio schleust Folgendes in das Manifest des Moduls ein, um Ihre Auswahl widerzuspiegeln:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. Wenn Sie mit der Konfiguration der Downloadoptionen für das Modul fertig sind, klicken Sie auf Fertigstellen.

Das Ausführen von Lint über dynamische Feature-Module wird vom Android-Gradle-Plug-in nicht unterstützt. Wenn Sie Lint vom entsprechenden Anwendungsmodul ausführen, wird Lint auf den Modulen der dynamischen Funktionen ausgeführt und alle Probleme werden in den Lint-Bericht der App aufgenommen.

Optionen für bedingte Zustellung zu einem vorhandenen Funktionsmodul hinzufügen

Über das Manifest des Moduls können Sie einem vorhandenen Funktionsmodul ganz einfach Optionen für die bedingte Zustellung hinzufügen. Wir empfehlen Ihnen jedoch, sich zuerst über die Kompatibilität von bedingten Zustellungsoptionen mit anderen Auslieferungsoptionen, die Sie möglicherweise bereits aktiviert haben, zu informieren.

Zuerst müssen Sie Ihr Manifest zum neuen <dist:delivery>-Element migrieren. Das folgende Code-Snippet zeigt ein Beispiel für die ältere Syntax:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

Die oben genannten Auslieferungsoptionen werden jetzt wie folgt festgelegt.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

Sie können dann Optionen für die bedingte Zustellung basierend auf Gerätefunktionen hinzufügen. Gehen Sie dazu so vor:

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

In den folgenden Abschnitten werden andere Optionen für die bedingte Zustellung erläutert, z. B. nach Land oder Mindest-API-Level.

Kompatibel mit anderen Modul-Download-Optionen

Da Funktionsmodule mehrere Optionen bieten, um zu konfigurieren, wie die einzelnen Funktionen an das Gerät eines Nutzers gesendet werden, ist es wichtig zu verstehen, wie sich andere Einstellungen auf die Optionen für die bedingte Zustellung auswirken. In der folgenden Tabelle ist die Kompatibilität der bedingten Übermittlung mit anderen Moduldownloadoptionen zusammengefasst.

Option zum Herunterladen des Moduls Kompatibilität mit bedingter Zustellung
Wird zusammengeführt (<dist:fusing dist:include="true"/>) Wenn ein Modul diese Option auf „true“ setzt, berücksichtigt Google Play die Optionen für die bedingte Zustellung nicht, die du bei der Bereitstellung deiner App für Geräte mit API-Level 19 oder niedriger angegeben hast. Das heißt, Funktionsmodule, die eine Zusammenführung ermöglichen, sind bei der Installation für Geräte mit API-Level 19 oder niedriger immer enthalten.
Instant-Version (<dist:module dist:instant="true"/>) Optionen für die bedingte Zustellung werden für Funktionsmodule mit Instant-Version nicht unterstützt.
On demand (<dist:on-demand/>) Wenn Sie Optionen für die bedingte Zustellung angeben, ist das Modul standardmäßig auch auf Abruf verfügbar.

Bedingungen basierend auf dem Land angeben

Bei der bedingten Übermittlung können Sie auch angeben, welche Länder bei der App-Installation vom Download des Moduls ausgeschlossen (oder eingeschlossen) werden sollen. Die Angabe dieser Bedingung kann nützlich sein, wenn dein Modul eine Zahlungsmethode implementiert, die in bestimmten Regionen nicht verfügbar ist.

Das Land des Geräts wird in der Regel anhand der Rechnungsadresse des Nutzers bestimmt, die in seinem Google Play-Konto registriert ist.

Wenn du Länder für dein Modul angeben möchtest, nimm Folgendes in das Manifest des Funktionsmoduls auf.

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

Bedingungen für API-Level angeben

Die Angabe einer Bedingung basierend auf dem API-Level eines Geräts kann nützlich sein, wenn ein Funktionsmodul von APIs abhängt, die nur in bestimmten Versionen der Android-Plattform verfügbar sind.

Wenn du eine Bedingung basierend auf einem minimalen oder maximalen API-Level für Geräte festlegen möchtest, nimm Folgendes in das Manifest deines Funktionsmoduls auf.

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>