Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Google est en train de développer une surface sur appareil, qui organisera les applications des utilisateurs par secteurs et offrira une nouvelle expérience immersive permettant une consommation et une découverte personnalisées du contenu de ces applications. Cette expérience plein écran offre aux développeurs partenaires
l'opportunité de mettre en avant leurs meilleurs contenus enrichis sur une chaîne dédiée à l'extérieur
de leur application.Ce guide explique aux développeurs partenaires
intégrer leurs contenus de rencontres à l'aide du SDK Engage pour renseigner ce nouveau
.
Détails de l'intégration
Terminologie
Cette intégration comprend les trois types de clusters suivants: Recommendation (Recommandations),
Featured et Continuation.
Les clusters Recommandations affichent des suggestions personnalisées de rencontres
d'un développeur partenaire individuel. Ces recommandations peuvent être
personnalisées pour l'utilisateur.
Un cluster "Recommendation" peut être constitué des éléments suivants : ArticleEntity, PersonEntity,
ou EventEntity, mais pas une combinaison de types d'entités différents.
Les recommandations présentent la structure suivante :
Cluster "Recommendations" : vue de l'interface utilisateur contenant un groupe de recommandations du même développeur partenaire.
Entité : objet représentant un seul élément dans un cluster. Ce
propose des entités qui seront mises en évidence à l'aide du
Cluster "Recommendation" :
ArticleEntity: ArticleEntity représente une recommandation pour
Contenus textuels liés aux rencontres Élément ArticleEntity
permet aux développeurs de fournir une variété de contenus textuels et illustrés
avec plus de métadonnées pour
articuler les informations aux utilisateurs.
<ph type="x-smartling-placeholder"></ph>
Figure 1:UI montrant une seule ArticleEntity dans le cluster Recommendations.
PersonEntity: PersonEntity représente une personne. La
il peut être recommandé de mettre en avant une personne
des prospects.
<ph type="x-smartling-placeholder"></ph>
Figure 2:UI montrant une seule entité PersonEntity dans
Cluster "Recommendations".
EventEntity: EventEntity représente un événement ayant lieu dans le
à venir. L'heure de début de l'événement est
une information essentielle qui
doit être transmise
aux utilisateurs.
<ph type="x-smartling-placeholder"></ph>
Figure 3:UI montrant une seule entité EventEntity
dans le cluster "Recommandations".
Le cluster Continuation affiche le contenu récemment interagi par les utilisateurs depuis
plusieurs développeurs partenaires dans un seul regroupement d'UI. Chaque développeur partenaire
pourra diffuser au maximum 10 entités dans la section "Suite"
cluster.
Le contenu de la continuation peut avoir la structure suivante:
ArticleEntity: ArticleEntity représente une recommandation pour
Contenus textuels liés aux rencontres Cette entité peut être utilisée pour
qui représentent des articles d'actualité ou d'autres contenus inachevés que l'utilisateur
aiment continuer à consommer là où ils l'avaient laissée.
Figure 6 : UI montrant une seule ArticleEntity dans
un cluster "Continuation".
EventRéservationEntity: EventRéservationEntity représente
réservation pour un événement et aide les utilisateurs à suivre les événements à venir ou en cours
de rencontres et de
réservations pour des rencontres.
Figure 8 : UI montrant un seul
EventRéservationEntity dans un cluster "Continuation".
Le cluster Featured est une vue d'interface utilisateur qui présente le héros choisi
GenericFeaturedEntity de nombreux développeurs partenaires dans un seul regroupement d'interface utilisateur.
Il n'y a qu'un seul cluster "Featured", situé dans la partie supérieure de
UI avec un emplacement prioritaire au-dessus de tous les clusters "Recommendation" Chaque
Les développeurs partenaires sont autorisés à diffuser une seule entité d'un
dans "Sélection", avec de nombreuses entités (de types potentiellement différents)
plusieurs développeurs d'applications dans le cluster "Featured".
GenericFeaturedEntity: GenericFeaturedEntity est différent de
L'élément de recommandation de cet élément de la sélection doit être utilisé pour un seul
contenus populaires des développeurs et doit représenter
du contenu important qui sera
intéressant et pertinent pour les utilisateurs.
<ph type="x-smartling-placeholder"></ph>
Figure 12:UI montrant un FeaturedCluster avec un
liste de GenericFeaturedEntity
Travail préalable
Niveau d'API minimal : 19
Ajoutez la bibliothèque com.google.android.engage:engage-core à votre application :
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.5.2'
}
Résumé
La conception est basée sur la mise en œuvre
service lié.
Les données qu'un client peut publier sont soumises aux limites suivantes pour chaque type de cluster :
Type de cluster
Nombre limite de clusters
Limites minimales d'entités dans un cluster
Limites maximales d'entités dans un cluster
Cluster(s) "Recommendation"
5 maximum
Au moins 5
25 maximum (ArticleEntity, PersonEntity ou EventEntity)
Cluster "Continuation"
1 maximum
Au moins 1
10 maximum (ArticleEntity ou
EventReservationEntity).
Cluster "Featured"
1 maximum
Au moins 1
10 maximum (GenericFeaturedEntity)
Étape 1 : Fournir les données d'entité
Le SDK a défini différentes entités pour représenter chaque type d'élément. Nous acceptons
les entités suivantes pour la catégorie "Rencontres" :
GenericFeaturedEntity
ArticleEntity
PersonEntity
EventEntity
EventReservationEntity
Les tableaux ci-dessous décrivent les attributs disponibles pour chaque type et indiquent s'ils sont obligatoires.
GenericFeaturedEntity
Attribut
Obligatoire ?
Description
Format
URI d'action
Obligatoire
Lien profond vers l'entité dans l'application pour les fournisseurs.
Taille de texte recommandée: 50 caractères maximum
Images poster
Facultatif
Nous n'affichons qu'une seule image lorsque plusieurs images sont fournies.
Proportions recommandées : 16:9
Remarque:Nous vous recommandons vivement de créer des images. Si un badge est
assurez-vous d'avoir un espace de sécurité de 24 dps en haut et en bas
image
Représente l'image d'en-tête. Elle doit être différente de l'image de profil.
Vous pouvez l'utiliser s'il y a une image supplémentaire pour mettre en avant
comme son travail.
Remarque:elle doit être au format 16:9. Si un badge est fourni,
Prévoyez un espace de sécurité de 24 dps en haut et en bas de l'image.
Indiquez le nombre d'abonnés ou la popularité, par exemple :
"3,7 M.".
Remarque:Si vous indiquez à la fois "Nombre" et "Nombre"
Le décompte sera utilisé
Chaîne
Taille de texte recommandée: 20 caractères maximum pour le nombre et l'étiquette
combiné
Popularité – Valeur du nombre
Facultatif
Nombre d'abonnés ou valeur de popularité.
Remarque:Spécifiez une valeur numérique si votre application ne souhaite pas
pour gérer la logique sur la façon dont
un grand nombre doit être optimisé pour
différentes tailles d'affichage. Si "Nombre" et "Valeur du nombre" sont fournis,
Le nombre est affiché aux utilisateurs.
Longue
Popularité – Libellé
Facultatif
Indiquez le libellé de popularité. Par exemple : "J'aime".
Chaîne
Taille de texte recommandée: 20 caractères maximum pour le nombre et l'étiquette
combiné
Popularité (visuelle)
Facultatif
Indiquez à quoi sert l'interaction. Exemple : Image montrant
Icône J'aime, emoji.
Peut fournir plusieurs images, mais il est possible qu'elles ne s'affichent pas toutes sur tous
facteurs de forme.
Remarque:Il doit s'agir d'une image carrée au format 1:1.
À fournir si la valeur de la note actuelle est également indiquée.
Nombre >= 0.0
Note (valeur actuelle)
Obligatoire
Valeur actuelle de l'échelle d'évaluation.
À fournir si la valeur maximale de la note est également indiquée.
Nombre >= 0.0
Note – Nombre
Facultatif
Nombre de notes pour l'entité.
Remarque:Renseignez ce champ si votre application souhaite
pour contrôler la façon dont
elles s'affichent pour les utilisateurs. Fournir la chaîne concise
à présenter à l'utilisateur. Par exemple, si le nombre est
1 000 000, pensez à utiliser des abréviations telles que 1M, afin qu’il ne soit pas
est tronquée sur les
tailles d'affichage plus petites.
Chaîne
Note : valeur du nombre
Facultatif
Nombre de notes pour l'entité.
Remarque:Renseignez ce champ si vous ne souhaitez pas
la logique d'abréviation d'affichage. Si les valeurs "Nombre" et "Nombre"
sont présentes, nous utiliserons la valeur "Count" pour la présenter aux utilisateurs
Longue
Zone géographique – Pays
Facultatif
Pays dans lequel la personne se trouve ou sert.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Lieu : ville
Facultatif
Ville où la personne se trouve ou sert.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Lieu – Adresse à afficher
Facultatif
L'adresse où se trouve la personne ou servira sera affichée à
l'utilisateur.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement : adresse postale
Facultatif
L'adresse postale (le cas échéant) où se trouve la personne ou
de l'inférence.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement – État
Facultatif
État (le cas échéant) où la personne se trouve ou sert.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement : code postal
Facultatif
Le code postal (le cas échéant) du lieu où la personne se trouve ou qui dessert.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement : Quartier
Facultatif
Le quartier (le cas échéant) où la personne se trouve ou opère.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Badges
Facultatif
Chaque badge est composé de texte libre (15 caractères maximum) ou d'une petite image.
Badge – Texte
Facultatif
Titre du badge
Remarque:Vous devez ajouter du texte ou une image pour le badge.
Texte libre
Taille de texte recommandée: 15 caractères maximum
Badge – Image
Facultatif
Petite image
Traitement spécial de l'expérience utilisateur, par exemple en superposition de badge sur l'image/la vidéo
miniature.
Remarque:Vous devez ajouter du texte ou une image pour le badge.
Taille de texte recommandée: 50 caractères maximum
Heure de début
Obligatoire
Code temporel de l'epoch où l'événement est censé commencer.
Remarque:Ce nombre est représenté en millisecondes.
Code temporel de l'epoch (en millisecondes)
Mode événement
Obligatoire
Champ permettant d'indiquer si l'événement sera virtuel, en présentiel ou
les deux.
Énumération: VIRTUAL, IN_PERSON ou HYBRID
Images poster
Obligatoire
Nous n'affichons qu'une seule image lorsque plusieurs images sont fournies.
Proportions recommandées : 16:9
Remarque:Nous vous recommandons vivement de créer des images. Si un badge est
assurez-vous d'avoir un espace de sécurité de 24 dps en haut et en bas
image
Taille de texte recommandée: 50 caractères maximum
Heure de début
Obligatoire
Code temporel de l'epoch où l'événement est censé commencer.
Remarque:Ce nombre est représenté en millisecondes.
Code temporel de l'epoch (en millisecondes)
Mode événement
Obligatoire
Champ permettant d'indiquer si l'événement sera virtuel, en présentiel ou
les deux.
Énumération: VIRTUAL, IN_PERSON ou HYBRID
Zone géographique – Pays
Obligatoire sous certaines conditions
Pays dans lequel l'événement a lieu.
Remarque:Cette valeur est obligatoire pour les événements indiquant IN_PERSON ou
HYBRIDE
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Lieu : ville
Obligatoire sous certaines conditions
Ville dans laquelle l'événement a lieu.
Remarque:Cette valeur est obligatoire pour les événements indiquant IN_PERSON ou
HYBRIDE
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Lieu – Adresse à afficher
Obligatoire sous certaines conditions
Adresse ou nom du lieu où l'événement aura lieu et qui doit
à présenter à l'utilisateur.
Remarque:Cette valeur est obligatoire pour les événements indiquant IN_PERSON ou
HYBRIDE
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement : adresse postale
Facultatif
Adresse postale (le cas échéant) du lieu où a lieu l'événement
en cours d'hébergement.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement – État
Facultatif
L'État ou la province (le cas échéant) où l'événement a lieu
hébergés.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement : code postal
Facultatif
Code postal (le cas échéant) du lieu où se déroule l'événement
hébergés.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Emplacement : Quartier
Facultatif
Quartier (le cas échéant) dans lequel l'événement est organisé.
Texte libre
Taille de texte recommandée: environ 20 caractères maximum
Images poster
Facultatif
Nous n'affichons qu'une seule image lorsque plusieurs images sont fournies.
Proportions recommandées : 16:9
Remarque:Nous vous recommandons vivement de créer des images. Si un badge est
assurez-vous d'avoir un espace de sécurité de 24 dps en haut et en bas
image
Prix actuel du billet ou de la carte pour l'événement.
<ph type="x-smartling-placeholder"></ph>
Doit être fourni si un prix barré est indiqué.
Texte libre
Prix – BarthroughPrice
Facultatif
Prix d'origine du billet ou de la carte pour l'événement.
Texte libre
Accroche de prix
Facultatif
Accroche sur le prix pour mettre en avant une promotion, un événement ou une remise réservée aux membres, le cas échéant
Texte libre
Taille de texte recommandée: 45 caractères maximum (texte trop long)
peut afficher des points de suspension)
Note (valeur maximale)
Facultatif
Valeur maximale de l'échelle d'évaluation.
À fournir si la valeur de la note actuelle est également indiquée.
Nombre >= 0.0
Note (valeur actuelle)
Facultatif
Valeur actuelle de l'échelle d'évaluation.
À fournir si la valeur maximale de la note est également indiquée.
Nombre >= 0.0
Note – Nombre
Facultatif
Nombre de notes pour l'événement.
Remarque:Renseignez ce champ si votre application souhaite
pour contrôler la façon dont
elles s'affichent pour les utilisateurs. Fournir la chaîne concise
à présenter à l'utilisateur. Par exemple, si le nombre est
1 000 000, pensez à utiliser des abréviations telles que 1M, afin qu’il ne soit pas
est tronquée sur les
tailles d'affichage plus petites.
Chaîne
Note : valeur du nombre
Facultatif
Nombre de notes pour l'événement.
Remarque:Renseignez ce champ si vous ne souhaitez pas
la logique d'abréviation d'affichage. Si les valeurs "Nombre" et "Nombre"
sont présentes, nous utiliserons la valeur "Count" pour la présenter aux utilisateurs
Le tableau suivant indique les spécifications requises pour les composants Image:
Format
Nombre minimal de pixels
Nombre de pixels recommandé
Carré (1x1)
Préféré
300 x 300
1 200 x 1 200
Paysage (1,91 x 1)
600 x 314
1 200 x 628
Format portrait (4 x 5)
480 x 600
960 x 1200
Les images doivent être hébergées sur des CDN publics pour que Google puisse y accéder.
Formats des fichiers
PNG, JPG, GIF statique, WebP
Taille maximale des fichiers
5 120 Ko
Autres recommandations
Zone de sécurité de l'image : placez le contenu important dans les 80 % les plus au centre de l'image.
Utilisez un arrière-plan transparent pour que l'image s'affiche correctement avec les paramètres du thème sombre et clair.
Catégorie de contenu
La catégorie de contenu permet aux applications de publier du contenu appartenant à plusieurs
catégories. Le contenu est ainsi mis en correspondance avec certaines des catégories prédéfinies, à savoir:
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
Les images doivent être hébergées sur des CDN publics pour que Google puisse y accéder.
Consignes d'utilisation des catégories de contenu
Certaines entités telles que ArticleEntity et GenericFeaturedEntity sont
pouvant utiliser n'importe quelle catégorie de contenu. Pour les autres entités telles que
EventEntity, EventRéservationEntity, PersonEntity : un sous-ensemble uniquement
de ces catégories sont éligibles. Consultez la liste des catégories éligibles pour
un type d'entité avant de remplir la liste.
Utiliser le type d'entité spécifique pour certaines catégories de contenu plutôt qu'une combinaison
des entités Generic et de ContentCategory:
TYPE_movieS_AND_TV_SHOWS – Consultez les entités de
Consultez le guide d'intégration avant d'utiliser la
des entités génériques.
TYPE_BOOKS - Consultez les
EbookEntity avant d'utiliser la
des entités génériques.
TYPE_AUDIOBOOKS - Règlement
AudiobookEntity avant
à l'aide des entités génériques.
TYPE_SHOPPING - Règlement
ShoppingEntity avant
à l'aide des entités génériques.
Le champ "ContentCategory" est facultatif et ne doit pas être renseigné si le paramètre
le contenu n'appartient à aucune des catégories mentionnées précédemment.
Si plusieurs catégories de contenu sont fournies, indiquez-les dans l'ordre
par rapport au contenu classé dans la catégorie la plus pertinente
en premier dans la liste.
Étape 2 : Fournir les données de cluster
Il est recommandé d'exécuter la tâche de publication de contenu en arrière-plan (par exemple, à l'aide de WorkManager) et de la programmer régulièrement ou sur la base d'un événement précis (par exemple, chaque fois que l'utilisateur ouvre l'application ou lorsqu'il vient d'ajouter quelque chose à son panier).
AppEngagePublishClient permet la publication des clusters.
Les API suivantes permettent de publier des clusters dans le client :
isServiceAvailable
publishRecommendationClusters
publishFeaturedCluster
publishContinuationCluster
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
deleteFeaturedCluster
deleteContinuationCluster
deleteUserManagementCluster
deleteClusters
isServiceAvailable
Cette API permet de vérifier si le service est disponible pour l'intégration et de déterminer si le contenu peut être présenté sur l'appareil.
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
Cette API permet de publier une liste d'objets RecommendationCluster.
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Top Picks For You")
.build())
.build());
Lorsque le service reçoit la requête, les actions suivantes ont lieu dans une seule transaction :
Les données RecommendationCluster existantes du développeur partenaire sont supprimées.
Les données de la requête sont analysées et stockées dans le cluster "Recommendation" mis à jour.
En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
publishFeaturedCluster
Cette API permet de publier une liste d'objets FeaturedCluster.
client.publishFeaturedCluster(
new PublishFeaturedClustersRequest.Builder()
.addFeaturedCluster(
new FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
Lorsque le service reçoit la requête, les actions suivantes ont lieu dans une seule transaction :
Les données FeaturedCluster existantes du développeur partenaire sont supprimées.
Les données de la requête sont analysées et stockées dans le cluster "Featured" mis à jour.
En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
publishContinuationCluster
Cette API permet de publier un objet ContinuationCluster.
client.publishContinuationCluster(
new PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
new ContinuationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
Lorsque le service reçoit la requête, les actions suivantes ont lieu dans une seule transaction :
Les données ContinuationCluster existantes du développeur partenaire sont supprimées.
Les données de la requête sont analysées et stockées dans le cluster "Continuation" mis à jour.
En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
publishUserAccountManagementRequest
Cette API permet de publier une fiche de connexion. L'action de connexion redirige les utilisateurs vers la page de connexion de l'application afin que celle-ci puisse publier du contenu (ou fournir un contenu plus personnalisé).
Les métadonnées suivantes font partie de la fiche de connexion :
Attribut
Obligatoire ?
Description
URI d'action
Obligatoire
Lien profond vers l'action (par exemple, accès à la page de connexion de l'application)
Image
Facultatif : si aucun titre n'est fourni, vous devez en fournir un
Image affichée sur la fiche
Images au format 16:9 avec une résolution de 1 264 x 712
Titre
Facultatif : si aucune image n'est fournie, vous devez en fournir une
Titre sur la fiche
Texte de l'action
Facultatif
Texte affiché sur l'incitation à l'action (par exemple, "Se connecter")
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());
Lorsque le service reçoit la requête, les actions suivantes ont lieu dans une seule transaction :
Les données UserAccountManagementCluster existantes du développeur partenaire sont supprimées.
Les données de la requête sont analysées et stockées dans le cluster "UserAccountManagementCluster" mis à jour.
En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
updatePublishStatus
Si, pour une raison commerciale interne, aucun des clusters n'est publié, nous
recommandons vivement de mettre à jour l'état de publication à l'aide de la
updatePublishStatus. Ce point est important pour les raisons suivantes :
Il est essentiel d'indiquer l'état dans tous les scénarios, même lorsque le contenu est publié (STATUS == PUBLISHED) pour renseigner les tableaux de bord qui utilisent cet état explicite afin de transmettre l'état et d'autres métriques de votre intégration.
Si aucun contenu n'est publié, mais que l'état de l'intégration fonctionne correctement (STATUS == NOT_PUBLISHED), Google peut éviter de déclencher des alertes dans les tableaux de bord concernant l'état de l'application. Cela confirme que le contenu n'est pas publié en raison d'une situation attendue du point de vue du fournisseur.
Il aide les développeurs à fournir des informations sur la date de publication des données et sur
non.
Google peut utiliser les codes d'état pour encourager l'utilisateur à effectuer certaines actions
l'application afin qu'ils puissent voir
le contenu de l'application ou le passer.
Voici la liste des codes d'état de publication éligibles :
// 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
Si le contenu n'est pas publié parce que l'utilisateur n'est pas connecté, Google
nous vous recommandons de publier la fiche de connexion. Si, pour une raison quelconque, les fournisseurs
pour publier la fiche de connexion, nous vous recommandons d'appeler
l'API updatePublishStatus avec le code d'état ;
NOT_PUBLISHED_REQUIRES_SIGN_IN
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationClusters
Cette API permet de supprimer le contenu des clusters "Recommendation".
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
Lorsque le service reçoit la requête, il supprime les données existantes des clusters "Recommendation". En cas d'erreur, la requête entière est rejetée.
l'état existant est maintenu.
deleteFeaturedCluster
Cette API permet de supprimer le contenu du cluster "Featured".
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
Lorsque le service reçoit la requête, il supprime les données existantes du cluster "Featured". En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
deleteContinuationCluster
Cette API permet de supprimer le contenu du cluster "Continuation".
Kotlin
client.deleteContinuationCluster()
Java
client.deleteContinuationCluster();
Lorsque le service reçoit la requête, il supprime les données existantes du cluster "Continuation". En cas d'erreur, la requête entière est rejetée.
l'état existant est maintenu.
deleteUserManagementCluster
Cette API permet de supprimer le contenu du cluster "UserAccountManagement".
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
Lorsque le service reçoit la requête, il supprime les données existantes du cluster "UserAccountManagement". En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
deleteClusters
Cette API permet de supprimer le contenu d'un type de cluster donné.
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_CONTINUATION)
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
.build());
Lorsque le service reçoit la requête, il supprime les données existantes de tous les clusters correspondant aux types de clusters spécifiés. Les clients peuvent choisir de transmettre un ou plusieurs types de clusters. En cas d'erreur, la requête entière est rejetée, et l'état existant est maintenu.
Gestion des exceptions
Il est fortement recommandé d'écouter le résultat de la tâche à partir des API de publication afin qu'une action de suivi puisse être effectuée pour récupérer et renvoyer une tâche réussie.
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
}
}
}
});
L'erreur est renvoyée au format AppEngageException. La cause est incluse sous la forme d'un code d'erreur.
Code d'erreur
Note
SERVICE_NOT_FOUND
Le service n'est pas disponible sur l'appareil donné.
SERVICE_NOT_AVAILABLE
Le service est disponible sur l'appareil donné, mais pas au moment de l'appel (par exemple, il est explicitement désactivé).
SERVICE_CALL_EXECUTION_FAILURE
L'exécution de la tâche a échoué en raison de problèmes de thread. Dans ce cas, vous pouvez réessayer.
SERVICE_CALL_PERMISSION_DENIED
L'appelant n'est pas autorisé à effectuer l'appel du service.
SERVICE_CALL_INVALID_ARGUMENT
La requête contient des données non valides (par exemple, un nombre plus élevé que le nombre de clusters autorisé).
SERVICE_CALL_INTERNAL
Une erreur s'est produite au niveau du service.
SERVICE_CALL_RESOURCE_EXHAUSTED
L'appel du service est effectué trop fréquemment.
Étape 3 : Gérer les intents de diffusion
En plus d'effectuer des appels d'API de publication de contenu via une tâche, vous devez également configurer un objet BroadcastReceiver pour recevoir la requête de publication de contenu.
L'objectif des intents de diffusion est principalement de réactiver des applications et de forcer la synchronisation des données. Les intents de diffusion ne sont pas conçus pour être envoyés très fréquemment. Ils ne se déclenchent que lorsque le service Engage détermine que le contenu est peut-être obsolète (par exemple, s'il date d'il y a une semaine). De cette façon, l'utilisateur a plus de chances de bénéficier d'une expérience de contenu actualisée, même si l'application n'a pas été exécutée pendant une longue période.
Le BroadcastReceiver doit être configuré de deux manières :
Enregistrez dynamiquement une instance de la classe BroadcastReceiver à l'aide de Context.registerReceiver(). Cela permet la communication à partir d'applications restées actives en mémoire.
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));
}
Déclarez une implémentation de manière statique avec la balise <receiver> dans le fichier AndroidManifest.xml. Cela permet à l'application de recevoir des intents de diffusion lorsqu'elle n'est pas en cours d'exécution, et de publier le contenu.
Les intents suivants sont envoyés par le service :
com.google.android.engage.action.PUBLISH_RECOMMENDATION Il est recommandé
pour démarrer un appel publishRecommendationClusters lors de la réception de cet intent.
com.google.android.engage.action.PUBLISH_FEATURED Nous vous recommandons de
démarrer un appel publishFeaturedCluster lors de la réception de cet intent.
com.google.android.engage.action.PUBLISH_CONTINUATION Nous vous recommandons de
démarrer un appel publishContinuationCluster lors de la réception de cet intent.
Google effectue une vérification et des examens en interne pour s'assurer que l'intégration fonctionne comme prévu. Si des modifications sont nécessaires, nous vous contacterons avec toutes les informations nécessaires.
Une fois les tests terminés et qu'aucune modification n'est nécessaire, Google vous contacte au
vous informer que vous pouvez commencer à publier le fichier APK mis à jour et intégré dans
sur le Play Store.
Une fois que nous aurons confirmé la publication de votre APK mis à jour sur le Play Store, vos clusters Recommendation (Recommandations), Featured (Sélection) et Continuation (Suite) pourront être publiés et visibles par les utilisateurs.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2024/08/29 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2024/08/29 (UTC)."],[],[]]