Utilisation de l'interface On-Demand Services API pour accéder au détail des collections et des produits pour AEM Mobile

Configuration requise

Connaissances préalables

Produits requis

  • Adobe AEM Mobile
  • Accès à l'interface On-Demand Services API

Introduction

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.

Configuration de votre projet

Pour utiliser l’interface On-Demand Services API pour accéder au détail des collections et des produits, procédez comme suit.

  1. 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.

  2. 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.

  3. 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.

  4. Créez un nouvel Adobe ID. Exemple : de_user@company.com

  5. 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.

  6. 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.

    Le générateur de jeton AEX n'accepte que les Adobe ID, et non les Enterprise ID ni les Federated ID. Par conséquent, vous ne pouvez utiliser que des Adobe ID avec le SDK.

  7. Modifiez « aemmobilesdk/configuration/credentials.php » et mettez à jour la variable afin de refléter votre configuration.

  8. Obtenez l'ID de projet pour votre projet. Cela peut se faire de deux manières.

    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']

Création des recettes

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 »

Configuration

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().

Liste des ID du produit

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();

Liste des collections

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;
  }
}

Téléchargement des images

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;
  }
}

Déploiement en production

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.

Journal des modifications

2016/01/06

  • Une section « Téléchargement des images » a été ajoutée à « Création des recettes ».

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne