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 permet aux développeurs partenaires de présenter leurs meilleurs contenus enrichis sur un canal dédié en dehors de leur application.
Ce document explique aux développeurs partenaires comment intégrer le contenu de leurs réseaux à l'aide du SDK Engage pour remplir cette nouvelle surface.
Détails de l'intégration
La section suivante capture les détails de l'intégration.
Terminologie
Les clusters Recommandations affichent des suggestions personnalisées d'un développeur partenaire individuel.
Les recommandations présentent la structure suivante :
Cluster "Recommandations" : vue de l'interface utilisateur contenant un groupe de recommandations du même développeur partenaire.
Chaque cluster "Recommandations" comprend l'un des deux types d'entités suivants :
- PortraitMediaEntity
- SocialPostEntity
PortraitMediaEntity doit contenir une image en mode Portrait pour la publication. Les métadonnées liées au profil et à l'interaction sont facultatives.
Publication
- Image en mode Portrait et code temporel, ou
- Image en mode Portrait + contenu textuel et code temporel
Profil
- Avatar, nom ou identifiant, image supplémentaire
Interactions
- Compter et étiqueter uniquement, ou
- Nombre et image (icône)
SocialPostEntity contient les métadonnées liées au profil, à la publication et à l'interaction.
Profil
- Avatar, nom ou identifiant, texte supplémentaire, image supplémentaire
Publication
- Texte et code temporel, ou
- Rich media (image ou URL enrichie) et horodatage, ou
- Texte et rich media (image ou URL enrichie) et code temporel, ou
- Aperçu de la vidéo (miniature et durée) et code temporel
Interactions
- Nombre et étiquette uniquement, ou
- Nombre et image (icône)
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 repose sur l'implémentation d'un 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 (PortraitMediaEntity ou SocialPostEntity ) |
25 maximum (PortraitMediaEntity ou SocialPostEntity ) |
É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. Le SDK accepte les entités suivantes pour la catégorie "Social" :
PortraitMediaEntity
SocialPostEntity
Les tableaux ci-dessous décrivent les attributs disponibles pour chaque type et indiquent s'ils sont obligatoires.
PortraitMediaEntity
Attribut | Obligatoire ? | Description | Format |
---|---|---|---|
URI d'action | Obligatoire |
Lien profond vers l'entité dans l'application pour les fournisseurs. Remarque : Vous pouvez utiliser des liens profonds pour l'attribution. Consultez ces questions fréquentes. |
URI |
Métadonnées associées aux publications (obligatoire) | |||
Image(s) | Obligatoire |
Les images doivent être au format Portrait. L'UI peut n'afficher qu'une seule image lorsque plusieurs images sont fournies. Toutefois, l'interface utilisateur peut indiquer visuellement qu'il y a davantage d'images dans l'application. Si la publication est une vidéo, le fournisseur doit fournir une miniature de la vidéo qui sera utilisée comme image. |
Consultez la section Caractéristiques des images pour en savoir plus. |
Contenu textuel | Facultatif | Texte principal d'une publication, d'une mise à jour, etc. | Chaîne (140 caractères max. recommandés) |
Code temporel | Facultatif | Date et heure de publication. | Code temporel de l'epoch (en millisecondes) |
est un contenu vidéo ; | Facultatif | Le post est-il une vidéo ? | booléen |
Durée de la vidéo | Facultatif | Durée de la vidéo en millisecondes. | Longue |
Métadonnées associées au profil (facultatif) | |||
Nom | Obligatoire | Nom ou identifiant du profil, par exemple "Jean Dupont", "@TeamPixel" | Chaîne (25 caractères max. recommandés) |
Avatar | Obligatoire |
Photo de profil ou avatar de l'utilisateur. image au format carré 1:1 |
Consultez la section Caractéristiques des images pour en savoir plus. |
Image supplémentaire | Facultatif |
Badge de profil (par exemple un badge de validation) image au format carré 1:1 |
Consultez la section Caractéristiques des images pour en savoir plus. |
Métadonnées liées aux interactions (facultatif) | |||
Nombre | Facultatif |
Indiquez le nombre d'interactions (par exemple, "3,7 M"). Remarque:Si les valeurs "Nombre" et "Valeur du nombre" sont fournies, la valeur "Nombre" est utilisée. |
Chaîne Taille de texte recommandée: 20 caractères maximum au total pour le nombre et l'étiquette |
Valeur de la valeur | Facultatif | Nombre d'interactions sous forme de valeur. Remarque : Fournissez la valeur de comptage au lieu du nombre si votre application ne gère pas la logique d'optimisation d'un grand nombre pour différentes tailles d'écran. Si les valeurs "Nombre" et "Valeur du nombre" sont fournies, "Nombre" est utilisé. |
Longue |
Libellé | Facultatif | Indiquez à quoi sert l'étiquette d'interaction. Par exemple : "J'aime". | Chaîne Taille de texte recommandée : 20 caractères maximum au total pour le nombre et le libellé |
Visuel | Facultatif |
Indiquez à quoi sert l'interaction. Exemple : Image montrant l'icône J'aime et les emoji. Peut fournir plusieurs images, mais il est possible qu'elles ne s'affichent pas toutes avec tous les facteurs de forme. Remarque : L'image doit être carrée (1:1). |
Consultez la section Caractéristiques des images pour en savoir plus. |
DisplayTimeWindow : définissez la période d'affichage d'un contenu sur une surface (facultatif). | |||
Code temporel de début | Facultatif |
Code temporel de l'epoch après lequel le contenu doit être affiché sur la surface. Si ce code n'est pas configuré, le contenu peut s'afficher sur la surface. |
Code temporel de l'epoch (en millisecondes) |
Code temporel de fin | Facultatif |
Code temporel de l'epoch après lequel le contenu n'est plus affiché sur la surface. Si ce code n'est pas configuré, le contenu peut s'afficher sur la surface. |
Code temporel de l'epoch (en millisecondes) |
SocialPostEntity
Attribut | Obligatoire ? | Description | Format |
---|---|---|---|
URI d'action | Obligatoire |
Lien profond vers l'entité dans l'application pour les fournisseurs. Remarque : Vous pouvez utiliser des liens profonds pour l'attribution. Consultez ces questions fréquentes. |
URI |
Métadonnées associées aux publications (obligatoire) Saisissez au moins un élément TextContent, Image ou WebContent |
|||
Image(s) | Facultatif |
Les images doivent être au format Portrait. L'UI peut n'afficher qu'une seule image lorsque plusieurs images sont fournies. Toutefois, l'interface utilisateur peut indiquer visuellement qu'il y a davantage d'images dans l'application. Si la publication est une vidéo, le fournisseur doit fournir une miniature de la vidéo qui sera utilisée comme image. |
Consultez la section Caractéristiques des images pour en savoir plus. |
Contenu textuel | Facultatif | Texte principal d'une publication, d'une mise à jour, etc. | Chaîne (140 caractères max. recommandés) |
Contenu vidéo (facultatif) | |||
Durée | Obligatoire | Durée de la vidéo en millisecondes. | Longue |
Image | Obligatoire | Image d'aperçu du contenu vidéo. | Consultez la section Caractéristiques des images pour en savoir plus. |
Aperçu du lien (facultatif) | |||
Aperçu du lien – Titre | Obligatoire | Texte indiquant le titre du contenu de la page Web | Chaîne |
Aperçu du lien – Nom d'hôte | Obligatoire | Texte indiquant le propriétaire de la page Web (par exemple "INSIDER") | Chaîne |
Aperçu du lien – Image | Facultatif | Image principale associée au contenu Web | Consultez la section Caractéristiques des images pour en savoir plus. |
Code temporel | Facultatif | Date et heure de publication. | Code temporel de l'epoch (en millisecondes) |
Métadonnées associées au profil (facultatif) | |||
Nom | Obligatoire | Nom ou identifiant du profil, par exemple "Jean Dupont", "@TeamPixel". | Chaîne (25 caractères max. recommandés) |
Texte supplémentaire | Facultatif |
Peut être utilisé comme nom ou identifiant de profil ou métadonnées supplémentaires Exemples : "@Jean-Dupont", "5 millions d'abonnés", "Vous pourriez aimer", "Tendances", "5 nouvelles publications" |
Chaîne (40 caractères max. recommandés) |
Avatar | Obligatoire |
Photo de profil ou avatar de l'utilisateur. image au format carré 1:1 |
Consultez la section Caractéristiques des images pour en savoir plus. |
Image supplémentaire | Facultatif |
Badge de profil (par exemple un badge de validation) image au format carré 1:1 |
Consultez la section Caractéristiques des images pour en savoir plus. |
Métadonnées liées aux interactions (facultatif) | |||
Nombre | Obligatoire | Indiquez le nombre d'interactions (par exemple, "3,7 M"). | Chaîne (20 caractères max. recommandés au total pour le nombre et libellé) |
Libellé |
Facultatif Le visuel doit être fourni, le cas échéant. |
Indiquez à quoi sert l'interaction. Par exemple : Mentions "J'aime". | Chaîne (20 caractères max. recommandés au total pour le nombre et libellé) |
Visuel |
Facultatif Le libellé doit être fourni, le cas échéant. |
Indiquez à quoi sert l'interaction. Exemple : image montrant l'icône J'aime et un emoji. Peut fournir plusieurs images, mais il est possible qu'elles ne s'affichent pas toutes avec tous les facteurs de forme. image au format carré 1:1 |
Consultez la section Caractéristiques des images pour en savoir plus. |
DisplayTimeWindow : définissez la période d'affichage d'un contenu sur une surface (facultatif). | |||
Code temporel de début | Facultatif |
Code temporel de l'epoch après lequel le contenu doit être affiché sur la surface. Si ce code n'est pas configuré, le contenu peut s'afficher sur la surface. |
Code temporel de l'epoch (en millisecondes) |
Code temporel de fin | Facultatif |
Code temporel de l'epoch après lequel le contenu n'est plus affiché sur la surface. Si ce code n'est pas configuré, le contenu peut s'afficher sur la surface. |
Code temporel de l'epoch (en millisecondes) |
Caractéristiques des images
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.
É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 à intervalles réguliers ou en fonction d'événements (par exemple, chaque fois que l'utilisateur ouvre l'application ou vient de suivre un nouveau compte)
AppEngageSocialClient
est responsable de la publication des clusters de réseaux sociaux.
Les API suivantes permettent de publier des clusters dans le client :
isServiceAvailable
publishRecommendationClusters
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
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
.
Un objet RecommendationCluster
peut avoir les attributs suivants :
Attribut | Obligatoire ? | Description |
---|---|---|
Liste de SocialPostEntity ou de PortraitMediaEntity | Obligatoire | Liste des entités qui forment les recommandations de ce cluster "Recommendation". Les entités d'un cluster unique doivent être du même type. |
Titre | Obligatoire | Titre du cluster "Recommandations" (par exemple, Actualité de vos amis). Taille de texte recommandée : 25 caractères maximum (si le texte est trop long, des points de suspension s'affichent) |
Sous-titre | Facultatif | Sous-titre du cluster "Recommandations". |
URI d'action | Facultatif |
Lien profond vers la page de l'application partenaire où les utilisateurs peuvent voir la liste complète des recommandations. Remarque : Vous pouvez utiliser des liens profonds pour l'attribution. Consultez ces questions fréquentes. |
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());
Lorsque le service reçoit la requête, les actions suivantes ont lieu dans une seule transaction :
- Toutes les données existantes du cluster "Recommendation" sont supprimées.
- Les données de la requête sont analysées et stockées dans de nouveaux clusters "Recommendation".
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") |
Sous-titre | Facultatif | Sous-titre facultatif sur la fiche |
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());
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 opérationnelle interne, aucun des clusters n'est publié, nous vous recommandons vivement de mettre à jour l'état de publication à l'aide de l'API 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.
- Google peut utiliser les codes d'état pour encourager l'utilisateur à effectuer certaines actions dans l'application, afin qu'il puisse afficher ou contourner le contenu de l'application.
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 vous recommande de publier la fiche de connexion. Si, pour une raison quelconque, les fournisseurs ne peuvent pas publier la fiche de connexion, nous vous recommandons d'appeler l'API updatePublishStatus avec le code d'état NOT_PUBLISHED_REQUIRES_SIGN_IN.
Kotlin
client.updatePublishStatus( PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build())
Java
client.updatePublishStatus( new PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build());
deleteRecommendationClusters
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, et 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é.
Kotlin
client.deleteClusters( DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_RECOMMENDATION) ... .build())
Java
client.deleteClusters( new DeleteClustersRequest.Builder() .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.
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 | Nom de l'erreur | Remarque |
---|---|---|
1 |
SERVICE_NOT_FOUND |
Le service n'est pas disponible sur l'appareil donné. |
2 |
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é). |
3 |
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. |
4 |
SERVICE_CALL_PERMISSION_DENIED |
L'appelant n'est pas autorisé à effectuer l'appel du service. |
5 |
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é). |
6 |
SERVICE_CALL_INTERNAL |
Une erreur s'est produite au niveau du service. |
7 |
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 deContext.registerReceiver()
. Cela permet la communication à partir d'applications restées actives en mémoire.
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));
}
- Déclarez une implémentation de manière statique avec la balise
<receiver>
dans le fichierAndroidManifest.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.
<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>
Les intents suivants sont envoyés par le service :
com.google.android.engage.action.PUBLISH_RECOMMENDATION
Nous vous recommandons de démarrer un appelpublishRecommendationClusters
lorsque vous recevez cet intent.
Workflow d'intégration
Pour vous procurer un guide par étapes sur la validation de votre intégration une fois celle-ci terminée, consultez la page Workflow d'intégration pour les développeurs d'Engage.
Questions fréquentes
Pour en savoir plus, consultez les questions fréquentes concernant le SDK Engage.
Contact
Contactez engage-developers@google.com si vous avez des questions au cours du processus d'intégration. Notre équipe vous répondra dès que possible.
Étapes suivantes
Une fois cette intégration effectuée, procédez comme suit :
- Envoyez un e-mail à l'adresse engage-developers@google.com et joignez-y votre APK intégré prêt à être testé par Google.
- 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, si aucune modification n'est nécessaire, nous vous informerons que vous pouvez commencer à publier le fichier APK mis à jour et intégré sur le Play Store.
- Une fois que Google a confirmé que votre APK mis à jour a été publié sur le Play Store, vos clusters Recommandation seront publiés et visibles par les utilisateurs.