Uso de la On-Demand Services API para acceder a los detalles de la colección y del producto de AEM Mobile

Requisitos

Conocimientos previos necesarios

Productos requeridos

  • Adobe AEM Mobile
  • Acceso a la On-Demand Services API

Introducción

Este artículo versa acerca del uso de On-Demand Services API de AEM Mobile para acceder a la información del producto y de la colección. Esta información se puede utilizar para proporcionar datos a los servidores de asignación directa de derechos con el fin de controlar la autorización relativa al contenido. AEM Mobile emplea la misma Direct Entitlement API que Digital Publishing Suite. Esto significa que cada implementación del servicio de asignación directa de derechos que se basa en la Direct Entitlement API v2 es compatible con AEM Mobile.

Configuración del proyecto

Para utilizar la On-Demand Services API y acceder a la colección y a los detalles del producto, siga estos pasos.

  1. Descargue el documento On-Demand Services API y solicite una clave de API mediante el formulario de solicitud que se encuentra en el archivo .zip de On-Demand Services API.

  2. Descargue On-Demand Services SDK. Este SDK tendrá una implementación de referencia que volverá a crear un parámetro issueList de DPS basado en AEM Mobile.

  3. Defina un proyecto en AEM Mobile, publique varias colecciones y utilice la sección Productos y suscripciones de On-Demand Portal (https://aemmobile.adobe.com) para configurar varias colecciones como minoristas (desactive “Producto gratis”). Para obtener más información, consulte Compras y suscripciones dentro de las aplicaciones en AEM Mobile.

  4. Cree un nuevo Adobe ID. Ejemplo: de_user@company.com

  5. Añada el Adobe ID “de_user@company.com” a los proyectos que recuperarán los datos. Para ese usuario, solo conceda permisos para “Ver información de artículo y colección” y a “Ver información del producto”. Para obtener más información, consulte Administración de cuentas de AEM Mobile.

  6. Genere un device_id y un device_token mediante la Auth Exchange Tool. Asegúrese de que los Adobe ID utilizados en este proceso sean (máximo de 3) los que se especificaron en el formulario de solicitud de la clave de API.

    El generador de autentificador de AEX solo acepta los Adobe ID, no los Enterprise ID ni los Federated ID. Por lo tanto, solo se pueden utilizar los Adobe ID con el SDK.

  7. Modifique “aemmobilesdk/configuration/credentials.php” y actualice la variable para que refleje su configuración.

  8. Obtenga el ID de proyecto para su proyecto. Puede hacerlo de dos formas.

    Método 1: Copia del ID de proyecto desde el portal

    Vaya a la sección Contenido y diseños del portal a petición. Seleccione un proyecto de la lista desplegable de la barra de navegación. Seleccione la URL en el navegador.

    El ID de proyecto se muestra después del texto “/publication/”. En esta URL de ejemplo, el ID de proyecto está marcado en negrita:

    https://aemmobile.adobe.com/content/index.html#/publication/bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c/content

    Método 2: Mediante la On-Demand Services API

    Fórmula de ejecución: recipe/authentication/getUserPermissions.php

    Las siguientes rutas de los datos de la respuesta JSON pueden contener varios ID de proyecto: $data['masters'][#]['publications'][#]['id'];

    Por ejemplo, el ID de proyecto bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c se encuentra en $data['masters'][0]['publications'][2]['id'].

Creación de la fórmula

Para generar la lista de problemas, necesitará una lista de ID de productos y colecciones. Existen fórmulas proporcionadas para generar la lista de números con el AEM Mobile SDK:

  • En la fuente XML: “recipes/product/genIssueList.php”
  • En JSON: “recipes/product/genIssueListJson.php”

Configuración

En este paso, establecerá el ID del proyecto, solicitará el autentificador de acceso y lo almacenará (en la sesión de PHP). Estos ID se pueden cambiar para almacenarlos en una base de datos local. El autentificador de acceso es válido durante 48 horas.

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

Versión de la base de datos: En lugar de llamar “storeToken()” al final del ejemplo anterior, puede utilizar “getToken()” para obtener el autentificador de acceso directamente y almacenarlo en la base de datos. Si utiliza este método, actualice aemmobile\userService\Authorization::getStoredToken() con la funcionalidad correspondiente para obtener el autentificador de acceso de la base de datos.

Práctica recomendada: almacene siempre el autentificador de acceso (el valor predeterminado se obtiene a través de la sesión de PHP) y vuelva a utilizarlo hasta que caduque. Una vez caducado, el SDK reclamará automáticamente aemmobilesdk\authenticationService\Authentication::requestToken().

Lista de ID de productos

En este paso, solicitaremos una lista de ID de productos y la guardaremos (en la sesión de PHP). Estos ID se pueden cambiar para almacenarlos en una base de datos local.

Práctica recomendada: Convierta este paso en un script independiente; cree un trabajo cron que llame a este script para obtener y almacenar la lista de ID de productos en un plazo de tiempo razonable. Esto dependerá de la frecuencia con la que se actualizarán los ID de productos (por ejemplo, 15 minutos). Consulte “recipes/product/storeProductList.php” para ver un ejemplo de un script independiente.

// initialize product object 
$objPublishProduct = new Product($objPublishUser); 
// request and store the list of product IDs WRT the account
$objPublishProduct->requestList()->storeList();

Lista de colecciones

En este paso, solicitaremos una lista de colecciones y la guardaremos en la variable “$arrResponseMessage”.

// initialize collection object 
$objPublishCollection = new Collection($objPublishUser); 
// get list of collections WRT the account 
$arrResponseMessage =
$objPublishCollection->requestList()->getResponse();

El “$arrResponseMessage” contendrá una matriz de nombres de entidad de la colección. Deberá hacer una solicitud por nombre de entidad de la colección para conseguir sus metadatos, seguida de otra solicitud para obtener el estado de publicación.

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

En este punto, puede procesar una iteración por los metadatos de la colección y extraer todo o solo los metadatos necesarios. Almacena los datos en XML o JSON. Es preferible el último, ya que es más rápido.

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

Descarga de imágenes

Durante el paso anterior, mientras procesa una iteración por los metadatos de la colección, el script descargará las imágenes, solo y exclusivamente, si la entidad de la colección tiene una imagen de fondo o de miniatura y no se ha descargado en el equipo local en el script. La última parte de la condición es que el tiempo de carga sea más rápido.

Práctica recomendada: De manera similar a cómo se gestionan los ID de productos, las descargas de imágenes deben ser un script independiente, con un trabajo cron que permita descargar las últimas imágenes en un plazo de tiempo razonable. Consulte “recipes/product/downloadImages.php” para ver un ejemplo de un script independiente.

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

Implementación en la producción

Para tener acceso a varios proyectos, puede asignar el mismo Adobe ID que ha creado anteriormente (de_user@company.com) a cualquier otro proyecto.

Si está utilizando un servidor de asignación de derechos alojado para varios clientes, puede seguir la misma fórmula. Debe pedir a los clientes que añadan el Adobe ID (de_user@company.com) a los proyectos, para que su servidor de asignación de derechos alojado pueda acceder a los datos del cliente.

Si el Adobe ID se elimina del proyecto o se revocan los permisos para “Ver artículos y colección” y “Ver información de productos”, la información dejará de ser accesible.

Registro de cambios

2016/01/06

  • Se añadió la sección “Descarga de imágenes” a “Creación de la fórmula”.

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea