Engage SDK Health and Fitness: instrukcje integracji technicznej z aplikacjami innych firm

Google tworzy platformę na urządzeniu, która porządkuje aplikacje użytkowników według branż i zapewnia nowe, immersyjne środowisko do spersonalizowanego przeglądania i odkrywania treści z aplikacji. Dzięki temu partnerzy mogą prezentować swoje najlepsze szczegółowe treści na specjalnym kanale poza aplikacją.W tym przewodniku znajdziesz instrukcje dla deweloperów dotyczące integracji materiałów o tematyce zdrowotnej i fitnessu za pomocą pakietu SDK dla Agencji.

Szczegóły integracji

Terminologia

Ta integracja obejmuje 3 typy klastrów: Rekomendacja, Polecane i Kontynuacja.

  • Klastry rekomendacji wyświetlają spersonalizowane sugestie dotyczące zdrowia i aktywności fizycznej od pojedynczego partnera zajmującego się deweloperami. Te rekomendacje mogą być dostosowane do użytkownika lub uogólnione (np. popularne tematy dotyczące fitnessu i zdrowie). Dzięki nim możesz wyświetlać artykuły lub osoby dotyczące zdrowia i fitnessu.

    • Klaster rekomendacji może składać się z ArticleEntity, PersonEntity lub EventEntity, ale nie może zawierać różnych typów elementów.

    Rekomendacje mają następującą strukturę:

    • Klaster rekomendacji: widok interfejsu zawierający grupę rekomendacji tego samego partnera dewelopera.

    • Encja: obiekt reprezentujący pojedynczy element w klastrze. W ramach tej integracji dostępne są encje, które pojawiałyby się w klastrze rekomendacji:

      • ArticleEntity to rekomendacja treści tekstowych związanych ze zdrowiem i kondycją fizyczną. Można go używać w artykułach, postach na blogu, treściach marketingowych, opisach wiadomości itp.

        Rysunek 1. Interfejs przedstawiający pojedynczy obiekt ArticleEntity w klastrze Recommendations.
      • PersonEntity: PersonEntity oznacza osobę. Mogą one zawierać rekomendacje coacha lub dowolnej osoby związanej ze zdrowiem i aktywnością fizyczną itp.

        Rysunek 2. Interfejs przedstawiający 1 element PersonEntity w klastrze Rekomendacje.
      • EventEntity: EventEntity reprezentuje wydarzenie mające miejsce w przyszłości. Godzina rozpoczęcia wydarzenia to kluczowa informacja, którą należy przekazać użytkownikom. Element ten może służyć do informowania użytkowników o wydarzeniach związanych ze zdrowiem i kondycją fizyczną, takich jak obóz oddawania krwi, sesje szkoleniowe, siłownia czy zajęcia jogi.

        Rysunek 3. Interfejs przedstawiający pojedynczy element EventEntity w klastrze Recommendations.
  • Klaster Kontynuacja w pojedynczym grupowaniu UI zawiera treści, które były ostatnio aktywne przez użytkowników pochodzących od wielu partnerów deweloperów. Każdy partner dewelopera będzie mógł rozgłaszać maksymalnie 10 encji w klastrze kontynuacji.

    Kontynuacja może mieć taką strukturę:

    • ArticleEntity to rekomendacja treści tekstowych związanych ze zdrowiem i kondycją fizyczną. Element ten może służyć do reprezentowania niedokończonych artykułów z wiadomościami lub innych treści, które użytkownik chce dalej oglądać od miejsca, w którym je porzucił. Np.: fragment wiadomości, fragment posta na blogu o tematyce zdrowotnej lub fitnessu.

      Rysunek 6. Interfejs przedstawiający pojedynczy element ArticleEntity w klastrze kontynuacji.
    • EventChoiceEntity: reprezentuje rezerwację na wydarzenie i pomaga użytkownikom śledzić nadchodzące lub trwające rezerwacje aktywności i wydarzeń zdrowotnych. Przykład: sesje szkoleniowe

      Rysunek 8. Interfejs przedstawiający pojedynczy element EventRezerwacjaEntity w klastrze kontynuacji.
  • Klaster Polecane to widok interfejsu, który prezentuje wybrany element powitalnyGenericFeaturedEntity spośród wielu partnerów deweloperów w jednej grupie UI. Jeden klaster Polecany znajduje się u góry interfejsu użytkownika i ma priorytet nad wszystkimi klastrami rekomendacji. Każdy partner deweloperów może transmitować 1 element obsługiwanego typu w sekcji Polecane wraz z wieloma elementami (potencjalnie różnych typów) od różnych deweloperów aplikacji w klastrze Polecane.

    • Ogólna polecanyEntity: różni się od elementu rekomendacji tym, że element ten powinien być używany w odniesieniu do pojedynczych najlepszych treści pochodzących od deweloperów i powinien reprezentować te najważniejsze treści, które będą interesujące i odpowiednie dla użytkowników.

      Rysunek 12. Interfejs przedstawiający jedną kartę produktu głównego Ogólna sekcja Ogólna w polecanym klastrze

Przygotowanie

Minimalny poziom interfejsu API: 19

Dodaj bibliotekę com.google.android.play:engage do aplikacji:

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

Podsumowanie

Projekt opiera się na implementacji powiązanej usługi.

Dane, które klient może publikować, podlegają następującym limitom dotyczącym różnych typów klastrów:

