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. Dzięki tej funkcji partnerzy mogą prezentować swoje najlepsze treści w specjalnym kanale poza aplikacją.
Ten dokument zawiera instrukcje dla deweloperów, którzy chcą zintegrować swoje treści społecznościowe z wykorzystaniem pakietu SDK dla Agencji za pomocą pakietu SDK dla deweloperów, który wypełni ten nowy obszar.
Szczegóły integracji
W poniższej sekcji znajdziesz szczegóły integracji.
Terminologia
Klastry rekomendacji wyświetlają spersonalizowane sugestie od poszczególnych partnerów deweloperów.
Rekomendacje mają taką strukturę:
Klaster rekomendacji: widok interfejsu zawierający grupę rekomendacji od tego samego partnera programistycznego.
Każdy klaster rekomendacji składa się z jednego z tych 2 typów elementów :
- Portret MediaEntity
- SocialPostEntity
PortreMediaEntity musi zawierać 1 obraz w orientacji pionowej do posta. Metadane związane z profilem i interakcjami są opcjonalne.
Post
- obraz w trybie pionowym i sygnatura czasowa;
- Obraz w trybie pionowym + zawartość tekstowa i sygnatura czasowa
Profil
- Awatar, nazwa lub nick, dodatkowe zdjęcie
Interakcja
- tylko licznik i etykieta,
- Licznik i element graficzny (ikona)
SocialPostEntity zawiera metadane związane z profilem, postem i interakcją.
Profil
- Awatar, nazwa lub nick, dodatkowy tekst, dodatkowe zdjęcie
Post
- tekst i sygnatura czasowa;
- Rich media (adres URL obrazu lub adresu URL sformatowanego) i sygnatura czasowa;
- Tekst i multimedia (adres URL obrazu lub sformatowanego adresu URL) oraz sygnatura czasowa
Interakcje
- Tylko liczenie i etykieta lub
- Liczba i element graficzny (ikona)
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.0'
}
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 (PortraitMediaEntity lub SocialPostEntity ) |
Maksymalnie 25 (PortraitMediaEntity lub SocialPostEntity ) |
Krok 1. Podaj dane encji
Pakiet SDK ma zdefiniowane różne elementy reprezentujące każdy typ elementu. Pakiet SDK obsługuje w kategorii Społecznościowe te elementy:
PortraitMediaEntity
SocialPostEntity
W tabelach poniżej znajdziesz dostępne atrybuty i wymagania dla poszczególnych typów.
PortraitMediaEntity
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. Przeczytaj te najczęstsze pytania |
URI |
Metadane dotyczące postów (wymagane) | |||
Zdjęcie(a) | Wymagane |
Obrazy powinny być w orientacji pionowej. Jeśli dostępnych jest wiele obrazów, interfejs może wyświetlać tylko 1 obraz. Interfejs może jednak pokazywać, że w aplikacji jest więcej obrazów. Jeśli post jest filmem, dostawca powinien dodać miniaturę filmu, która będzie wyświetlana jako obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Zawartość tekstowa | Opcjonalnie | Główny tekst posta, aktualizacji itp. | Ciąg znaków (zalecany maks. 140 znaków) |
Sygnatura czasowa | Opcjonalnie | Godzina opublikowania posta. | Sygnatura czasowa epoki w milisekundach |
Metadane związane z profilem (opcjonalnie) | |||
Nazwa | Wymagane | Nazwa, identyfikator lub nick profilu, np. „Jan Kowalski”, „@ZespółPixel” | Ciąg znaków(zalecane maks. 25 znaków) |
Awatar | Wymagane |
Zdjęcie profilowe lub awatara użytkownika. Obraz kwadratowy w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
Dodatkowe zdjęcie | Opcjonalnie |
Plakietka profilu, np. „plakietka zweryfikowana” Obraz kwadratowy w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
Metadane związane z interakcjami (opcjonalnie) | |||
Liczba | Wymagane | Podaj liczbę interakcji, np. „3,7 mln”. | Ciąg znaków (zalecane maksymalnie 20 znaków łącznie dla liczby + etykiety) |
Wytwórnia |
Opcjonalnie Jeśli nie podano, należy skorzystać z opcji Wizualnej. |
Określ cel interakcji, np. „polubienia”. | Ciąg znaków (zalecane maksymalnie 20 znaków łącznie dla liczby + etykiety) |
Treści wizualne |
Opcjonalnie Jeśli nie podano żadnej wartości, należy podać wartość Label. |
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. Obraz kwadratowy w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
DisplayTimeWindow (opcjonalnie) – ustaw przedział czasu dla treści wyświetlanej na platformie | |||
Sygnatura czasowa rozpoczęcia | Opcjonalnie |
Sygnatura czasowa epoki, po której treść ma się pojawić na powierzchni. Jeśli zasada jest nieskonfigurowana, treści mogą się wyświetlać na tej platformie. |
Sygnatura czasowa epoki w milisekundach |
Sygnatura czasowa zakończenia | Opcjonalnie |
Sygnatura czasowa epoki, po której treści nie wyświetlają się już na powierzchni. Jeśli zasada jest nieskonfigurowana, treści mogą się wyświetlać na tej platformie. |
Sygnatura czasowa epoki w milisekundach |
SocialPostEntity
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. Przeczytaj te najczęstsze pytania |
URI |
Metadane dotyczące postów (wymagane) Wymagana jest co najmniej jedna z tych wartości: TextContent, Image lub WebContent |
|||
Zdjęcie(a) | Opcjonalnie |
Obrazy powinny być w orientacji pionowej. Jeśli dostępnych jest wiele obrazów, interfejs może wyświetlać tylko 1 obraz. Interfejs może jednak pokazywać, że w aplikacji jest więcej obrazów. Jeśli post jest filmem, dostawca powinien dodać miniaturę filmu, która będzie wyświetlana jako obraz. |
Wskazówki znajdziesz w specyfikacji obrazów. |
Zawartość tekstowa | Opcjonalnie | Główny tekst posta, aktualizacji itp. | Ciąg znaków (zalecany maks. 140 znaków) |
Podgląd linku (opcjonalny) | |||
Podgląd linku – tytuł | Wymagane | Tekst określający tytuł treści strony internetowej | Ciąg znaków |
Podgląd linku – nazwa hosta | Wymagane | Tekst określający właściciela strony internetowej, np. „INSIDER” | Ciąg znaków |
Podgląd linku – obraz | Opcjonalnie | Baner powitalny treści internetowych | Wskazówki znajdziesz w specyfikacji obrazów. |
Sygnatura czasowa | Opcjonalnie | Godzina opublikowania posta. | Sygnatura czasowa epoki w milisekundach |
Metadane związane z profilem (opcjonalnie) | |||
Nazwa | Wymagane | Nazwa, identyfikator lub nick profilu, np. „Jan Kowalski”, „@ZespółPixel”. | Ciąg znaków(zalecane maks. 25 znaków) |
Dodatkowy tekst | Opcjonalnie |
Może być używany jako identyfikator profilu, nick lub dodatkowe metadane Na przykład „@Jan-Kowalski”, „5 mln obserwatorów”, „Może Ci się spodobać”, „Zyskujesz popularność”, „5 nowych postów” |
Ciąg znaków(zalecane maks. 40 znaków) |
Awatar | Wymagane |
Zdjęcie profilowe lub awatara użytkownika. Obraz kwadratowy w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
Dodatkowe zdjęcie | Opcjonalnie |
np. plakietka profilu „Zweryfikowana” Obraz kwadratowy w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
Metadane związane z interakcjami (opcjonalnie) | |||
Liczba | Wymagane | Podaj liczbę interakcji, np. „3,7 mln”. | Ciąg znaków (zalecane maksymalnie 20 znaków łącznie dla liczby + etykiety) |
Wytwórnia |
Opcjonalnie Jeśli nie podano, należy skorzystać z opcji Wizualnej. |
Wskaż, czego dotyczy interakcja. na przykład „Polubione”. | Ciąg znaków (zalecane maksymalnie 20 znaków łącznie dla liczby + etykiety) |
Treści wizualne |
Opcjonalnie Jeśli nie podano żadnej wartości, należy podać wartość Label. |
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. Obraz kwadratowy w formacie 1:1 |
Wskazówki znajdziesz w specyfikacji obrazów. |
DisplayTimeWindow (opcjonalnie) – ustaw przedział czasu dla treści wyświetlanej na platformie | |||
Sygnatura czasowa rozpoczęcia | Opcjonalnie |
Sygnatura czasowa epoki, po której treść ma się pojawić na powierzchni. Jeśli zasada jest nieskonfigurowana, treści mogą się wyświetlać na tej platformie. |
Sygnatura czasowa epoki w milisekundach |
Sygnatura czasowa zakończenia | Opcjonalnie |
Sygnatura czasowa epoki, po której treści nie wyświetlają się już na powierzchni. Jeśli zasada jest nieskonfigurowana, treści mogą się wyświetlać na tej platformie. |
Sygnatura czasowa epoki w milisekundach |
Specyfikacja obrazu
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.
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 wykona działanie na nowym koncie).
Za publikowanie klastrów społecznościowych odpowiada AppEngageSocialClient
.
Istnieją następujące interfejsy API do publikowania klastrów w kliencie:
isServiceAvailable
publishRecommendationClusters
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
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
.
Obiekt RecommendationCluster
może mieć te atrybuty:
Atrybut | Wymóg | Opis |
---|---|---|
Lista SocialPostEntity lub PortraitMediaEntity | Wymagany | Lista encji, które składają się na rekomendacje dla tego klastra rekomendacji. Encje w pojedynczym klastrze muszą być tego samego typu. |
tytuł; | Wymagany | Tytuł klastra rekomendacji (na przykład Najnowsze od znajomych). Zalecany rozmiar tekstu: poniżej 25 znaków (zbyt długi tekst może zawierać wielokropki) |
Identyfikator URI działania | Opcjonalnie |
Precyzyjny link do strony w aplikacji partnera, na której użytkownicy mogą zobaczyć pełną listę rekomendacji. Uwaga: do atrybucji możesz używać precyzyjnych linków. Przeczytaj te najczęstsze pytania |
Kotlin
client.publishRecommendationClusters( PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Latest from your friends") .build()) .build())
Java
client.publishRecommendationClusters( new PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( new RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Latest from your friends") .build()) .build());
Gdy usługa otrzyma żądanie, w ramach jednej transakcji wykonywane są te działania:
- Wszystkie istniejące dane klastra rekomendacji zostaną usunięte.
- Dane z żądania są analizowane i przechowywane w nowych klastrach rekomendacji.
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.
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_RECOMMENDATION) ... .build())
Java
client.deleteClusters( new DeleteClustersRequest.Builder() .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.
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.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION 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));
}
- 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>
</receiver>
</application>
Usługa będzie wysyłać te zamiary:
com.google.android.engage.action.PUBLISH_RECOMMENDATION
Zalecamy uruchomienie wywołaniapublishRecommendationClusters
przy odbieraniu tej intencji.
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. Nasz zespół odpowie tak szybko, jak to będzie możliwe.
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 zostanie opublikowany w Sklepie Play, Twoje rekomendacje zostaną opublikowane i będą widoczne dla użytkowników.