Engage SDK – Listen: Anleitung zur technischen Integration von Drittanbietern

Google entwickelt eine On-Device-Oberfläche, Apps nach Branchen und ermöglicht ein neues immersives Erlebnis zur Nutzung personalisierter App-Inhalte. und Auffindbarkeit. Diese Vollbildansicht bietet Entwicklern die Möglichkeit, ihre besten hochwertigen Inhalte in einem eigenen Kanal außerhalb von Google zu präsentieren. ihrer App.

Dieser Leitfaden enthält eine Anleitung für Entwicklerpartner zum Einbinden von Audioanzeigen und nutzen das Engage SDK, um sowohl die neue Oberfläche als auch vorhandenen Google-Plattformen.

Integrationsdetails

Terminologie

Diese Integration umfasst die folgenden drei Clustertypen: Empfehlung, Continuation und Featured.

  • Empfehlungscluster zeigen personalisierte Vorschläge für zu lesende Inhalte an. von einem einzelnen Entwicklerpartner.

    Ihre Empfehlungen haben folgende Struktur:

    • Empfehlungscluster:Eine UI-Ansicht, die eine Gruppe von vom selben Entwicklerpartner erhalten.

      <ph type="x-smartling-placeholder">
      </ph>
      Abbildung 1: Benutzeroberfläche von Entertainment Space mit Empfehlungscluster von einem einzigen Partner
    • Entität:Ein Objekt, das ein einzelnes Element in einem Cluster darstellt. Entität z. B. eine Playlist, ein Hörbuch oder ein Podcast. Weitere Informationen finden Sie im Abschnitt zur Bereitstellung von Abschnitt zu Entitätsdaten mit einer Liste der unterstützten Entitäten Typen.

      <ph type="x-smartling-placeholder">
      </ph>
      Abbildung 2: Benutzeroberfläche von Entertainment Space mit einer Entität im Empfehlungscluster eines einzelnen Partners.
  • Im Cluster Fortsetzung werden Audioinhalte angezeigt, mit denen Nutzer zuletzt interagiert haben. von mehreren Entwicklerpartnern in einer einzigen UI-Gruppierung. Jeder Entwickler darf der Partner maximal 10 Entitäten im Fortsetzungscluster.

    <ph type="x-smartling-placeholder">
    </ph>
    Abbildung 3: Benutzeroberfläche von Entertainment Space mit Fortsetzungscluster mit noch nicht abgeschlossenen Empfehlungen aus mehreren (derzeit nur eine Empfehlung sichtbar).
  • Im Cluster Empfohlen wird eine Auswahl von Objekten aus mehreren Entwicklerpartner in einer einzigen UI-Gruppierung zusammengefasst. Es wird eine einzelne Funktion Cluster, der oben in der UI mit einer Priorität angezeigt wird die über allen Empfehlungsclustern liegt. Jeder Entwicklerpartner bis zu 10 Entitäten im Featured Cluster veröffentlichen können.

    <ph type="x-smartling-placeholder">
    </ph>
    Abbildung 4: In der Entertainment Space-Benutzeroberfläche wird der Bereich „Empfohlen“ angezeigt. Cluster mit Empfehlungen von mehreren Partnern (nur eine) Empfehlung wird derzeit angezeigt).

Vorarbeiten

Mindest-API-Level: 19

Fügen Sie Ihrer App die com.google.android.engage:engage-core-Bibliothek hinzu:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.2'
}

Zusammenfassung

Das Design basiert auf der Implementierung einer gebundenen

Die Daten, die ein Client veröffentlichen kann, unterliegen den folgenden Beschränkungen für verschiedene Clustertypen:

Clustertyp Cluster limits Maximale Entitätslimits in einem Cluster
Empfehlungscluster Höchstens 5 Höchstens 50
Fortsetzungscluster Höchstens 1 Höchstens 10
Ausgewählter Cluster Höchstens 1 Höchstens 10

Schritt 1: Entitätsdaten angeben