Typ klastra Limity klastra Minimalne limity encji w klastrze Maksymalne limity encji w klastrze
Klastry rekomendacji Maksymalnie 5 Co najmniej 5 Maksymalnie 25 (ArticleEntity, PersonEntity lub EventEntity)
Klaster kontynuacji Maksymalnie 1 Co najmniej 1 Maksymalnie 10 (ArticleEntity lub EventReservationEntity)
Polecany klaster Maksymalnie 1 Co najmniej 1 Maksymalnie 10 (GenericFeaturedEntity)

Krok 1. Podaj dane encji

Pakiet SDK ma zdefiniowane różne jednostki reprezentujące każdy typ elementu. W przypadku kategorii Zdrowie i fitness wspieramy następujące podmioty:

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

Poniższe tabele przedstawiają dostępne atrybuty i wymagania dla każdego typu.

GenericFeaturedEntity

Atrybut Wymóg Opis Format
Identyfikator URI działania Wymagany

Precyzyjny link do elementu w aplikacji dostawcy.

Uwaga: na potrzeby atrybucji możesz używać precyzyjnych linków. Zapoznaj się z odpowiedziami na najczęstsze pytania

Identyfikator URI
Plakat Wymagany

Jeśli prześlesz kilka obrazów, wyświetlimy tylko jeden obraz. Zalecany format obrazu to 16:9

Uwaga: jeśli masz plakietkę, umieść wolną przestrzeń 24 dps u góry i u dołu obrazu

Wskazówki znajdziesz w specyfikacjach obrazów.
tytuł; Opcjonalnie Tytuł elementu.

Dowolny tekst

Zalecany rozmiar tekstu: 50 znaków

Opis Opcjonalnie

Jeden akapit tekstu opisujący element.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu: 180 znaków

Lista napisów Opcjonalnie

maksymalnie 3 napisy, z których każdy może zawierać jeden wiersz tekstu.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu dla każdego podtytułu: maks. 50 znaków

Odznaki Opcjonalnie

Każda plakietka ma postać dowolnego tekstu (maks. 15 znaków) lub małego obrazu.

Specjalne założenie na obraz lub film, np. jako nakładka z plakietką na obraz

  • Na przykład: „Aktualizacja na żywo”
  • Na przykład: Czas czytania artykułu

Plakietka – tekst Opcjonalnie

Tytuł plakietki

Uwaga: plakietka musi zawierać tekst lub obraz.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 15 znaków

Plakietka – obraz Opcjonalnie

Mały obraz

Specjalnie dla wygody użytkownika, np. jako nakładka z plakietką na miniaturę obrazu lub filmu.

Uwaga: plakietka musi zawierać tekst lub obraz.

Wskazówki znajdziesz w specyfikacjach obrazów.
Kategorie treści Opcjonalnie Opisz kategorię treści znajdujących się w danym elemencie.

Lista enum

Wskazówki znajdziesz w sekcji Kategoria treści.

ArticleEntity

Atrybut Wymóg Opis Format
Identyfikator URI działania Wymagany

Precyzyjny link do elementu w aplikacji dostawcy.

Uwaga: na potrzeby atrybucji możesz używać precyzyjnych linków. Zapoznaj się z odpowiedziami na najczęstsze pytania

Identyfikator URI
tytuł; Wymagany Tytuł elementu.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 50 znaków

Plakat Opcjonalnie

Jeśli prześlesz kilka obrazów, wyświetlimy tylko jeden obraz. Zalecany format obrazu to 16:9

Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli masz plakietkę, umieść wolną przestrzeń 24 dps u góry i u dołu obrazu

Wskazówki znajdziesz w specyfikacjach obrazów.
Źródło – tytuł Opcjonalnie Imię i nazwisko autora, organizacji lub reportera

Dowolny tekst

Zalecany rozmiar tekstu: poniżej 25 znaków

Źródło – obraz Opcjonalnie Obraz źródła, np. autor, organizacja czy reporter Wskazówki znajdziesz w specyfikacjach obrazów.
Opis Opcjonalnie

Jeden akapit tekstu opisujący element.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu: 180 znaków

Lista napisów Opcjonalnie

maksymalnie 3 napisy, z których każdy może zawierać jeden wiersz tekstu.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu dla każdego podtytułu: maks. 50 znaków

Odznaki Opcjonalnie

Każda plakietka ma postać dowolnego tekstu (maks. 15 znaków) lub małego obrazu.

Specjalne założenie na obraz lub film, np. jako nakładka z plakietką na obraz

  • Na przykład: „Aktualizacja na żywo”
  • Na przykład: Czas czytania artykułu

Plakietka – tekst Opcjonalnie

Tytuł plakietki

Uwaga: plakietka musi zawierać tekst lub obraz.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 15 znaków

Plakietka – obraz Opcjonalnie

Mały obraz

Specjalnie dla wygody użytkownika, np. jako nakładka z plakietką na miniaturę obrazu lub filmu.

Uwaga: plakietka musi zawierać tekst lub obraz.

Wskazówki znajdziesz w specyfikacjach obrazów.
Czas publikacji treści Opcjonalnie Jest to sygnatura czasowa epoki (w milisekundach) opublikowania lub zaktualizowania treści w aplikacji. Sygnatura czasowa epoki w milisekundach
Czas ostatniego zaangażowania Wymagane warunkowo

Sygnatura czasowa epoki (w milisekundach), gdy użytkownik ostatnio wszedł w interakcję z tym elementem.

Uwaga: to pole jest wymagane, jeśli ta encja jest częścią klastra kontynuacji.

Sygnatura czasowa epoki w milisekundach
Procent postępów Wymagane warunkowo

Odsetek pełnych treści przetworzonych do tej pory przez użytkownika.

