Usar a On-Demand Services API para acessar detalhes da coleção e do produto do AEM Mobile

Requisitos

Conhecimento necessário

Produtos necessários

  • Adobe AEM Mobile
  • Acesso à On-Demand Services API

Introdução

Este artigo fala sobre o uso da AEM Mobile On-Demand Services API para recuperar informações do produto e da coleção. Essas informações podem ser usadas para fornecer dados aos servidores de direito direto controlarem a autorização por conteúdo. O AEM Mobile usa a mesma Direct Entitlement API que a Digital Publishing Suite. Isso significa que cada implementação do serviço de direito direto que tem como base a Direct Entitlement API v2 é compatível com o AEM Mobile.

Configuração do projeto

Para usar a On-Demand Services API para acessar detalhes da coleção e do produto, siga estas etapas.

  1. Baixe o documento On-Demand Services API e solicite uma chave de API usando o formulário de solicitação encontrado no arquivo .zip On-Demand Services API.

  2. Baixe o On-Demand Services SDK. Esse SDK terá uma implementação de referência que recompila um issueList do DPS com base no AEM Mobile.

  3. Configure um projeto no AEM Mobile, publique várias coleções e use a seção Produtos e assinaturas do portal sob demanda (https://aemmobile.adobe.com) para configurar várias coleções como varejo (desative “Produto gratuito”). Para obter mais detalhes, consulte Compras no aplicativo e assinaturas para os aplicativos AEM Mobile.

  4. Crie uma nova Adobe ID. Exemplo: de_user@company.com

  5. Adicione a Adobe ID 'de_user@company.com' aos projetos que recuperarão os dados. Para esse usuário, conceda apenas as permissões “Visualizar informações sobre o artigo e a coleção“ e “Visualizar informações sobre o produto”. Para obter mais detalhes, consulte Administração de contas do AEM Mobile.

  6. Gere um device_id e um device_token usando a ferramenta de autenticação do Exchange. Certifique-se de que a Adobe ID usada neste processo seja aquela (no máximo 3) que foi especificada no formulário de solicitação de chave de API.

    O gerador de token AEX aceita somente Adobe ID, não Enterprise ou Federated IDs. Portanto, você pode usar somente Adobe IDs com o SDK.

  7. Modifique “aemmobilesdk/configuration/credentials.php” e atualize a variável para refletir sua configuração.

  8. Obtenha a ID do projeto para o seu projeto. Isso pode ser feito de duas maneiras.

    Método 1: Copiando a ID do projeto do Portal

    Navegue até a seção Conteúdo e layouts do portal sob demanda. Selecione um projeto na lista suspensa na barra de navegação. Selecione o URL no navegador.

    A ID do projeto é listada depois do texto '/publication/'. Nesse URL da amostra, a ID do projeto está em negrito:

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

    Método 2: Usando a On-Demand Services API

    Fórmula de execução: recipe/authentication/getUserPermissions.php

    Os seguintes caminhos nos dados de resposta JSON podem conter várias IDs do projeto: $data['masters'][#]['publications'][#]['id'];

    Por exemplo, a ID do projeto bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c de exemplo é encontrada em $data['masters'][0]['publications'][2]['id']

Criação da fórmula

Para gerar a lista de edições, você precisará de uma lista de IDs de produto e coleções. Há fórmulas fornecidas para gerar a lista de edições usando o AEM Mobile SDK:

  • No feed XML: `recipes/product/genIssueList.php`
  • Em JSON: `recipes/product/genIssueListJson.php`

Configuração

Nessa etapa, você definirá a ID do projeto, solicitará o token de acesso e o armazenará (na sessão do PHP). O último pode ser alterado para armazenar em um banco de dados local. O token de acesso é válido por 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();

Versão do banco de dados: em vez de chamar 'storeToken()' no final do exemplo anterior, você pode usar 'getToken()' para obter o token de acesso diretamente e armazená-lo no banco de dados. Se você usar este método, atualize aemmobile\userService\Authorization::getStoredToken() com a funcionalidade apropriada para obter o token de acesso do banco de dados.

Melhores práticas: sempre armazene o token de acesso (o padrão é por meio da sessão do PHP) e reutilize-o até expirar. Uma vez expirado, o SDK repetirá automaticamente a chamada aemmobilesdk\authenticationService\ Authentication::requestToken().

Lista de IDs de produto

Nesta etapa, solicitaremos uma lista de IDs de produto e vamos armazená-la (na sessão do PHP). O último pode ser alterado para armazenar em um banco de dados local.

Melhores práticas: faça desta etapa um script autônomo; crie uma tarefa de cron que chame este script autônomo para obter e armazenar a lista de IDs de produtos em um período de tempo razoável. Isso depende da frequência com que você estará atualizando os IDs de produto (por exemplo, 15 minutos). Consulte 'recipes/product/storeProductList.php' para um script autônomo do exemplo.

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

Lista de coleções

Nesta etapa, solicitaremos uma lista de coleções e vamos armazená-la na variável '$arrResponseMessage'.

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

'$arrResponseMessage' conterá uma matriz de nomes de entidade da coleção. Você precisará fazer uma solicitação por nome de entidade da coleção para obter seus metadados, seguido por outra solicitação para obter o status de publicação.

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

Neste ponto, você pode interagir com os metadados da coleção e extrair todos ou somente os metadados necessários. Armazene os dados em XML ou JSON, os últimos seriam por mais preferíveis por serem mais rápidos.

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

Download de imagens

Durante a etapa anterior, ao interagir com os metadados da coleção, o script baixará as imagens se e somente se a entidade da coleção tiver um plano de fundo e/ou uma imagem em miniatura, e já não tiver sido baixada localmente no script. A última parte da condição é deixar o tempo de carregamento mais rápido.

Melhores práticas: semelhante a como os IDs de produto são tratados, os downloads de imagem devem ser um script autônomo, com uma tarefa de cron para baixar as imagens mais recentes em um período de tempo razoável. Consulte 'recipes/product/downloadImages.php' para um script autônomo de exemplo.

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

Implantação na produção

Para acessar vários projetos, você pode atribuir a mesma Adobe ID que você criou acima (de_user@company.com) a qualquer outro projeto.

Se você estiver executando um servidor de direito hospedado para vários clientes, é possível seguir a mesma fórmula. Você pediria que seus clientes adicionassem a Adobe ID (de_user@company.com) aos projetos assim que o servidor de direito hospedado pudesse acessar os dados do cliente.

Se a Adobe ID estiver removida do projeto ou as permissões para “Visualizar artigos e a coleção” e “Visualizar informações sobre o produto” estiverem revogadas, as informações não estarão mais acessíveis.

Log de alterações

2016/01/06

  • Uma seção “Download de imagens” foi adicionada à seção “Criação da fórmula”.

Esta obra está licenciada sob uma licença não adaptada da Creative Commons Attribution-Noncommercial-Share Alike 3.0  As publicações do Twitter™ e do Facebook não são cobertas pelos termos do Creative Commons.

Avisos legais   |   Política de privacidade online