Im SDK sind verschiedene Entitäten für jeden Elementtyp definiert. Wir unterstützen die folgenden Entitäten für die Kategorie „Listen“:

  1. MusicAlbumEntity
  2. MusicArtistEntity
  3. MusicTrackEntity
  4. MusicVideoEntity
  5. PlaylistEntity
  6. PodcastSeriesEntity
  7. PodcastEpisodeEntity
  8. LiveRadioStationEntity
  9. AudiobookEntity

In den folgenden Tabellen sind die verfügbaren Attribute und Anforderungen für die einzelnen Typen aufgeführt.

MusicAlbumEntity

Das MusicAlbumEntity-Objekt steht für ein Musikalbum, z. B. Mitternacht. von Taylor Swift).

Attribut Anforderungen Hinweise
Name Erforderlich Der Titel des Musikalbums.
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
URI der Informationsseite Erforderlich

Der Deeplink zur Anbieter-App für Details zum Musikalbum

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Künstler Erforderlich Liste der Künstler des Musikalbums
Wiedergabe-URI Optional

Ein Deeplink, mit dem die Wiedergabe des Albums in der Anbieter-App gestartet wird.

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Anzahl der Titel Optional Die Anzahl der Titel im Musikalbum.
Genres Optional Liste der Genres im Musikalbum
Albumformat Optional

ALBUM (inkl. LP und Doppel-LP)

EP

EINZIGES

Mixtape

Musiklabels Optional Liste der mit dem Album verknüpften Musiklabels
Auf Gerät heruntergeladen Optional Boolescher Wert, der angibt, ob das Musikalbum auf das Gerät heruntergeladen wurde
Explizit Optional

Ein boolescher Wert, der angibt, ob der Inhalt explizit ist oder nicht

Inhalte mit expliziten Inhalten oder Inhalten, für die ein elterlicher Hinweis vorliegt Für Warnung sollte TRUE festgelegt werden. Anstößige Inhalte werden mit einem „E“ angezeigt Tag.

Erscheinungsdatum Optional Das Veröffentlichungsdatum des Albums in Millisekunden der Epoche.
Dauer Optional Die Dauer des Albums in Millisekunden
Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

Fortschritt in Prozent abgeschlossen Optional

Empfohlen für Elemente im Fortsetzungscluster.

Ganzzahl zwischen 0 und 100

MusicArtistEntity

Das MusicArtistEntity-Objekt steht für einen Musiker (z. B. Adele).

Attribut Anforderungen Hinweise
Name Erforderlich Name des Künstlers
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
URI der Informationsseite Erforderlich

Der Deeplink zur Anbieter-App mit Details zur Musik Künstler.

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Wiedergabe-URI Optional

Der Deeplink, über den die Titel des Künstlers beim Anbieter wiedergegeben werden

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

MusicTrackEntity

Das MusicTrackEntity-Objekt steht für einen Musiktitel, zum Beispiel Yellow by Coldplay.

Attribut Anforderungen Hinweise
Name Erforderlich Titel des Musiktitels
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
Wiedergabe-URI Erforderlich

Ein Deeplink, der die Wiedergabe des Musiktitels beim Anbieter startet

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

URI der Informationsseite Optional

Ein Deeplink zur Anbieter-App mit Details zum Musiktitel

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Dauer Optional Die Dauer des Titels in Millisekunden.
Album Optional Der Name des Albums, zu dem der Song gehört
Künstler Erforderlich Liste der Künstler für den Musiktitel
Auf Gerät heruntergeladen Optional Boolescher Wert, der angibt, ob der Musiktitel auf das Gerät heruntergeladen wurde.
Explizit Optional

Ein boolescher Wert, der angibt, ob der Inhalt explizit ist oder nicht

Inhalte mit expliziten Inhalten oder Inhalten, für die ein elterlicher Hinweis vorliegt Warnung sollte auf TRUE gesetzt werden. Anstößige Inhalte werden mit einem „E“ angezeigt Tag.

Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

Fortschritt in Prozent abgeschlossen Optional

Empfohlen für Elemente im Fortsetzungscluster.

Ganzzahl zwischen 0 und 100

MusicVideoEntity

Das MusicVideoEntity-Objekt steht für ein Musikvideo, z. B. The Weeknd – Take My Breath (offizielles Musikvideo)).

Attribut Anforderungen Hinweise
Name Erforderlich Titel des Musikvideos.
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
Wiedergabe-URI Erforderlich

Ein Deeplink, über den das Musikvideo beim Anbieter wiedergegeben wird

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

URI der Informationsseite Optional

Ein Deeplink zur Anbieter-App mit Details zum Musikvideo

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Dauer Optional Die Dauer des Videos in Millisekunden.
Anzahl der Aufrufe Optional Die Anzahl der Aufrufe des Videos im Freitextformat.
Künstler Optional Liste der Künstler des Musikvideos.
Altersfreigabe Optional Liste der Altersfreigaben des Titels.
Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Auf Gerät heruntergeladen Optional Boolescher Wert, der angibt, ob das Musikvideo auf das Gerät heruntergeladen wurde.
Explizit Optional

Ein boolescher Wert, der angibt, ob der Inhalt explizit ist oder nicht

Inhalte mit expliziten Inhalten oder Inhalten, für die ein elterlicher Hinweis vorliegt Warnung sollte auf TRUE gesetzt werden. Anstößige Inhalte werden mit einem „E“ angezeigt Tag.

Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

Fortschritt in Prozent abgeschlossen Optional

Empfohlen für Elemente im Fortsetzungscluster.

Ganzzahl zwischen 0 und 100

PlaylistEntity

Das PlaylistEntity-Objekt steht für eine Musikplaylist, z. B. das 10 Playlist).

Attribut Anforderungen Hinweise
Name Erforderlich Titel der Playlist.
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
Wiedergabe-URI Erforderlich

Ein Deeplink, der die Wiedergabe der Musikplaylist beim Anbieter startet

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

URI der Informationsseite Optional

Ein Deeplink zur Anbieter-App für Details zur Musikplaylist.

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Dauer Optional Die Dauer der Playlist in Millisekunden.
Anzahl der Titel Optional Die Anzahl der Titel in der Musikplaylist.
Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Auf Gerät heruntergeladen Optional Boolescher Wert, der angibt, ob die Playlist auf das Gerät heruntergeladen wurde.
Explizit Optional

Ein boolescher Wert, der angibt, ob der Inhalt explizit ist oder nicht

Inhalte mit expliziten Inhalten oder Inhalten, für die ein elterlicher Hinweis vorliegt Warnung sollte auf TRUE gesetzt werden. Anstößige Inhalte werden mit einem „E“ angezeigt Tag.

Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

Fortschritt in Prozent abgeschlossen Optional

Empfohlen für Elemente im Fortsetzungscluster.

Ganzzahl zwischen 0 und 100

PodcastSeriesEntity

Das PodcastSeriesEntity-Objekt steht für eine Podcast-Serie, z. B. Dieses American Life).

Attribut Anforderungen Hinweise
Name Erforderlich Titel der Podcast-Serie.
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
URI der Informationsseite Erforderlich

Einen Deeplink zur Anbieter-App mit Details zum Podcast .

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Wiedergabe-URI Optional

Ein Deeplink, über den die Wiedergabe der Podcast-Serie in der Anbieter-App gestartet wird.

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Anzahl der Folgen Optional Die Anzahl der Folgen der Podcast-Serie.
Produktionsname Optional Der Name der Produktion der Podcast-Serie.
Hosts Optional Liste der Moderatoren der Podcast-Serie.
Genres Optional Liste der Genres der Podcast-Serie.
Auf Gerät heruntergeladen Optional Boolescher Wert, der angibt, ob der Podcast auf das Gerät heruntergeladen wird.
Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Explizit Optional

Ein boolescher Wert, der angibt, ob der Inhalt explizit ist oder nicht

Inhalte mit expliziten Inhalten oder Inhalten, für die ein elterlicher Hinweis vorliegt Warnung sollte auf TRUE gesetzt werden. Anstößige Inhalte werden mit einem „E“ angezeigt Tag.

Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

PodcastEpisodeEntity

Das PodcastEpisodeEntity-Objekt steht für eine Podcast-Serie, z. B. Spark Bird, Folge 754: This American Life).

Attribut Anforderungen Hinweise
Name Erforderlich Titel der Podcastfolge.
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
Wiedergabe-URI Erforderlich

