Google tworzy platformę na urządzeniu, która porządkuje aplikacje użytkowników według kategorii i zapewnia nowe, atrakcyjne możliwości związane z oglądaniem i odkrywaniem treści aplikacji w spersonalizowany sposób. Ta funkcja umożliwia partnerom deweloperskim prezentowanie najlepszych treści na specjalnym kanale poza aplikacją.W tym przewodniku znajdziesz instrukcje dla deweloperów, jak zintegrować treści randkowe za pomocą pakietu SDK Engage w tym nowym obszarze.
Szczegóły integracji
Terminologia
Ta integracja obejmuje 3 typy klastrów: Rekomendacja, Polecane i Kontynuacja.
Klastry rekomendacji wyświetlają spersonalizowane propozycje randek danego partnera programisty. Można je dostosować do użytkownika.
- Klaster rekomendacji można utworzyć z
ArticleEntity
,PersonEntity
lubEventEntity
, ale nie może być mieszanką różnych typów encji.
Rekomendacje mają taką strukturę:
Klaster rekomendacji: widok interfejsu zawierający grupę rekomendacji od tego samego partnera ds. deweloperów.
Encja: obiekt reprezentujący pojedynczy element w klastrze. Ta integracja obejmuje elementy, które będą udostępniane za pomocą klastra rekomendacji:
ArticleEntity to rekomendacja treści tekstowych, które są związane z randkowaniem. Element ArticleEntity umożliwia programistom dostarczanie różnych treści tekstowych i graficznych z większą ilością metadanych umożliwiających przekazanie użytkownikom informacji.
PersonEntity: element PersonEntity reprezentuje osobę. Może to być np. wyróżnienie osoby w potencjalnych partnerach randkowych.
EventEntity: reprezentuje zdarzenie odbywające się w przyszłości. Godzina rozpoczęcia zdarzenia to kluczowa informacja, którą musisz przekazać użytkownikom.
- Klaster rekomendacji można utworzyć z
Klaster Kontynuacja w jednym zgrupowaniu UI pokazuje treści, w których ostatnio angażowali się użytkownicy z wielu partnerów. Każdy partner będący deweloperem będzie mógł transmitować maksymalnie 10 encji w klastrze Kontynuacja.
Ciąg dalszy może mieć taką strukturę:
ArticleEntity to rekomendacja treści tekstowych dotyczących randek. Element ten może służyć do reprezentowania niedokończonych artykułów lub innych treści, z których użytkownik chce korzystać w miejscu, w którym je przerwał.
Event ReserveEntity: umożliwia rezerwowanie wydarzeń i pomaga użytkownikom śledzić zbliżające się lub trwające spotkania randkowe i spotkania.
Klaster Polecane to widok interfejsu, w którym w jednej grupie UI pojawia się wybrany główny element (
GenericFeaturedEntity
) od wielu partnerów dla deweloperów. U góry interfejsu znajduje się pojedynczy klaster Polecane, który ma wyższy priorytet niż wszystkie klastry rekomendacji. Każdy deweloper może w sekcji Polecane transmitować jeden element obsługiwanego typu, w którym znajduje się wiele elementów (potencjalnie różnych typów) od wielu deweloperów aplikacji.OgólnaPolecaneEntity: element GeneralFeaturedEntity różni się od Rekomendacji tym, że Polecany element powinien być używany jako 1 najpopularniejsza treść od programistów i powinna przedstawiać jedną najważniejsze treści, które będą interesujące i istotne dla użytkowników.
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ą tym ograniczeniom w przypadku różnych typów klastrów:
Typ klastra | Limity klastrów | 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 elementy reprezentujące każdy typ elementu. W kategorii Randki obsługujemy te podmioty:
GenericFeaturedEntity
ArticleEntity
PersonEntity
EventEntity
EventReservationEntity
W tabelach poniżej znajdziesz dostępne atrybuty i wymagania dla poszczególnych typów.
GenericFeaturedEntity
Atrybut | Wymóg | Opis | Format |
---|---|---|---|
Identyfikator URI działania | Wymagany |
Precyzyjny link do encji w aplikacji dostawcy. Uwaga: do atrybucji możesz używać precyzyjnych linków. Zapoznaj się z tymi odpowiedziami na najczęstsze pytania |
Identyfikator URI |
Obrazy plakatu | Wymagany | Jeśli prześlesz wiele obrazów, wyświetlimy tylko 1 obraz. Zalecany współczynnik proporcji to 16:9 Uwaga: jeśli plakietka jest dostępna, upewnij się, że u góry i u dołu obrazu jest bezpieczna przestrzeń o szerokości 24 dps. |
Wskazówki znajdziesz w specyfikacji obrazów. |
tytuł; | Opcjonalnie | Nazwa elementu. | Dowolny tekst Zalecany rozmiar tekstu: 50 znaków |
Opis | Opcjonalnie | Pojedynczy akapit tekstu opisujący element. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu: 180 znaków |
Lista napisów | Opcjonalnie | Maksymalnie 3 napisy, a każdy z nich to 1 wiersz tekstu. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu każdego podtytułu: maks. 50 znaków |
Odznaki | Opcjonalnie | Każda plakietka zawiera dowolny tekst (maks. 15 znaków) lub mały obraz. Specjalne traktowanie wrażeń użytkownika w przypadku obrazu/filmu, np. jako nakładka z plakietką na obrazie
|
|
Plakietka – tekst | Opcjonalnie | Tytuł plakietki Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Dowolny tekst Zalecany rozmiar tekstu: maks. 15 znaków |
Plakietka – obraz | Opcjonalnie | Mały obraz Specjalne podejście do wrażeń użytkownika, np. jako nakładka plakietki na miniaturze obrazu/filmu. Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Kategorie treści | Opcjonalnie | Opisz kategorię treści w elemencie. | Lista wyliczeń Wskazówki znajdziesz w sekcji Kategoria treści. |
ArticleEntity
Atrybut | Wymóg | Opis | Format |
---|---|---|---|
Identyfikator URI działania | Wymagany |
Precyzyjny link do encji w aplikacji dostawcy. Uwaga: do atrybucji możesz używać precyzyjnych linków. Zapoznaj się z tymi odpowiedziami na najczęstsze pytania |
Identyfikator URI |
tytuł; | Wymagany | Nazwa elementu. | Dowolny tekst Zalecany rozmiar tekstu: maks. 50 znaków |
Obrazy plakatu | Opcjonalnie | Jeśli prześlesz wiele obrazów, wyświetlimy tylko 1 obraz. Zalecany współczynnik proporcji to 16:9 Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli plakietka jest dostępna, upewnij się, że u góry i u dołu obrazu jest bezpieczna przestrzeń o szerokości 24 dps. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Źródło – tytuł | Opcjonalnie | Imię i nazwisko autora, organizacji lub raportującego | Dowolny tekst Zalecany rozmiar tekstu: poniżej 25 znaków |
Źródło – obraz | Opcjonalnie | Zdjęcie źródła, np. autor, organizacja, reporter | Wskazówki znajdziesz w specyfikacji obrazów. |
Opis | Opcjonalnie | Pojedynczy akapit tekstu opisujący element. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu: 180 znaków |
Lista napisów | Opcjonalnie | Maksymalnie 3 napisy, a każdy z nich to 1 wiersz tekstu. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu każdego podtytułu: maks. 50 znaków |
Odznaki | Opcjonalnie | Każda plakietka zawiera dowolny tekst (maks. 15 znaków) lub mały obraz. Specjalne traktowanie wrażeń użytkownika w przypadku obrazu/filmu, np. jako nakładka z plakietką na obrazie
|
|
Plakietka – tekst | Opcjonalnie | Tytuł plakietki Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Dowolny tekst Zalecany rozmiar tekstu: maks. 15 znaków |
Plakietka – obraz | Opcjonalnie | Mały obraz Specjalne podejście do wrażeń użytkownika, np. jako nakładka plakietki na miniaturze obrazu/filmu. Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Czas publikacji treści | Opcjonalnie | To sygnatura czasowa początku epoki (w milisekundach), która określa czas opublikowania lub zaktualizowania treści w aplikacji. | Sygnatura czasowa epoki w milisekundach |
Czas ostatniego zaangażowania | Wymagane warunkowo | Sygnatura czasowa (w milisekundach) czasu, w którym użytkownik ostatnio wchodził w interakcję z tym elementem. Uwaga: to pole jest wymagane, jeśli ta encja należy do klastra kontynuacyjnego. |
Sygnatura czasowa epoki w milisekundach |
Procent postępu | Wymagane warunkowo | Odsetek całej treści wykorzystanej do tej pory przez użytkownika. Uwaga: to pole jest wymagane, jeśli ta encja należy do klastra kontynuacyjnego. |
Wartość całkowita z zakresu od 0 do 100 włącznie. |
Kategorie treści | Opcjonalnie | Opisz kategorię treści w elemencie. | Lista wyliczeń Wskazówki znajdziesz w sekcji Kategoria treści. |
PersonEntity
Atrybut | Wymóg | Opis | Format |
---|---|---|---|
Identyfikator URI działania | Wymagany |
Precyzyjny link do encji w aplikacji dostawcy. Uwaga: do atrybucji możesz używać precyzyjnych linków. Zapoznaj się z tymi odpowiedziami na najczęstsze pytania |
Identyfikator URI |
Profil – nazwa | Wymagany | Nazwa, identyfikator lub nick profilu, np. „Jan Kowalski”, „@TeamPixel” itp. | Ciąg znaków Zalecany rozmiar tekstu: maks. 50 znaków |
Profil – awatar | Wymagany |
Zdjęcie profilowe lub awatara użytkownika. Uwaga: musi to być kwadratowy obraz w formacie 1:1. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Profil – dodatkowy tekst | Opcjonalnie | Dowolny tekst, np. nick profilu. | Dowolny tekst Zalecany rozmiar tekstu: maks. 15 znaków |
Profil – dodatkowe zdjęcie | Opcjonalnie | Mały obraz, np. plakietka weryfikowana. | Wskazówki znajdziesz w specyfikacji obrazów. |
Obraz w nagłówku | Opcjonalnie | Jeśli prześlesz wiele obrazów, wyświetlimy tylko 1 obraz. Zalecany współczynnik proporcji to 16:9 Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli plakietka jest dostępna, upewnij się, że u góry i u dołu obrazu jest bezpieczna przestrzeń o szerokości 24 dps. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Popularność – liczba | Opcjonalnie |
Reprezentuje obraz w nagłówku. Musi się różnić od zdjęcia profilowego. Tej opcji można użyć, jeśli ma dodatkowy obraz, który wyróżnia osobę, która podoba się jej pracy. Uwaga: musi to być obraz o proporcjach 16:9. Jeśli plakietka jest dostępna, upewnij się, że u góry i u dołu obrazu jest bezpieczna przestrzeń o szerokości 24 dps. |
Ciąg znaków Zalecany rozmiar tekstu: maksymalnie 20 znaków łącznie dla liczby + etykiety |
Popularność – liczba wartości | Opcjonalnie | Liczba obserwatorów lub wartość popularności. Uwaga: podaj wartość liczbową, jeśli Twoja aplikacja nie chce obsługiwać logiki optymalizowania dużej liczby pod kątem różnych rozmiarów displayowych. Jeśli podasz zarówno wartość Liczba, jak i wartość liczby, zostanie użyta wartość Licznik. |
Długi |
Popularność – etykieta | Opcjonalnie | Wskaż, jaka jest etykieta popularności. Na przykład „Polubienia”. | Ciąg znaków Zalecany rozmiar tekstu: maksymalnie 20 znaków łącznie dla liczby + etykiety |
Popularność – wizualna | Opcjonalnie |
Wskaż, czego dotyczy interakcja. Na przykład: obraz z ikoną polubienia i emotikonami. Można dodać więcej niż 1 obraz, ale nie wszystkie mogą być wyświetlane na wszystkich formatach. Uwaga: musi to być kwadratowy obraz w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
Ocena – wartość maksymalna | Wymagane | Maksymalna wartość skali ocen. Trzeba podać tę wartość, jeśli podano również bieżącą wartość oceny. |
Liczba >= 0,0 |
Ocena – aktualna wartość | Wymagane | Bieżąca wartość skali ocen. Trzeba go podać, jeśli podano też maksymalną wartość oceny. |
Liczba >= 0,0 |
Ocena – liczba | Opcjonalnie | Liczba ocen elementu. Uwaga: wypełnij to pole, jeśli Twoja aplikacja chce kontrolować sposób wyświetlania informacji użytkownikom. Podaj zwięzły ciąg znaków, który może zostać wyświetlony użytkownikowi. Jeśli np. liczba to 1 000 000, rozważ użycie skrótów, np. 1 mln, aby nie obcinano go przy mniejszych ekranach. |
Ciąg znaków |
Ocena – liczba wartości | Opcjonalnie | Liczba ocen elementu. Uwaga: wypełnij to pole, jeśli nie chcesz samodzielnie obsługiwać logiki skrótów wyświetlanych. Jeśli podasz zarówno liczbę, jak i wartość, użyjemy funkcji Liczba do wyświetlenia użytkownikom. |
Długi |
Lokalizacja – kraj | Opcjonalnie | Kraj, w którym znajduje się użytkownik lub w którym działa ta osoba. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – miasto | Opcjonalnie | Miasto, w którym znajduje się osoba lub działa w niej. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – wyświetlany adres | Opcjonalnie | Adres, pod którym znajduje się dana osoba lub gdzie się ona znajduje, będzie wyświetlany. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – adres | Opcjonalnie | Ulica i numer (w stosownych przypadkach) pod adresem, pod którym znajduje się osoba, która tam działa. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – stan | Opcjonalnie | Województwo (jeśli dotyczy), w którym znajduje się ta osoba lub w której działa. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – kod pocztowy | Opcjonalnie | Kod pocztowy (jeśli dotyczy) miejsca, w którym ta osoba się znajduje lub działa. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – okolica | Opcjonalnie | Dzielnica (jeśli występuje), w której znajduje się osoba, która działa lub służy. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Odznaki | Opcjonalnie |
Każda plakietka zawiera dowolny tekst (maks. 15 znaków) lub mały obraz. |
|
Plakietka – tekst | Opcjonalnie | Tytuł plakietki Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Dowolny tekst Zalecany rozmiar tekstu: maks. 15 znaków |
Plakietka – obraz | Opcjonalnie | Mały obraz Specjalne podejście do wrażeń użytkownika, np. jako nakładka plakietki na miniaturze obrazu/filmu. Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Opis | Opcjonalnie | Pojedynczy akapit tekstu opisujący element. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu: 180 znaków |
Lista napisów | Opcjonalnie | Maksymalnie 3 napisy, a każdy z nich to 1 wiersz tekstu. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu każdego podtytułu: maks. 50 znaków |
Kategorie treści | Opcjonalnie | Opisz kategorię treści w elemencie. | Lista odpowiednich wyliczeń
Wskazówki znajdziesz w sekcji Kategoria treści. |
EventEntity
Atrybut | Wymóg | Opis | Format |
---|---|---|---|
Identyfikator URI działania | Wymagany |
Precyzyjny link do encji w aplikacji dostawcy. Uwaga: do atrybucji możesz używać precyzyjnych linków. Zapoznaj się z tymi odpowiedziami na najczęstsze pytania |
Identyfikator URI |
tytuł; | Wymagany | Nazwa elementu. | Ciąg znaków Zalecany rozmiar tekstu: maks. 50 znaków |
Godzina rozpoczęcia | Wymagany |
Sygnatura czasowa oczekiwanego rozpoczęcia zdarzenia. Uwaga: wartość jest podawana w milisekundach. |
Sygnatura czasowa epoki w milisekundach |
Tryb zdarzenia | Wymagany | Pole, w którym można określić, czy wydarzenie będzie odbywać się wirtualnie, na żywo czy w obu tych miejscach. |
Enum: VIRTUALNE, IN_PERSON lub HYBRID |
Obrazy plakatu | Wymagany | Jeśli prześlesz wiele obrazów, wyświetlimy tylko 1 obraz. Zalecany współczynnik proporcji to 16:9 Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli plakietka jest dostępna, upewnij się, że u góry i u dołu obrazu jest bezpieczna przestrzeń o szerokości 24 dps. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Lokalizacja – kraj | Wymagane warunkowo | Kraj, w którym odbywa się wydarzenie. Uwaga: ta opcja jest wymagana w przypadku wydarzeń, które są IN_PERSON lub HYBRID. |
Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – miasto | Wymagane warunkowo | Miasto, w którym odbywa się wydarzenie. Uwaga: ta opcja jest wymagana w przypadku wydarzeń, które są IN_PERSON lub HYBRID. |
Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – wyświetlany adres | Wymagane warunkowo | Adres lub nazwa miejsca, w którym odbędzie się wydarzenie, która powinna być widoczna dla użytkownika. Uwaga: ta opcja jest wymagana w przypadku wydarzeń, które są IN_PERSON lub HYBRID. |
Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – adres | Opcjonalnie | Adres (jeśli dotyczy) lokalizacji, w której odbędzie się wydarzenie. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – stan | Opcjonalnie | Województwo (jeśli ma zastosowanie), w którym jest organizowane wydarzenie. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – kod pocztowy | Opcjonalnie | Kod pocztowy lokalizacji, w której jest organizowane wydarzenie (jeśli dotyczy). | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – okolica | Opcjonalnie | Dzielnica (jeśli dotyczy), w której odbędzie się wydarzenie. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Godzina zakończenia | Opcjonalnie |
Sygnatura czasowa oczekiwanego zakończenia zdarzenia. Uwaga: wartość jest podawana w milisekundach. |
Sygnatura czasowa epoki w milisekundach |
Opis | Opcjonalnie | Pojedynczy akapit tekstu opisujący element. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu: 180 znaków |
Lista napisów | Opcjonalnie | Maksymalnie 3 napisy, a każdy z nich to 1 wiersz tekstu. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu każdego podtytułu: maks. 50 znaków |
Odznaki | Opcjonalnie |
Każda plakietka zawiera dowolny tekst (maks. 15 znaków) lub mały obraz. |
|
Plakietka – tekst | Opcjonalnie | Tytuł plakietki Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Dowolny tekst Zalecany rozmiar tekstu: maks. 15 znaków |
Plakietka – obraz | Opcjonalnie | Mały obraz Specjalne podejście do wrażeń użytkownika, np. jako nakładka plakietki na miniaturze obrazu/filmu. Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Cena – aktualna cena | Wymagane warunkowo |
Aktualna cena biletu na wydarzenie. Jeśli podano przekreśloną cenę, należy ją podać. |
Dowolny tekst |
Cena – przekreślona cena | Opcjonalnie | Pierwotna cena biletu na wydarzenie. | Dowolny tekst |
Objaśnienie ceny | Opcjonalnie | Objaśnienie dotyczące ceny, które przedstawia promocję, wydarzenie lub rabat dla subskrybentów, jeśli jest dostępny. | 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 w elemencie. | Lista odpowiednich wyliczeń
Wskazówki znajdziesz w sekcji Kategoria treści. |
EventReservationEntity
Atrybut | Wymóg | Opis | Format |
---|---|---|---|
Identyfikator URI działania | Wymagany |
Precyzyjny link do encji w aplikacji dostawcy. Uwaga: do atrybucji możesz używać precyzyjnych linków. Zapoznaj się z tymi odpowiedziami na najczęstsze pytania |
Identyfikator URI |
tytuł; | Wymagany | Nazwa elementu. | Ciąg znaków Zalecany rozmiar tekstu: maks. 50 znaków |
Godzina rozpoczęcia | Wymagany |
Sygnatura czasowa oczekiwanego rozpoczęcia zdarzenia. Uwaga: wartość jest podawana w milisekundach. |
Sygnatura czasowa epoki w milisekundach |
Tryb zdarzenia | Wymagany | Pole, w którym można określić, czy wydarzenie będzie odbywać się wirtualnie, na żywo czy w obu tych miejscach. |
Enum: VIRTUALNE, IN_PERSON lub HYBRID |
Lokalizacja – kraj | Wymagane warunkowo | Kraj, w którym odbywa się wydarzenie. Uwaga: ta opcja jest wymagana w przypadku wydarzeń, które są IN_PERSON lub HYBRID. |
Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – miasto | Wymagane warunkowo | Miasto, w którym odbywa się wydarzenie. Uwaga: ta opcja jest wymagana w przypadku wydarzeń, które są IN_PERSON lub HYBRID. |
Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – wyświetlany adres | Wymagane warunkowo | Adres lub nazwa miejsca, w którym odbędzie się wydarzenie, która powinna być widoczna dla użytkownika. Uwaga: ta opcja jest wymagana w przypadku wydarzeń, które są IN_PERSON lub HYBRID. |
Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – adres | Opcjonalnie | Adres (jeśli dotyczy) lokalizacji, w której odbędzie się wydarzenie. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – stan | Opcjonalnie | Województwo (jeśli ma zastosowanie), w którym jest organizowane wydarzenie. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – kod pocztowy | Opcjonalnie | Kod pocztowy lokalizacji, w której jest organizowane wydarzenie (jeśli dotyczy). | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Lokalizacja – okolica | Opcjonalnie | Dzielnica (jeśli dotyczy), w której odbędzie się wydarzenie. | Dowolny tekst Zalecany rozmiar tekstu: maks. ok. 20 znaków |
Obrazy plakatu | Opcjonalnie | Jeśli prześlesz wiele obrazów, wyświetlimy tylko 1 obraz. Zalecany współczynnik proporcji to 16:9 Uwaga: zdecydowanie zalecamy użycie obrazu. Jeśli plakietka jest dostępna, upewnij się, że u góry i u dołu obrazu jest bezpieczna przestrzeń o szerokości 24 dps. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Godzina zakończenia | Opcjonalnie |
Sygnatura czasowa oczekiwanego zakończenia zdarzenia. Uwaga: wartość jest podawana w milisekundach. |
Sygnatura czasowa epoki w milisekundach |
Dostawca usług – nazwa | Opcjonalnie |
Nazwa dostawcy usług. Uwaga: dostawca usług potrzebuje tekstu lub obrazu. |
Dowolny tekst. Na przykład nazwa organizatora wydarzenia/wycieczki |
Dostawca usług – obraz | Opcjonalnie |
Logo lub obraz dostawcy usług. Uwaga: dostawca usług potrzebuje tekstu lub obrazu. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Opis | Opcjonalnie | Pojedynczy akapit tekstu opisujący element. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu: 180 znaków |
Lista napisów | Opcjonalnie | Maksymalnie 3 napisy, a każdy z nich to 1 wiersz tekstu. Uwaga: użytkownikowi zostanie wyświetlony opis lub lista napisów, ale nie oba te rodzaje treści. |
Dowolny tekst Zalecany rozmiar tekstu każdego podtytułu: maks. 50 znaków |
Odznaki | Opcjonalnie |
Każda plakietka zawiera dowolny tekst (maks. 15 znaków) lub mały obraz. |
|
Plakietka – tekst | Opcjonalnie | Tytuł plakietki Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Dowolny tekst Zalecany rozmiar tekstu: maks. 15 znaków |
Plakietka – obraz | Opcjonalnie | Mały obraz Specjalne podejście do wrażeń użytkownika, np. jako nakładka plakietki na miniaturze obrazu/filmu. Uwaga: na plakietkę wymagany jest tekst lub obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Identyfikator rezerwacji | Opcjonalnie | Identyfikator rezerwacji wydarzenia. | Dowolny tekst |
Cena – aktualna cena | Wymagane warunkowo |
Aktualna cena biletu na wydarzenie. Jeśli podano przekreśloną cenę, należy ją podać. |
Dowolny tekst |
Cena – przekreślona cena | Opcjonalnie | Pierwotna cena biletu na wydarzenie. | Dowolny tekst |
Objaśnienie ceny | Opcjonalnie | Objaśnienie dotyczące ceny, które przedstawia promocję, wydarzenie lub rabat dla subskrybentów, jeśli jest dostępny. | 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. Trzeba podać tę wartość, jeśli podano również bieżącą wartość oceny. |
Liczba >= 0,0 |
Ocena – aktualna wartość | Opcjonalnie | Bieżąca wartość skali ocen. Trzeba go podać, jeśli podano też maksymalną wartość oceny. |
Liczba >= 0,0 |
Ocena – liczba | Opcjonalnie | Liczba ocen zdarzenia. Uwaga: wypełnij to pole, jeśli Twoja aplikacja chce kontrolować sposób wyświetlania informacji użytkownikom. Podaj zwięzły ciąg znaków, który może zostać wyświetlony użytkownikowi. Jeśli np. liczba to 1 000 000, rozważ użycie skrótów, np. 1 mln, aby nie obcinano go przy mniejszych ekranach. |
Ciąg znaków |
Ocena – liczba wartości | Opcjonalnie | Liczba ocen zdarzenia. Uwaga: wypełnij to pole, jeśli nie chcesz samodzielnie obsługiwać logiki skrótów wyświetlanych. Jeśli podasz zarówno liczbę, jak i wartość, użyjemy funkcji Liczba do wyświetlenia użytkownikom. |
Długi |
Kategorie treści | Opcjonalnie | Opisz kategorię treści w elemencie. | Lista odpowiednich wyliczeń
Wskazówki znajdziesz w sekcji Kategoria treści. |
Specyfikacja obrazu
W tej tabeli znajdziesz wymagane specyfikacje komponentów z obrazem:
Format obrazu | Minimalny rozmiar w pikselach | Zalecany rozmiar w pikselach |
---|---|---|
Kwadrat (1 x 1) Preferowana |
300 × 300 | 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, statyczne pliki GIF, WebP
Maksymalny rozmiar pliku
5120 KB
Dodatkowe zalecenia
- Bezpieczny obszar obrazu: ważne treści umieść w środkowych 80% obrazu.
- Użyj przezroczystego tła, aby obraz był poprawnie wyświetlany w ustawieniach ciemnego i jasnego motywu.
Kategoria treści
Kategoria treści umożliwia aplikacjom publikowanie treści należących do wielu kategorii. W ten sposób treści będą mapowane 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
- Niektóre elementy, np. ArticleEntity i GeneralFeaturedEntity, mogą korzystać z dowolnej kategorii treści. W przypadku innych elementów, takich jak EventEntity, Event ReserveEntity i PersonEntity, kwalifikują się tylko niektóre z tych kategorii. Zanim ją zapełnisz, sprawdź listę kategorii, które są odpowiednie dla danego typu elementu.
W przypadku niektórych kategorii treści użyj określonego typu elementu, a nie kombinacji elementów ogólnych i kategorii treści:
- TYPE_MOVIES_AND_TV_SHOWS – Zanim użyjesz elementów ogólnych, zapoznaj się z elementami z przewodnika po integracji na stronie odtwarzania filmu.
- TYPE_BOOKS – zanim użyjesz elementów standardowych, zapoznaj się z EbookEntity.
- TYPE_AUDIOBOOKS – zanim użyjesz elementów ogólnych, zapoznaj się z AudiobookEntity.
- TYPE_SHOPPING – zanim użyjesz elementów ogólnych, zapoznaj się z ShoppingEntity.
- TYPE_FOOD_AND_DRINK – Zanim skorzystasz z elementów ogólnych, zapoznaj się z przewodnikiem dotyczącym integracji żywności.
Pole ContentCategory jest opcjonalne i powinno pozostać puste, jeśli treść nie należy do żadnej z wymienionych wcześniej kategorii.
Jeśli podano kilka kategorii treści, podaj je w kolejności od najbardziej odpowiedniej do danej treści (najlepiej z nich na liście).
Krok 2. Podaj dane klastra
Zalecamy, aby zadanie publikowania treści było wykonywane w tle (np. za pomocą WorkManagera) i planowane regularnie lub na podstawie zdarzeń (np. za każdym razem, gdy użytkownik otworzy aplikację lub gdy tylko 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 można zaprezentować 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, w ramach jednej transakcji wykonywane są te działania:
- Dotychczasowe dane aplikacji
RecommendationCluster
od partnera dewelopera zostaną usunięte. - Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze rekomendacji.
W przypadku błędu całe żądanie jest odrzucane, a istniejący 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, w ramach jednej transakcji wykonywane są te działania:
- Dotychczasowe dane aplikacji
FeaturedCluster
od partnera dewelopera zostaną usunięte. - Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze Polecane.
W przypadku błędu całe żądanie jest odrzucane, a istniejący 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, w ramach jednej transakcji wykonywane są te działania:
- Dotychczasowe dane aplikacji
ContinuationCluster
od partnera dewelopera zostaną usunięte. - Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze kontynuacji.
W przypadku błędu całe żądanie jest odrzucane, a istniejący stan zostaje zachowany.
publishUserAccountManagementRequest
Ten interfejs API służy do publikowania karty logowania . Użytkownicy są kierowani na stronę logowania w aplikacji, na której mogą publikować treści (lub udostępniać im bardziej spersonalizowane treści).
Te metadane są częścią karty logowania –
Atrybut | Wymóg | Opis |
---|---|---|
Identyfikator URI działania | Wymagane | Precyzyjny link do działania (np. do strony logowania w aplikacji) |
Obraz | Opcjonalnie – jeśli nie podano tytułu, należy 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ć obraz. | Tytuł na karcie |
Tekst działania | Opcjonalnie | Tekst wyświetlany w wezwaniu do działania (np. „Zaloguj się”) |
Podtytuł | Opcjonalnie | Opcjonalne napisy 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, w ramach jednej transakcji wykonywane są te działania:
- Dotychczasowe dane
UserAccountManagementCluster
od partnera dewelopera zostaną usunięte. - Dane z żądania są analizowane i przechowywane w zaktualizowanym klastrze UserAccountManagementCluster.
W przypadku błędu całe żądanie jest odrzucane, a istniejący stan zostaje zachowany.
updatePublishStatus
Jeśli z jakichkolwiek wewnętrznych powodów biznesowych nie zostanie opublikowany żaden z klastrów, zdecydowanie zalecamy zaktualizowanie stanu publikacji za pomocą interfejsu API updatePublishStatus. To ważne, ponieważ :
- Podanie stanu we wszystkich scenariuszach, nawet po opublikowaniu treści (STAN == OPUBLIKOWANO), ma kluczowe znaczenie przy wypełnianiu paneli, które korzystają z tego jednoznacznego stanu do przekazywania informacji o stanie i innych wskaźnikach integracji.
- Jeśli treści nie są opublikowane, ale stan integracji nie jest uszkodzony (STATUS == NOT_OpublikujED), Google może uniknąć aktywowania alertów w panelach stanu aplikacji. Jest to potwierdzenie, że treści nie zostały opublikowane z powodu oczekiwanej sytuacji z punktu widzenia dostawcy.
- Dzięki temu deweloperzy mogą 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, co pozwoli mu zobaczyć zawartość aplikacji lub ją przezwyciężyć.
Lista kodów stanu kwalifikującego się do 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, ponieważ użytkownik nie jest zalogowany, 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_OpublikujED_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();
Gdy usługa otrzyma żądanie, usunie istniejące dane z klastrów rekomendacji. W przypadku błędu całe żądanie jest odrzucane, 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 całe żądanie 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();
Gdy usługa otrzyma żądanie, usunie istniejące dane z klastra kontynuacji. W przypadku błędu całe żądanie jest odrzucane, 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 UserAccountManagement. W przypadku błędu całe żądanie jest odrzucane, a bieżący stan zostaje zachowany.
deleteClusters
Ten interfejs API służy do usuwania treści określonego typu klastra.
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());
Gdy usługa otrzymuje żądanie, usuwa istniejące dane ze wszystkich klastrów pasujących do określonych typów klastrów. Klienty mogą przekazywać 1 lub wiele typów klastrów. W przypadku błędu całe żądanie jest odrzucane, a obecny stan zostaje zachowany.
Obsługa błędów
Zdecydowanie zalecamy wsłuchiwanie się w wynik zadania z interfejsów API publikowania, aby można było podjąć dalsze działania w celu odzyskania udanego zadania i ponownego przesłania go.
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
, a przyczyna jest podana w postaci kodu 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 połączenia (na przykład jest wyraźnie wyłączona). |
SERVICE_CALL_EXECUTION_FAILURE |
Nie udało się wykonać zadania z powodu problemów z wątkiem. W takim przypadku można spróbować ponownie. |
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 |
Wywoływanie usługi jest wykonywane zbyt często. |
Krok 3. Obsługuj intencje transmisji
Oprócz wykonywania wywołań interfejsu Content API w zadaniu musisz też skonfigurować BroadcastReceiver
, aby odbierać żądanie opublikowania treści.
Intencje dotyczące przesyłania służą głównie do reaktywacji aplikacji i wymuszania synchronizacji danych. Intencje transmisji nie są przeznaczone do wysyłania zbyt często. Jest wywoływane tylko wtedy, gdy usługa dla Agencji stwierdzi, że treści mogą być nieaktualne (np. sprzed tygodnia). Dzięki temu zyska on większą pewność, że użytkownik będzie mógł korzystać z nowych treści, nawet jeśli aplikacja nie była uruchamiana od dłuższego czasu.
BroadcastReceiver
należy skonfigurować na dwa sposoby:
- Dynamicznie zarejestruj instancję klasy
BroadcastReceiver
za pomocąContext.registerReceiver()
. Umożliwia to komunikację z aplikacji, które wciąż są zapisane 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 zadeklaruj implementację za pomocą tagu
<receiver>
w plikuAndroidManifest.xml
. Dzięki temu aplikacja może odbierać komunikaty, gdy nie jest uruchomiona, oraz 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
Gdy odbierasz tę intencję, zalecamy uruchomienie wywołaniapublishRecommendationClusters
.com.google.android.engage.action.PUBLISH_FEATURED
Po otrzymaniu tej intencji uruchom wywołaniepublishFeaturedCluster
.com.google.android.engage.action.PUBLISH_CONTINUATION
Po otrzymaniu tej intencji uruchom wywołaniepublishContinuationCluster
.
Przepływ pracy w integracji
Szczegółowy przewodnik dotyczący weryfikowania integracji po jej zakończeniu znajdziesz w artykule o procesie integracji programistycznej Google Workspace.
Najczęstsze pytania
Zapoznaj się z odpowiedziami na najczęstsze pytania dotyczące pakietu 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 wykonaj te czynności:
- Wyślij e-maila na adres Engage-developers@google.com i załącz zintegrowany pakiet APK, który jest gotowy do przetestowania przez Google.
- Google przeprowadza weryfikację i weryfikację wewnętrzną, aby mieć pewność, że integracja działa zgodnie z oczekiwaniami. Jeśli potrzebne będą zmiany, Google skontaktuje się z Tobą, aby przekazać Ci niezbędne informacje.
- Gdy testy zostaną ukończone i nie będą wymagane żadne zmiany, Google skontaktuje się z Tobą, aby powiadomić Cię, że możesz rozpocząć publikowanie zaktualizowanego i zintegrowanego pakietu APK w Sklepie Play.
- Gdy Google potwierdzi, że zaktualizowany plik APK został opublikowany w Sklepie Play, klastry Rekomendacja, Polecane i Kontynuacja mogą zostać opublikowane i widoczne dla użytkowników.