Connaissances préalables
- Compréhension d'AEM Mobile
- Maîtrise du processus de création et de publication de contenu via le portail à la demande
- Expérience avec l'interface On-Demand Services API
- Connaissance de l'Direct Entitlement API v2
Produits requis
- Adobe AEM Mobile
- Accès à l'interface On-Demand Services API
Cet article explique l'utilisation de l'interface AEM Mobile On-Demand Services API pour extraire les informations sur le produit et la collection. Ces informations peuvent être utilisées pour fournir des données aux serveurs de droits directs pour le contrôle de l'autorisation de contenu. AEM Mobile utilise la même interface Direct Entitlement API que Digital Publishing Suite. Cela signifie que chaque implémentation de service de droits directs basée sur l'interface Direct Entitlement API v2 fonctionne sur AEM Mobile.
Pour utiliser l’interface On-Demand Services API pour accéder au détail des collections et des produits, procédez comme suit.
-
Téléchargez le document On-Demand Services API et demandez une clé d'API en renseignant le formulaire inclus dans le fichier .zip de l'interface On-Demand Services API.
-
Téléchargez le On-Demand Services SDK. Ce SDK aura une implémentation de référence qui va reconstituer une issueList DPS basée sur AEM Mobile.
-
Configurez un projet dans AEM Mobile, publiez différentes collections et utilisez la section Produits et abonnements du portail à la demande (https://aemmobile.adobe.com) pour configurer plusieurs collections comme étant payantes (en désactivant l'option « Produit gratuit »). Pour plus d'informations, reportez-vous à la page Options d’achat et d’abonnement intégrées pour les applications AEM Mobile.
-
Ajoutez l'Adobe ID « de_user@company.com » aux projets qui extrairont les données. Pour cet utilisateur, accordez uniquement les autorisations « Voir les informations sur l'article et la collection » et « Voir les informations sur le produit ». Pour plus d'informations, reportez-vous à la page Administration de comptes pour AEM Mobile.
-
Générez un ID de périphérique (device_id) et un jeton de périphérique (device_token) à l'aide de l'outil d'échange d'authentification. Assurez-vous que l'Adobe ID utilisé dans ce processus correspond à l'un des ID (maximum 3) spécifiés dans le formulaire de demande de clé d'API.
-
Méthode 1 : copie de l'ID de projet depuis Portal
Accédez à la section Contenus et mises en page du portail à la demande. Sélectionnez un projet dans la liste déroulante dans la barre de navigation. Sélectionnez l'URL dans le navigateur.
L'ID de projet est répertorié après le texte « /publication/ ». Dans cet exemple d'URL, l'ID de projet est en gras :
https://aemmobile.adobe.com/content/index.html#/publication/bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c/content
Méthode 2 : à l'aide de l'interface On-Demand Services API
Exécutez la recette : recipe/authentication/getUserPermissions.php
Les chemins suivants dans les données de réponse JSON peuvent contenir plusieurs ID de projet : $data['masters'][#]['publications'][#]['id'];
Par exemple, l'exemple d'ID de projet bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c se trouve dans $data['masters'][0]['publications'][2]['id']
Pour générer une liste de problèmes, vous devez disposer d'une liste des ID du produit et des collections. Il existe des recettes fournies pour générer la liste de problèmes en utilisant le SDK AEM Mobile :
- Dans le flux XML : « recipes/product/genIssueList.php »
- Dans JSON : « recipes/product/genIssueListJson.php »
Au cours de cette étape, vous allez définir l'ID de projet, demander un jeton d'accès et le stocker (dans la session PHP). Vous pouvez modifier cette session afin de le stocker dans une base de données locale. Le jeton d'accès est valable pendant 48 heures.
$currentDir = dirname(__FILE__); $parentDir = dirname($currentDir); $grandParentDir = dirname($parentDir); // include the AEM Mobile On-Demand Services SDK require_once($grandParentDir . '/aemmobilesdk/vendor/autoload.php'); use aemmobilesdk\contentService\Collection; use aemmobilesdk\productService\Product; use aemmobilesdk\userService\User; // provide the publication GUID $strPublicationGuid = ''; // initialize the user object $objPublishUser = new User(); // set the publication GUID $objPublishUser->setPublicationGuid($strPublicationGuid); // request and store the access token $objPublishUser->requestToken()->storeToken();
Version base de données : plutôt que d'appeler la fonction « storeToken() » à la fin de l'exemple ci-dessus, vous pouvez utiliser la fonction « getToken() » pour obtenir le jeton d'accès directement et le stocker dans la base de données. Si vous utilisez cette méthode, mettez à jour aemmobile\userService\Authorization::getStoredToken() avec la fonctionnalité appropriée afin d'extraire le jeton d'accès de la base de données.
Recommandé : stockez toujours le jeton d'accès (par défaut via la session PHP) et réutilisez-le jusqu'à ce qu'il expire. Lorsque le jeton a expiré, le SDK rappelle automatiquement aemmobilesdk\authenticationService\ Authentication::requestToken().
Au cours de cette étape, vous allez demander une liste des ID du produit et la stocker (dans la session PHP). Vous pouvez modifier cette session afin de la stocker dans une base de données locale.
Recommandé : faites que cette étape soit un script autonome, créez une tâche cron qui appellera ce script autonome afin d'obtenir et de stocker la liste des ID du produit dans un délai raisonnable. Cela dépend de la fréquence à laquelle vous mettrez à jour les ID du produit (par exemple, toutes les 15 minutes). Pour un exemple de script autonome, consultez « recipes/product/storeProductList.php ».
// initialize product object $objPublishProduct = new Product($objPublishUser); // request and store the list of product IDs WRT the account $objPublishProduct->requestList()->storeList();
Au cours de cette étape, vous aller demander une liste des collections et la stocker dans la variable « $arrResponseMessage ».
// initialize collection object $objPublishCollection = new Collection($objPublishUser); // get list of collections WRT the account $arrResponseMessage = $objPublishCollection->requestList()->getResponse();
La variable « $arrResponseMessage » contient le tableau des noms des entités de collection. Vous devez envoyer une requête par nom d'entité de collection afin d'obtenir ses métadonnées, suivie par une autre requête pour obtenir son état de publication.
// iterate the list of collection entity names foreach ($arrResponseMessage as $collection) { // set the collection entity name $objPublishCollection->setIdFromHref($collection['href']); // get the collection metadata $arrCollectionData = $objPublishCollection->requestMetadata()->getResponse(); // get the collection publishing status $bolPublishStatus = $objPublishCollection->requestStatus()->getPublishStatus(); }
À ce stade, vous pouvez réaliser une itération sur les métadonnées de la collection et extraire tout ou uniquement les métadonnées nécessaires. Stockez les données au format XML ou JSON, ce dernier étant préférable car plus rapide.
foreach ($arrCollectionData as $strAttribute => $arrValue) { switch ($strAttribute) { case 'entityName': // store the entityName break; case 'department': // store the departments break; ... // add as many case as necessary default: // either store value as is or not at all break; } }
Lors de l'étape précédente, lors de l'itération sur les métadonnées de la collection, le script télécharge les images si, et seulement si, l'entité de collection a une image d'arrière-plan et/ou une vignette et n'a pas déjà été téléchargée localement dans le script. La dernière partie de la condition est de raccourcir le temps de chargement.
Recommandé : comme pour la gestion des ID du produit, les téléchargements d'image doivent être faits dans un script autonome, avec une tâche cron pour télécharger les dernières images dans un délai raisonnable. Pour un exemple de script autonome, consultez « recipes/product/downloadImages.php ».
foreach ($arrCollectionData as $strAttribute => $arrValue) { switch ($strAttribute) { case '_links': // collection links foreach ($arrValue as $strInnerAttr => $arrInnerValue) { switch ($strInnerAttr) { case 'thumbnail': case 'background': // the image link is located in: // $strInnerValue['href'] // i.e. contents/images/background // you can request the image by replacing "contents" with // the collection entity content URL and making a HTTP GET request break; } } break; } }
Pour accéder à plusieurs projets, vous pouvez attribuer le même Adobe ID créé ci-dessus (de_user@company.com) à d'autres projets.
Si vous utilisez un serveur de droits hébergé pour plusieurs clients, vous pouvez suivre la même recette. Vous devez demander à vos clients d'ajouter l'Adobe ID (de_user@company.com) à leurs projets afin que votre serveur de droits hébergé puisse accéder aux données du client.
Si l'Adobe ID est supprimé du projet ou si les autorisations « Voir les informations sur l'article et la collection » et « Voir les informations sur le produit » sont retirées, les informations ne seront plus accessibles.