Ein Deeplink, über den die Podcastfolge beim Anbieter abgespielt wird

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Titel der Produktionsreihe Erforderlich Der Name der Podcast-Serie, zu der die Folge gehört.
Dauer Erforderlich Die Dauer der Podcastfolge in Millisekunden.
Publish Date Erforderlich Veröffentlichungsdatum des Podcasts (in Millisekunden der Epoche)
URI der Informationsseite Optional

Ein Deeplink zur Anbieter-App mit Details zur Podcastfolge.

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Produktionsname Optional Der Name der Produktion der Podcast-Serie.
Folgenindex Optional Der Index der Folge in der Serie (erster Index ist 1).
Hosts Optional Liste der Moderatoren der Podcastfolge.
Genres Optional Liste der Genres der Podcastfolge.
Auf Gerät heruntergeladen Optional Boolescher Wert, der angibt, ob die Podcastfolge auf das Gerät heruntergeladen wird.
Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Video-Podcast Optional Boolescher Wert, der angibt, ob die Podcast-Folge Videoinhalte enthält
Explizit Optional

Ein boolescher Wert, der angibt, ob der Inhalt explizit ist oder nicht

Inhalte mit expliziten Inhalten oder Inhalten, für die ein elterlicher Hinweis vorliegt Warnung sollte auf TRUE gesetzt werden. Anstößige Inhalte werden mit einem „E“ angezeigt Tag.

Typ „Nächstes anhören“ Optional

Empfohlen für Elemente im Fortsetzungscluster

TYPE_WEITER: Bei einem noch nicht fertig gestellten Audioelement wird die Wiedergabe fortgesetzt.

TYPE_NEXT – Fahre mit einem neuen Element einer Reihe fort.

TYPE_NEW – neu veröffentlicht.

Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

Fortschritt in Prozent abgeschlossen Optional

Empfohlen für Elemente im Fortsetzungscluster.

Ganzzahl zwischen 0 und 100

LiveRadioStationEntity

Das Objekt LiveRadioStationEntity steht für einen Live-Radiosender (für Beispiel: 98.1 Die Brise).

Attribut Anforderungen Hinweise
Name Erforderlich Titel des Live-Radiosenders.
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Bildspezifikationen.
Wiedergabe-URI Erforderlich

Ein Deeplink, über den der Radiosender beim Anbieter wiedergegeben wird

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

URI der Informationsseite Optional

Ein Deeplink zur Anbieter-App mit Details zum Radiosender

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Häufigkeit Optional Die Frequenz, mit der der Radiosender gesendet wird (z. B. „98.1 FM“).
Titel der Serie Optional Die aktuelle Sendung, die im Radiosender gespielt wird.
Hosts Optional Liste der Hosts des Radiosenders
Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Letzte Interaktion Optional

Empfohlen für Elemente im Fortsetzungscluster. Kann verwendet werden für Ranking.

In Epochenmillisekunden

AudiobookEntity

Das AudiobookEntity-Objekt steht für ein Hörbuch, z. B. das Hörbuch von Becoming von Michelle Obama).

Attribut Anforderungen Hinweise
Name Erforderlich
Posterbilder Erforderlich Es muss mindestens ein Bild zur Verfügung gestellt werden. Siehe Bild Die Spezifikationen findest du in der Hilfe.
Autor Erforderlich Es muss mindestens ein Autorenname angegeben werden.
Narrator Erforderlich Es muss mindestens ein Sprechername angegeben werden.
Aktionslink-URI Erforderlich

Der Deeplink zur Anbieter-App für das Hörbuch.

Hinweis: Für die Attribution können Sie Deeplinks verwenden. <ph type="x-smartling-placeholder"></ph> Weitere Informationen

Veröffentlichungsdatum Optional In Epochenmillisekunden, falls angegeben.
Beschreibung Optional Darf 200 Zeichen nicht überschreiten, falls angegeben.
Preis Optional Freier Text
Dauer Optional Muss ein positiver Wert sein, falls angegeben.
Genre Optional Liste der zu dem Buch gehörenden Genres.
Name der Reihe Optional Der Name der Reihe, zu der das Hörbuch gehört, z. B. Harry Töpfer.
Index der Buchreihe Optional Der Index des Hörbuchs der Reihe, wobei „1“ das erste Hörbuch ist in der Reihe. Wenn zum Beispiel Harry Potter und der Gefangene Askaban ist das 3. Buch in der Reihe. Legen Sie die Zahl „3“ fest.
Buchtyp fortsetzen Optional