Uwaga: to pole jest wymagane, jeśli ta encja jest częścią klastra kontynuacji.

Wartość całkowita z zakresu od 0 do 100 włącznie.
Kategorie treści Opcjonalnie Opisz kategorię treści znajdujących się w danym elemencie.

Lista enum

Wskazówki znajdziesz w sekcji Kategoria treści.

PersonEntity

Atrybut Wymóg Opis Format
Identyfikator URI działania Wymagany

Precyzyjny link do elementu w aplikacji dostawcy.

Uwaga: na potrzeby atrybucji możesz używać precyzyjnych linków. Zapoznaj się z odpowiedziami na najczęstsze pytania

Identyfikator URI
Profil – nazwa Wymagany Nazwa profilu lub identyfikator albo nick, np. „Jan Kowalski”, „@TeamPixel” itp.

Ciąg znaków

Zalecany rozmiar tekstu: maks. 50 znaków

Profil – awatar Wymagany

Zdjęcie profilowe lub awatar użytkownika.

Uwaga: musi to być kwadratowe zdjęcie o proporcjach 1:1.

Wskazówki znajdziesz w specyfikacjach obrazów.
Profil – dodatkowy tekst Opcjonalnie Dowolny tekst, taki jak nick profilu.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 15 znaków

Profil – dodatkowe zdjęcie Opcjonalnie Mały obraz, np. plakietka weryfikacyjna. Wskazówki znajdziesz w specyfikacjach obrazów.
Obraz w nagłówku Opcjonalnie

Jeśli prześlesz kilka obrazów, wyświetlimy tylko jeden obraz. Zalecany format obrazu to 16:9

Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli masz plakietkę, umieść wolną przestrzeń 24 dps u góry i u dołu obrazu

Wskazówki znajdziesz w specyfikacjach obrazów.
Popularność – liczba Opcjonalnie

Reprezentuje obraz nagłówka. Musi różnić się od zdjęcia profilowego. Można go użyć, jeśli istnieje dodatkowy obraz, który wyróżnia osobę, która podoba się jego pracę.

Uwaga: obraz musi mieć proporcje 16:9. Jeśli masz plakietkę, umieść wolną przestrzeń 24 dps u góry i u dołu obrazu

Ciąg znaków

Zalecany rozmiar tekstu: maks. 20 znaków w przypadku liczby + etykiety łącznie

Popularność – wartość liczby Opcjonalnie

Liczba obserwatorów lub wartość popularności.

Uwaga: podaj wartość liczby, jeśli aplikacja nie ma obsługiwać logiki optymalizacji dużej liczby pod kątem różnych rozmiarów wyświetlaczy. Jeśli podasz zarówno liczbę, jak i wartość liczby, zostanie użyta liczba.

Długi
Popularność – etykieta Opcjonalnie Określ, jaka jest etykieta popularności. Na przykład: „Podoba mi się”.

Ciąg znaków

Zalecany rozmiar tekstu: maks. 20 znaków w przypadku liczby + etykiety łącznie

Popularność – treści wizualne Opcjonalnie

Wskaż, do czego służy dana interakcja. Na przykład obraz z ikoną polubień i emotikonami.

Możesz przesłać więcej niż 1 obraz, ale niektóre obrazy mogą nie wyświetlać się na wszystkich urządzeniach.

Uwaga: wymagany jest kwadratowy obraz w formacie 1:1.

Wskazówki znajdziesz w specyfikacjach obrazów.
Ocena – wartość maksymalna Wymagane

Maksymalna wartość skali ocen.

Atrybut ten jest wymagany, jeśli podano również bieżącą wartość oceny.

Liczba >= 0.0
Ocena – bieżąca wartość Wymagane

Bieżąca wartość skali ocen.

Atrybut ten jest wymagany, jeśli podano także maksymalną wartość oceny.

Liczba >= 0.0
Ocena – liczba Opcjonalnie

Liczba ocen elementu.

Uwaga: podaj to pole, jeśli aplikacja chce kontrolować sposób wyświetlania tej informacji użytkownikom. Podaj zwięzły ciąg znaków, który może być wyświetlany użytkownikowi. Jeśli na przykład liczba wynosi 1 000 000, możesz użyć skrótów, takich jak 1 mln, aby nie zostały one obcięte na mniejszych ekranach.

Ciąg znaków
Ocena – wartość liczby Opcjonalnie

Liczba ocen elementu.

Uwaga: podaj to pole, jeśli nie chcesz samodzielnie obsługiwać wyświetlanych skrótów. Jeśli podasz zarówno liczbę, jak i wartość liczby, użyjemy ich do wyświetlenia użytkownikom

Długi
Lokalizacja – kraj Opcjonalnie Kraj, w którym znajduje się lub świadczy usługi.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – miasto Opcjonalnie Miasto, w którym znajduje się użytkownik lub w którym świadczy usługi.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – wyświetlany adres Opcjonalnie Adres pod adresem, pod którym znajduje się dana osoba lub pod którym działa, będzie widoczny dla użytkownika.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – adres Opcjonalnie Ulica i numer (jeśli dotyczy), pod którym znajduje się lub świadczy usługi.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – województwo Opcjonalnie Województwo (jeśli dotyczy), w którym znajduje się lub działa dana osoba.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – kod pocztowy Opcjonalnie Kod pocztowy (jeśli dotyczy), pod którym znajduje się użytkownik lub pod którym działa.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – okolica Opcjonalnie Dzielnica (jeśli dotyczy), w której znajduje się lub działa dana osoba.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Odznaki Opcjonalnie