TYPE_WEITER: Mit einem noch nicht fertigen Buch fortfahren.

TYPE_NEXT – mit einem neuen Titel einer Serie fortfahren

TYPE_NEW – neu veröffentlicht.

Zeitpunkt der letzten Interaktion Bedingt erforderlich

Muss angegeben werden, wenn sich das Element im Continuation-Cluster befindet.

In Epochenmillisekunden.

Fortschrittsintervall (in Prozent) Bedingt erforderlich

Muss angegeben werden, wenn sich das Element im Continuation-Cluster befindet.

Neu erworbene Hörbücher können Teil des Weiterlesens werden. Cluster.

Der Wert muss größer als 0 und kleiner als 100 sein.

DisplayTimeWindow - Zeitfenster für einen Inhalt festlegen sichtbar zu sein.
Startzeitstempel Optional

Der Epochenzeitstempel, nach dem der Inhalt im Oberfläche.

Wenn die Richtlinie nicht konfiguriert ist, können Inhalte auf der Oberfläche angezeigt werden.

In Epochenmillisekunden.

Endzeitstempel Optional

Der Epochenzeitstempel, nach dem der Inhalt nicht mehr zu sehen ist an die Oberfläche.

Wenn die Richtlinie nicht konfiguriert ist, können Inhalte auf der Oberfläche angezeigt werden.

In Epochenmillisekunden.

Bildspezifikationen

Im Folgenden finden Sie die erforderlichen Spezifikationen für Bild-Assets:

Seitenverhältnis Anforderungen Mindestanzahl Pixel Empfohlene Pixel
Quadrat (1 × 1) Erforderlich 300 × 300 1200 × 1200
Querformat (1,91 x 1) Optional 600 × 314 1200 × 628
Hochformat (4:5) Optional 480 × 600 960 × 1200

Dateiformate

PNG, JPG, statisches GIF, WebP

Maximale Dateigröße

5.120 KB

Weitere Empfehlungen

  • Bildbereich:Wichtige Inhalte sollten in den mittleren 80% des Bild.

Beispiele

MusicAlbumEntity musicAlbumEntity =
        new MusicAlbumEntity.Builder()
            .setName(NAME)
             .addPosterImage(new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(960)
                  .setImageWidthInPixel(408)
                  .build())
            .setPlayBackUri("https://play.google/album/play")
            .setInfoPageUri("https://play.google/album/info")
            .setDescription("A description of this album.")
            .addArtist("Artist")
            .addGenre("Genre")
            .addMusicLabel("Label")
            .addContentRating("Rating")
            .setSongsCount(960)
            .setReleaseDateEpochMillis(1633032895L)
            .setDurationMillis(1633L)
            .build();
AudiobookEntity audiobookEntity =
        new AudiobookEntity.Builder()
            .setName("Becoming")
            .addPosterImage(new Image.Builder()
                 .setImageUri(Uri.parse("http://www.x.com/image.png"))
                 .setImageHeightInPixel(960)
                 .setImageWidthInPixel(408)
                  .build())
            .addAuthor("Michelle Obama")
            .addNarrator("Michelle Obama")
            .setActionLinkUri(
               Uri.parse("https://play.google/audiobooks/1"))
            .setDurationMillis(16335L)
            .setPublishDateEpochMillis(1633032895L)
            .setDescription("An intimate, powerful, and inspiring memoir")
            .setPrice("$16.95")
            .addGenre("biography")
            .build();

Schritt 2: Clusterdaten bereitstellen

Es wird empfohlen, den Job zur Inhaltsveröffentlichung im Hintergrund auszuführen. (z. B. mit WorkManager) regelmäßig oder auf Ereignisbasis (z. B. jedes Mal wenn der Nutzer die App öffnet oder gerade etwas in den Einkaufswagen gelegt hat.

AppEngagePublishClient ist für das Veröffentlichen von Clustern zuständig. Folge ich APIs sind im Client verfügbar:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

Mit dieser API wird geprüft, ob der Dienst für die Integration verfügbar ist ob die Inhalte auf dem Gerät angezeigt werden können.

Kotlin

client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java

client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

Diese API wird verwendet, um eine Liste von RecommendationCluster-Objekten zu veröffentlichen.

Kotlin

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build())

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build());

Wenn der Dienst die Anfrage erhält, werden die folgenden Aktionen innerhalb von eine Transaktion:

  • Vorhandene RecommendationCluster-Daten des Entwicklerpartners werden entfernt.
  • Daten aus der Anfrage werden geparst und in der aktualisierten Empfehlung gespeichert Cluster.

Tritt ein Fehler auf, wird die gesamte Anfrage abgelehnt und der aktuelle Status lautet beibehalten werden.

publishFeaturedCluster

Diese API wird verwendet, um eine Liste von FeaturedCluster-Objekten zu veröffentlichen.

Kotlin

client.publishFeaturedCluster(
            PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    FeaturedCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    new FeaturedCluster.Builder()
                        ...
                        .build())
                .build());

Wenn der Dienst die Anfrage erhält, werden die folgenden Aktionen innerhalb von eine Transaktion:

  • Vorhandene FeaturedCluster-Daten des Entwicklerpartners werden entfernt.
  • Die Daten aus der Anfrage werden geparst und im aktualisierten „Featured Cluster“ gespeichert.

Tritt ein Fehler auf, wird die gesamte Anfrage abgelehnt und der aktuelle Status lautet beibehalten werden.

publishContinuationCluster

Diese API wird zum Veröffentlichen eines ContinuationCluster-Objekts verwendet.

Kotlin

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

Java

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

Wenn der Dienst die Anfrage erhält, werden die folgenden Aktionen innerhalb von eine Transaktion:

  • Vorhandene ContinuationCluster-Daten des Entwicklerpartners werden entfernt.
  • Die Daten aus der Anfrage werden geparst und in der aktualisierten Continuation gespeichert. Cluster.

Tritt ein Fehler auf, wird die gesamte Anfrage abgelehnt und der aktuelle Status lautet beibehalten werden.

publishUserAccountManagementRequest

Dieses API wird verwendet, um eine Anmeldekarte zu veröffentlichen . Bei der Anmeldung werden Nutzer weitergeleitet zu Anmeldeseite der App hinzufügen, damit die App Inhalte veröffentlichen oder weitere personalisierte Inhalte)

Die folgenden Metadaten sind Teil der Anmeldekarte:

Attribut Anforderungen Beschreibung
Aktions-URI Erforderlich Deeplink zu Aktion (z.B. Weiterleitung zur Anmeldeseite der App)
Bild Optional – falls nicht angegeben, muss ein Titel angegeben werden

Bild auf der Karte

Bilder mit einem Seitenverhältnis von 16:9 und einer Auflösung von 1264 x 712

Titel Optional – falls nicht angegeben, muss ein Bild angegeben werden Titel auf der Karte
Aktionstext Optional Text, der im CTA angezeigt wird (z.B. „Anmelden“)
Untertitel Optional Optionale Untertitel auf der Karte

Kotlin

var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java

SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Wenn der Dienst die Anfrage empfängt, werden die folgenden Aktionen innerhalb von eine Transaktion:

  • Vorhandene UserAccountManagementCluster-Daten vom Entwicklerpartner sind entfernt.
  • Die Daten aus der Anfrage werden geparst und in der aktualisierten UserAccountManagementCluster-Cluster.

Tritt ein Fehler auf, wird die gesamte Anfrage abgelehnt und der aktuelle Status lautet beibehalten werden.

updatePublishStatus