Każda plakietka ma postać dowolnego tekstu (maks. 15 znaków) lub małego obrazu.

Plakietka – tekst Opcjonalnie

Tytuł plakietki

Uwaga: plakietka musi zawierać tekst lub obraz.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 15 znaków

Plakietka – obraz Opcjonalnie

Mały obraz

Specjalnie dla wygody użytkownika, np. jako nakładka z plakietką na miniaturę obrazu lub filmu.

Uwaga: plakietka musi zawierać tekst lub obraz.

Wskazówki znajdziesz w specyfikacjach obrazów.
Opis Opcjonalnie

Jeden akapit tekstu opisujący element.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu: 180 znaków

Lista napisów Opcjonalnie

maksymalnie 3 napisy, z których każdy może zawierać jeden wiersz tekstu.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu dla każdego podtytułu: maks. 50 znaków

Kategorie treści Opcjonalnie Opisz kategorię treści znajdujących się w danym elemencie.

Lista odpowiednich wyliczenia

  • TYPE_HEALTH_AND_FITENESS (np. joga/trenerka fitness)
  • TYPE_HOME_AND_AUTO (np. hydraulik)
  • TYPE_SPORTS (np. zawodnik)
  • TYPE_Randki

Wskazówki znajdziesz w sekcji Kategoria treści.

EventEntity

Atrybut Wymóg Opis Format
Identyfikator URI działania Wymagany

Precyzyjny link do elementu w aplikacji dostawcy.

Uwaga: na potrzeby atrybucji możesz używać precyzyjnych linków. Zapoznaj się z odpowiedziami na najczęstsze pytania

Identyfikator URI
tytuł; Wymagany Tytuł elementu.

Ciąg znaków

Zalecany rozmiar tekstu: maks. 50 znaków

Godzina rozpoczęcia Wymagany

Sygnatura czasowa początku epoki.

Uwaga: wartość zostanie podana w milisekundach.

Sygnatura czasowa epoki w milisekundach
Tryb zdarzenia Wymagany

Pole wskazujące, czy wydarzenie odbędzie się online, stacjonarnie czy w obu przypadkach.

Enum: VIRTUAL, IN_PERSON lub HYBRID
Plakat Wymagany

Jeśli prześlesz kilka obrazów, wyświetlimy tylko jeden obraz. Zalecany format obrazu to 16:9

Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli masz plakietkę, umieść wolną przestrzeń 24 dps u góry i u dołu obrazu

Wskazówki znajdziesz w specyfikacjach obrazów.
Lokalizacja – kraj Wymagane warunkowo

Kraj, w którym odbywa się wydarzenie.

Uwaga: pole wymagane w przypadku wydarzeń typu IN_PERSON lub HYBRID

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – miasto Wymagane warunkowo

Miasto, w którym odbywa się wydarzenie.

Uwaga: pole wymagane w przypadku wydarzeń typu IN_PERSON lub HYBRID

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – wyświetlany adres Wymagane warunkowo

Adres lub nazwa miejsca, w którym odbędzie się wydarzenie, które powinny być wyświetlane użytkownikowi.

Uwaga: pole wymagane w przypadku wydarzeń typu IN_PERSON lub HYBRID

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – adres Opcjonalnie Ulica i numer (jeśli dotyczy) lokalizacji, w której odbywa się wydarzenie.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – województwo Opcjonalnie Województwo, w którym odbywa się wydarzenie (w stosownych przypadkach).

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – kod pocztowy Opcjonalnie Kod pocztowy (jeśli dotyczy) lokalizacji, w której odbywa się wydarzenie.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – okolica Opcjonalnie Dzielnica (jeśli dotyczy), w której odbywa się wydarzenie.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Godzina zakończenia Opcjonalnie

Sygnatura czasowa epoki, w której zdarzenie ma się zakończyć.

Uwaga: wartość zostanie podana w milisekundach.

Sygnatura czasowa epoki w milisekundach
Opis Opcjonalnie

Jeden akapit tekstu opisujący element.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu: 180 znaków

Lista napisów Opcjonalnie

maksymalnie 3 napisy, z których każdy może zawierać jeden wiersz tekstu.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu dla każdego podtytułu: maks. 50 znaków

Odznaki Opcjonalnie

Każda plakietka ma postać dowolnego tekstu (maks. 15 znaków) lub małego obrazu.

Plakietka – tekst Opcjonalnie

Tytuł plakietki

Uwaga: plakietka musi zawierać tekst lub obraz.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 15 znaków

Plakietka – obraz Opcjonalnie

Mały obraz

Specjalnie dla wygody użytkownika, np. jako nakładka z plakietką na miniaturę obrazu lub filmu.

Uwaga: plakietka musi zawierać tekst lub obraz.

Wskazówki znajdziesz w specyfikacjach obrazów.
Cena – aktualna cena Wymagane warunkowo

Aktualna cena biletu na wydarzenie.

Jeśli podano przekreśloną cenę, ta wartość jest wymagana.

Dowolny tekst
Cena – przekreślona cena Opcjonalnie Pierwotna cena biletu na wydarzenie. Dowolny tekst
Objaśnienie dotyczące ceny Opcjonalnie Objaśnienie dotyczące ceny z informacją o promocji, wydarzeniu lub zniżce dla subskrybentów, jeśli jest dostępna.

Dowolny tekst

Zalecany rozmiar tekstu: poniżej 45 znaków (zbyt długi tekst może zawierać wielokropki)

Kategorie treści Opcjonalnie Opisz kategorię treści znajdujących się w danym elemencie.