Wenn aus internen geschäftlichen Gründen keiner der Cluster veröffentlicht wird, Wir empfehlen dringend, den Veröffentlichungsstatus mithilfe der updatePublishStatus verwenden. Dies ist aus folgenden Gründen wichtig :

  • Angabe des Status in allen Szenarien, auch wenn die Inhalte veröffentlicht wurden (STATUS == VERÖFFENTLICHT) ist wichtig, um Dashboards mit diesem expliziten Status, um den Zustand und andere Messwerte deiner Integration zu vermitteln.
  • Wenn keine Inhalte veröffentlicht werden, der Integrationsstatus aber nicht fehlerhaft ist (STATUS == NOT_PUBLISHED), Google kann verhindern, dass Benachrichtigungen in der App ausgelöst werden Gesundheits-Dashboards. Er bestätigt, dass Inhalte aufgrund eines erwartete Situation aus Sicht des Anbieters.
  • Es hilft Entwickelnden, Erkenntnisse darüber zu geben, wann die Daten veröffentlicht werden nicht.
  • Google kann die Statuscodes verwenden, um Nutzer zu bestimmten Aktionen im damit sie den App-Inhalt sehen oder überwinden können.

Die Liste der zulässigen Veröffentlichungsstatuscodes sieht so aus :

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

Wenn der Inhalt nicht veröffentlicht wird, weil ein Nutzer nicht angemeldet ist, Google empfiehlt, die Log-in-Karte zu veröffentlichen. Wenn Anbieter die Anmeldekarte aus irgendeinem Grund nicht veröffentlichen können sollten Sie die API updatePublishStatus aufrufen, mit dem Statuscode NOT_PUBLISHED_REQUIRES_SIGN_IN

Kotlin

client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java

client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

Diese API wird verwendet, um den Inhalt von Empfehlungsclustern zu löschen.

Kotlin

client.deleteRecommendationClusters()

Java

client.deleteRecommendationClusters();

Wenn der Dienst die Anfrage erhält, werden die vorhandenen Daten aus der Empfehlungscluster. Bei einem Fehler wird die gesamte Anfrage abgelehnt. und der bestehende Zustand beibehalten wird.

deleteFeaturedCluster

Diese API wird verwendet, um den Inhalt von empfohlenen Clustern zu löschen.

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

Wenn der Dienst die Anfrage erhält, werden die vorhandenen Daten aus der Empfohlener Cluster. Bei einem Fehler wird die gesamte Anfrage abgelehnt. und der bestehende Zustand beibehalten wird.

deleteContinuationCluster

Diese API wird verwendet, um den Inhalt des Fortsetzungsclusters zu löschen.

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

Wenn der Dienst die Anfrage erhält, werden die vorhandenen Daten aus der Fortsetzungscluster. Bei einem Fehler wird die gesamte Anfrage abgelehnt. und der bestehende Zustand beibehalten wird.

deleteUserManagementCluster

Diese API wird verwendet, um den Inhalt des UserAccountManagement-Clusters zu löschen.

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

Wenn der Dienst die Anfrage erhält, werden die vorhandenen Daten aus der UserAccountManagement-Cluster. Tritt ein Fehler auf, wird die gesamte Anfrage abgelehnt und der bestehende Status wird beibehalten.

deleteClusters

Diese API wird verwendet, um den Inhalt eines bestimmten Clustertyps zu löschen.

Kotlin

client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      ...
      .build())

Java

client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                ...
                .build());

Wenn der Dienst die Anfrage erhält, werden die vorhandenen Daten aus allen Cluster, die den angegebenen Clustertypen entsprechen. Kunden können ein oder mehrere viele Clustertypen. Tritt ein Fehler auf, wird die gesamte Anfrage abgelehnt und der der aktuelle Zustand beibehalten wird.

Fehlerbehandlung

Es wird dringend empfohlen, das Aufgabenergebnis der Publish-APIs wie dass eine Folgeaktion ergriffen werden kann, um eine erfolgreiche Aufgabe wiederherzustellen und erneut zu senden.

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

Der Fehler wird als AppEngageException zurückgegeben, wobei die Ursache Fehlercode angezeigt.

Fehlercode Hinweis
SERVICE_NOT_FOUND Der Dienst ist auf dem betreffenden Gerät nicht verfügbar.
SERVICE_NOT_AVAILABLE Der Dienst ist auf dem jeweiligen Gerät verfügbar, aber nicht. zum Zeitpunkt des Aufrufs ändern (z. B. explizit deaktiviert).
SERVICE_CALL_EXECUTION_FAILURE Die Aufgabe konnte aufgrund von Threading-Problemen nicht ausgeführt werden. In diesem Fall kann es erneut versuchen können.
SERVICE_CALL_PERMISSION_DENIED Der Aufrufer ist nicht berechtigt, den Dienstaufruf durchzuführen.
SERVICE_CALL_INVALID_ARGUMENT Die Anfrage enthält ungültige Daten (zum Beispiel mehr als die zulässigen Clusteranzahl).
SERVICE_CALL_INTERNAL Dienstseitig ist ein Fehler aufgetreten.
SERVICE_CALL_RESOURCE_EXHAUSTED Der Dienstaufruf erfolgt zu häufig.

Schritt 3: Mit Broadcast-Intents umgehen

Neben den Aufrufen der Content API zum Veröffentlichen über einen Job für die Einrichtung eines BroadcastReceiver zum Empfangen von um die Veröffentlichung von Inhalten zu beantragen.

Das Ziel von Broadcast-Intents besteht hauptsächlich darin, die App wieder zu aktivieren und Daten zu erzwingen synchronisieren. Broadcast-Intents sind nicht für das häufige Senden konzipiert. Es ist nur die ausgelöst werden, wenn Google Engage für Agenturen feststellt, dass die Inhalte veraltet sind (für z. B. eine Woche alt). Auf diese Weise besteht ein größeres Vertrauen, dass die Nutzenden Inhalte aktualisieren, auch wenn die App länger als lange Zeit verbringen.

BroadcastReceiver muss auf zwei Arten eingerichtet werden:

  • Dynamisches Registrieren einer Instanz der BroadcastReceiver-Klasse mithilfe von Context.registerReceiver(). Dies ermöglicht die Kommunikation von Anwendungen die sich noch im Arbeitsspeicher befinden.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • Sie müssen eine Implementierung mit dem <receiver>-Tag in Ihrem AndroidManifest.xml-Datei. Dadurch kann die Anwendung Nachrichten an alle Intents erstellt, wenn sie nicht ausgeführt wird, und ermöglicht der App, für den Inhalt.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

Die folgenden Intents werden vom Dienst:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION Es empfiehlt sich, einen publishRecommendationClusters-Anruf zu starten, wenn die diesen Intent erhalten.
  • com.google.android.engage.action.PUBLISH_FEATURED Bei Erhalt dieser E-Mail wird empfohlen, einen publishFeaturedCluster-Anruf zu starten. Nutzerabsicht verstehen.
  • com.google.android.engage.action.PUBLISH_CONTINUATION Es wird empfohlen, bei einem eingehenden Anruf einen publishContinuationCluster-Anruf zu starten. für diesen Intent.

Integrationsablauf

Eine detaillierte Anleitung zur Verifizierung deiner Integration nach Fertigstellung findest du unter Workflow zur Einbindung von Entwicklern:

Häufig gestellte Fragen

Häufig gestellte Fragen zum Engage SDK für FAQs

Kontakt

Kontakt Engage-developers@google.com, falls folgende Voraussetzungen erfüllt sind: Fragen während des Integrationsprozesses stellen. Unser Team wird sich so schnell wie möglich bei dir melden, möglich.

Nächste Schritte

Nach Abschluss der Integration sind folgende Schritte erforderlich:

  • E-Mail senden an Engage-developers@google.com und fügen Sie dein integriertes APK, das von Google getestet werden kann.
  • Google führt eine interne Überprüfung durch, um sicherzustellen, wie erwartet funktioniert. Falls Änderungen erforderlich sind, kontaktiert Google Sie. mit allen erforderlichen Details.
  • Wenn die Tests abgeschlossen sind und keine Änderungen erforderlich sind, kontaktiert Google Sie, um benachrichtigt, dass Sie mit der Veröffentlichung des aktualisierten und integrierten APK im Play Store
  • Nachdem Google bestätigt hat, dass Ihr aktualisiertes APK im Play Store, Ihre Empfehlung, Angesagt und Fortsetzung Cluster werden veröffentlicht und sind für Nutzer sichtbar.