Lista odpowiednich wyliczenia

  • TYPE_MOVIES_AND_TV_SHOWS (np. kino)
  • TYPE_DIGITAL_GAMES (np. e-sport)
  • TYPE_MUSIC (np. koncert)
  • TYPE_TRAVEL_AND_LOCAL (np. zwiedzanie, festiwal)
  • TYPE_HEALTH_AND_FITENESS (np. zajęcia jogi)
  • TYPE_EDUCATION (np. klasa)
  • TYPE_SPORTS (np. mecz piłki nożnej)
  • TYPE_DATING (np. spotkanie)

Wskazówki znajdziesz w sekcji Kategoria treści.

EventReservationEntity

Atrybut Wymóg Opis Format
Identyfikator URI działania Wymagany

Precyzyjny link do elementu w aplikacji dostawcy.

Uwaga: na potrzeby atrybucji możesz używać precyzyjnych linków. Zapoznaj się z odpowiedziami na najczęstsze pytania

Identyfikator URI
tytuł; Wymagany Tytuł elementu.

Ciąg znaków

Zalecany rozmiar tekstu: maks. 50 znaków

Godzina rozpoczęcia Wymagany

Sygnatura czasowa początku epoki.

Uwaga: wartość zostanie podana w milisekundach.

Sygnatura czasowa epoki w milisekundach
Tryb zdarzenia Wymagany

Pole wskazujące, czy wydarzenie odbędzie się online, stacjonarnie czy w obu przypadkach.

Enum: VIRTUAL, IN_PERSON lub HYBRID
Lokalizacja – kraj Wymagane warunkowo

Kraj, w którym odbywa się wydarzenie.

Uwaga: pole wymagane w przypadku wydarzeń typu IN_PERSON lub HYBRID

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – miasto Wymagane warunkowo

Miasto, w którym odbywa się wydarzenie.

Uwaga: pole wymagane w przypadku wydarzeń typu IN_PERSON lub HYBRID

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – wyświetlany adres Wymagane warunkowo

Adres lub nazwa miejsca, w którym odbędzie się wydarzenie, które powinny być wyświetlane użytkownikowi.

Uwaga: pole wymagane w przypadku wydarzeń typu IN_PERSON lub HYBRID

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – adres Opcjonalnie Ulica i numer (jeśli dotyczy) lokalizacji, w której odbywa się wydarzenie.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – województwo Opcjonalnie Województwo, w którym odbywa się wydarzenie (w stosownych przypadkach).

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – kod pocztowy Opcjonalnie Kod pocztowy (jeśli dotyczy) lokalizacji, w której odbywa się wydarzenie.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Lokalizacja – okolica Opcjonalnie Dzielnica (jeśli dotyczy), w której odbywa się wydarzenie.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 20 znaków

Plakat Opcjonalnie

Jeśli prześlesz kilka obrazów, wyświetlimy tylko jeden obraz. Zalecany format obrazu to 16:9

Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli masz plakietkę, umieść wolną przestrzeń 24 dps u góry i u dołu obrazu

Wskazówki znajdziesz w specyfikacjach obrazów.
Godzina zakończenia Opcjonalnie

Sygnatura czasowa epoki, w której zdarzenie ma się zakończyć.

Uwaga: wartość zostanie podana w milisekundach.

Sygnatura czasowa epoki w milisekundach
Dostawca usług – nazwa Opcjonalnie

Nazwa dostawcy usług.

Uwaga: w przypadku dostawcy usług wymagany jest tekst lub obraz.

Dowolny tekst. Np. Imię i nazwisko organizatora wydarzenia lub wycieczki
Dostawca usług – obraz Opcjonalnie

Logo/obraz dostawcy usług.

Uwaga: w przypadku dostawcy usług wymagany jest tekst lub obraz.

Wskazówki znajdziesz w specyfikacjach obrazów.
Opis Opcjonalnie

Jeden akapit tekstu opisujący element.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu: 180 znaków

Lista napisów Opcjonalnie

maksymalnie 3 napisy, z których każdy może zawierać jeden wiersz tekstu.

Uwaga: użytkownik zobaczy opis lub listę napisów, ale nie oba te elementy naraz.

Dowolny tekst

Zalecany rozmiar tekstu dla każdego podtytułu: maks. 50 znaków

Odznaki Opcjonalnie

Każda plakietka ma postać dowolnego tekstu (maks. 15 znaków) lub małego obrazu.

Plakietka – tekst Opcjonalnie

Tytuł plakietki

Uwaga: plakietka musi zawierać tekst lub obraz.

Dowolny tekst

Zalecany rozmiar tekstu: maks. 15 znaków

Plakietka – obraz Opcjonalnie

Mały obraz

Specjalnie dla wygody użytkownika, np. jako nakładka z plakietką na miniaturę obrazu lub filmu.

Uwaga: plakietka musi zawierać tekst lub obraz.

Wskazówki znajdziesz w specyfikacjach obrazów.
Identyfikator rezerwacji Opcjonalnie Identyfikator rezerwacji na wydarzenie. Dowolny tekst
Cena – aktualna cena Wymagane warunkowo

Aktualna cena biletu na wydarzenie.

Jeśli podano przekreśloną cenę, ta wartość jest wymagana.

Dowolny tekst
Cena – przekreślona cena Opcjonalnie Pierwotna cena biletu na wydarzenie. Dowolny tekst
Objaśnienie dotyczące ceny Opcjonalnie Objaśnienie dotyczące ceny z informacją o promocji, wydarzeniu lub zniżce dla subskrybentów, jeśli jest dostępna.

Dowolny tekst

Zalecany rozmiar tekstu: poniżej 45 znaków (zbyt długi tekst może zawierać wielokropki)

Ocena – wartość maksymalna Opcjonalnie

Maksymalna wartość skali ocen.

Atrybut ten jest wymagany, jeśli podano również bieżącą wartość oceny.

Liczba >= 0.0
Ocena – bieżąca wartość Opcjonalnie

Bieżąca wartość skali ocen.

Atrybut ten jest wymagany, jeśli podano także maksymalną wartość oceny.

Liczba >= 0.0
Ocena – liczba Opcjonalnie

Liczba ocen wydarzenia.

Uwaga: podaj to pole, jeśli aplikacja chce kontrolować sposób wyświetlania tej informacji użytkownikom. Podaj zwięzły ciąg znaków, który może być wyświetlany użytkownikowi. Jeśli na przykład liczba wynosi 1 000 000, możesz użyć skrótów, takich jak 1 mln, aby nie zostały one obcięte na mniejszych ekranach.

Ciąg znaków
Ocena – wartość liczby Opcjonalnie

Liczba ocen wydarzenia.

Uwaga: podaj to pole, jeśli nie chcesz samodzielnie obsługiwać wyświetlanych skrótów. Jeśli podasz zarówno liczbę, jak i wartość liczby, użyjemy ich do wyświetlenia użytkownikom

Długi
Kategorie treści Opcjonalnie Opisz kategorię treści znajdujących się w danym elemencie.

Lista odpowiednich wyliczenia

  • TYPE_MOVIES_AND_TV_SHOWS (np. kino)
  • TYPE_DIGITAL_GAMES (np. e-sport)
  • TYPE_MUSIC (np. koncert)
  • TYPE_TRAVEL_AND_LOCAL (np. zwiedzanie, festiwal)
  • TYPE_HEALTH_AND_FITENESS (np. zajęcia jogi)
  • TYPE_EDUCATION (np. klasa)
  • TYPE_SPORTS (np. mecz piłki nożnej)
  • TYPE_DATING (np. spotkanie)

Wskazówki znajdziesz w sekcji Kategoria treści.

Specyfikacja obrazu

Wymagane specyfikacje komponentów z obrazem znajdziesz w tej tabeli:

Format obrazu Minimalny rozmiar w pikselach Zalecany rozmiar w pikselach

Kwadrat (1 x 1)

Preferowana

300x300 1200x1200
Poziomy (1,91 x 1) 600x314 1200x628
Orientacja pionowa (4 x 5) 480 × 600 960x1200

Obrazy muszą być hostowane w publicznych sieciach CDN, aby umożliwić Google dostęp do nich.

Formaty plików

PNG, JPG, statyczny GIF, WebP

Maksymalny rozmiar pliku

5120 KB

Dodatkowe rekomendacje

  • Bezpieczny obszar obrazu: ważne treści umieść w środkowych 80% obrazu.
  • Użyj przezroczystego tła, by obraz wyświetlał się prawidłowo w ustawieniach ciemnego i jasnego motywu.

Kategoria treści

Kategoria treści umożliwia aplikacjom publikowanie treści należących do wielu kategorii. Powoduje to mapowanie treści na niektóre ze wstępnie zdefiniowanych kategorii:

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

Obrazy muszą być hostowane w publicznych sieciach CDN, aby umożliwić Google dostęp do nich.

Wskazówki dotyczące korzystania z kategorii treści

  1. Niektóre elementy, takie jak ArticleEntity i GeneralFeaturedEntity, mogą korzystać ze wszystkich kategorii treści. W przypadku innych podmiotów, takich jak EventEntity, EventLabelEntity czy PersonEntity, kwalifikują się tylko niektóre z nich. Zanim wypełnisz listę, sprawdź listę kategorii kwalifikujących się dla danego typu encji.
  2. W przypadku niektórych kategorii treści używaj określonego typu elementu zamiast kombinacji elementów ogólnych i kategorii treści:

    • TYPE_MOVIES_AND_TV_SHOWS – Zanim użyjesz elementów ogólnych, obejrzyj je z przewodnika po integracji.
    • TYPE_BOOKS – zanim użyjesz elementów ogólnych, zapoznaj się z dokumentacją EbookEntity.
    • TYPE_AUDIOBOOKS – zapoznaj się z elementem AudiobookEntity, zanim użyjesz elementów ogólnych.
    • TYPE_SHOPPING – zapoznaj się z obiektem ShoppingEntity, zanim użyjesz jednostek ogólnych.
    • TYPE_FOOD_AND_DRINK – zanim zaczniesz korzystać z elementów standardowych, zapoznaj się z informacjami w przewodniku po integracji żywności.
  3. Pole ContentCategory jest opcjonalne i powinno być puste, jeśli treść nie należy do żadnej z wymienionych wcześniej kategorii.

  4. Jeśli podajesz kilka kategorii treści, podaj je w kolejności odpowiadającej treściom. Na początku listy umieść najtrafniejszą kategorię.

Krok 2. Podaj dane klastra

Zaleca się, aby zadanie publikowania treści było wykonywane w tle (np. za pomocą narzędzia WorkManager) i zaplanowane w regularnych odstępach czasu lub w określonych zdarzeniach (na przykład za każdym razem, gdy użytkownik otworzy aplikację lub gdy użytkownik właśnie dodał coś do koszyka).

Za publikowanie klastrów odpowiada AppEngagePublishClient.

Istnieją następujące interfejsy API do publikowania klastrów w kliencie:

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

isServiceAvailable

Ten interfejs API służy do sprawdzania, czy usługa jest dostępna do integracji i czy treści mogą być wyświetlane na urządzeniu.

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

Ten interfejs API służy do publikowania listy obiektów RecommendationCluster.

Kotlin


client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

Gdy usługa otrzyma żądanie, wykonywane są te działania w ramach jednej transakcji:

  • Dotychczasowe dane RecommendationCluster pochodzące od partnera dewelopera zostaną usunięte.
  • Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze rekomendacji.

W przypadku błędu żądanie w całości jest odrzucane, a obecny stan zostaje zachowany.

publishFeaturedCluster

Ten interfejs API służy do publikowania listy obiektów FeaturedCluster.

Kotlin


client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java


client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

Gdy usługa otrzyma żądanie, wykonywane są te działania w ramach jednej transakcji:

  • Dotychczasowe dane FeaturedCluster pochodzące od partnera dewelopera zostaną usunięte.
  • Dane z żądania są analizowane i przechowywane w zaktualizowanym polecanym klastrze.

W przypadku błędu żądanie w całości jest odrzucane, a obecny stan zostaje zachowany.

publishContinuationCluster

Ten interfejs API służy do publikowania obiektu ContinuationCluster.

Kotlin


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

Java


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

Gdy usługa otrzyma żądanie, wykonywane są te działania w ramach jednej transakcji:

  • Dotychczasowe dane ContinuationCluster pochodzące od partnera dewelopera zostaną usunięte.
  • Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze kontynuacji.

W przypadku błędu żądanie w całości jest odrzucane, a obecny stan zostaje zachowany.

publishUserAccountManagementRequest

Ten interfejs API służy do publikowania karty logowania . Logowanie kieruje użytkowników na stronę logowania w aplikacji, na której aplikacja może publikować treści (lub udostępniać treści bardziej spersonalizowane).

Te metadane są częścią karty logowania:

Atrybut Wymóg Opis
Identyfikator URI działania Wymagane Precyzyjny link do działania (np. przejście na stronę logowania w aplikacji)
Obraz Opcjonalnie – jeśli nie podano, musisz podać tytuł

Obraz widoczny na karcie

Obrazy o współczynniku proporcji 16 x 9 i rozdzielczości 1264 x 712

tytuł; Opcjonalnie – jeśli nie podano, należy przesłać zdjęcie Tytuł na karcie
Tekst działania Opcjonalnie Tekst widoczny w wezwaniu do działania (np. „Zaloguj się”)
Podtytuł Opcjonalnie Opcjonalny tytuł na karcie

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());

Gdy usługa otrzyma żądanie, wykonywane są te działania w ramach jednej transakcji:

  • Dotychczasowe dane UserAccountManagementCluster pochodzące od partnera dewelopera zostaną usunięte.
  • Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze UserAccountManagementCluster.

W przypadku błędu żądanie w całości jest odrzucane, a obecny stan zostaje zachowany.

updatePublishStatus

Jeśli z jakiegoś powodu biznesowego żaden z klastrów nie został opublikowany, zdecydowanie zalecamy zaktualizowanie stanu publikacji przy użyciu interfejsu API updatePublishStatus. To ważne, ponieważ :

  • Podanie stanu we wszystkich scenariuszach, nawet po opublikowaniu treści (STATUS == PUBLISHED), ma kluczowe znaczenie przy wypełnianiu paneli, które używają tego stanu wprost do przekazywania danych o stanie i innych wskaźnikach związanych z integracją.
  • Jeśli nie zostaną opublikowane żadne treści, ale stan integracji nie jest nieprawidłowy (STATUS == NOT_PUBLISHED), Google może uniknąć wywoływania alertów w panelach stanu aplikacji. Potwierdza ono, że treść nie została opublikowana z powodu oczekiwanej sytuacji z punktu widzenia dostawcy.
  • Pomaga deweloperom określić, kiedy dane są publikowane, a kiedy nie.
  • Google może używać kodów stanu, aby skłonić użytkownika do wykonania określonych działań w aplikacji, aby mógł on wyświetlić zawartość aplikacji lub ją rozwiązać.

Lista kodów stanu odpowiednich publikacji :

// 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

Jeśli treści nie zostały opublikowane z powodu niezalogowanego użytkownika, zalecamy opublikowanie karty logowania. Jeśli z jakiegoś powodu dostawcy nie mogą opublikować karty logowania, zalecamy wywołanie interfejsu API updatePublishStatus z kodem stanu 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

Ten interfejs API służy do usuwania zawartości klastrów rekomendacji.

Kotlin


client.deleteRecommendationClusters()

Java


client.deleteRecommendationClusters();

Po otrzymaniu żądania usługa usuwa istniejące dane z klastrów rekomendacji. W przypadku błędu całe żądanie zostaje odrzucone, a obecny stan zostaje zachowany.

deleteFeaturedCluster

Ten interfejs API służy do usuwania zawartości polecanego klastra.

Kotlin


client.deleteFeaturedCluster()

Java


client.deleteFeaturedCluster();

Po otrzymaniu żądania usługa usuwa istniejące dane z polecanego klastra. W przypadku błędu żądanie w całości jest odrzucane, a obecny stan zostaje zachowany.

deleteContinuationCluster

Ten interfejs API służy do usuwania zawartości klastra kontynuacji.

Kotlin


client.deleteContinuationCluster()

Java


client.deleteContinuationCluster();

Po otrzymaniu żądania usługa usuwa istniejące dane z klastra kontynuacji. W przypadku błędu całe żądanie zostaje odrzucone, a obecny stan zostaje zachowany.

deleteUserManagementCluster

Ten interfejs API służy do usuwania zawartości klastra UserAccountManagement.

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

Po otrzymaniu żądania usługa usuwa istniejące dane z klastra zarządzania kontami użytkowników. W przypadku błędu całe żądanie zostaje odrzucone, a obecny stan zostaje zachowany.

deleteClusters

Ten interfejs API służy do usuwania zawartości klastra określonego typu.

Kotlin


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

Java


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

Po otrzymaniu żądania usługa usuwa istniejące dane ze wszystkich klastrów pasujących do określonych typów klastrów. Klienty mogą przesyłać 1 typ klastra lub wiele z nich. W przypadku błędu żądanie w całości jest odrzucane, a obecny stan zostaje zachowany.

Obsługa błędów

Zdecydowanie zalecamy wsłuchiwanie się w wyniki zadania z interfejsów API do publikowania, aby móc podjąć dalsze działania w celu odzyskania i ponownego przesłania udanego zadania.

Kotlin


client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

Java


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

Błąd jest zwracany jako AppEngageException z przyczyną podaną w kodzie błędu.

Kod błędu Uwaga:
SERVICE_NOT_FOUND Usługa jest niedostępna na danym urządzeniu.
SERVICE_NOT_AVAILABLE Usługa jest dostępna na danym urządzeniu, ale nie jest dostępna w momencie wywołania (np. jest jawnie wyłączona).
SERVICE_CALL_EXECUTION_FAILURE Nie udało się wykonać zadania z powodu problemów z wątkami. W takim przypadku można spróbować jeszcze raz.
SERVICE_CALL_PERMISSION_DENIED Rozmówca nie może nawiązać połączenia z usługą.
SERVICE_CALL_INVALID_ARGUMENT Żądanie zawiera nieprawidłowe dane (na przykład więcej niż dozwolona liczba klastrów).
SERVICE_CALL_INTERNAL Po stronie usługi wystąpił błąd.
SERVICE_CALL_RESOURCE_EXHAUSTED Dzwonienie do zespołu pomocy jest wykonywane zbyt często.

Krok 3. Obsługa intencji transmisji

Oprócz wykonywania wywołań interfejsu Publishing Content API za pomocą zadania musisz też skonfigurować BroadcastReceiver, aby otrzymywać żądanie publikacji treści.

Celem intencji transmisji jest głównie ponowna aktywacja aplikacji i wymuszenie synchronizacji danych. Intencje związane z transmisją nie są przeznaczone do wysyłania zbyt często. Jest wywoływane tylko wtedy, gdy usługa Google dla Agencji ustali, że treść może być nieaktualna (np. sprzed tygodnia). Dzięki temu użytkownicy będą mieli większą pewność, że będą mieli dostęp do nowych treści, nawet jeśli aplikacja nie była uruchamiana od dłuższego czasu.

BroadcastReceiver trzeba skonfigurować na 2 sposoby:

  • Dynamicznie zarejestruj wystąpienie klasy BroadcastReceiver za pomocą Context.registerReceiver(). Umożliwia to komunikację z aplikacji, które wciąż są w pamięci.

Kotlin

class AppEngageBroadcastReceiver : 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
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

Java

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

}
  • Statycznie deklaruj implementację z tagiem <receiver> w pliku AndroidManifest.xml. Dzięki temu aplikacja może odbierać intencje transmisji, gdy nie jest uruchomiona, i może publikować treści.
<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>

Usługa wysyła te zamiary:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION Po otrzymaniu tej intencji zalecamy uruchomienie wywołania publishRecommendationClusters.
  • com.google.android.engage.action.PUBLISH_FEATURED Po otrzymaniu tej intencji zalecamy uruchomienie wywołania publishFeaturedCluster.
  • com.google.android.engage.action.PUBLISH_CONTINUATION Po otrzymaniu tej intencji zalecamy uruchomienie wywołania publishContinuationCluster.

Proces integracji

Szczegółowy przewodnik dotyczący weryfikacji integracji po jej zakończeniu znajdziesz w artykule Przepływ pracy związany z integracją dla programistów.

Najczęstsze pytania

Odpowiedzi na najczęstsze pytania znajdziesz w odpowiedziach na najczęstsze pytania o pakiet SDK dla Agencji.

Kontakt

Jeśli masz pytania dotyczące procesu integracji, wyślij e-maila na adres engagement-developers@google.com.

Dalsze kroki

Po zakończeniu integracji należy wykonać następujące czynności:

  • Wyślij e-maila na adres Engage-developers@google.com i dołącz zintegrowany plik APK, który jest gotowy do testowania przez Google.
  • Google przeprowadza weryfikację i weryfikuje wewnętrznie, aby upewnić się, że integracja działa zgodnie z oczekiwaniami. Jeśli zajdzie taka potrzeba, Google skontaktuje się z Tobą i przekaże Ci wszelkie niezbędne informacje.
  • Gdy testy zostaną zakończone i nie będą konieczne żadne zmiany, Google skontaktuje się z Tobą, aby powiadomić Cię, że możesz rozpocząć publikowanie zaktualizowanego i zintegrowanego pliku APK w Sklepie Play.
  • Gdy Google potwierdzi, że zaktualizowany pakiet APK został opublikowany w Sklepie Play, Twoje klastry Rekomendacje, Polecane i Kontynuacja mogą zostać opublikowane i widoczne dla użytkowników.