Verwenden der On-Demand Services API, um Zugriff auf Details zu Sammlungen und Produkten für AEM Mobile zu erhalten

Anforderungen

Grundlagen

Erforderliche Produkte

  • Adobe AEM Mobile
  • Zugriff auf die On-Demand Services API

Einführung

In diesem Artikel wird die Verwendung der AEM Mobile On-Demand Services API zum Abrufen von Produkt- und Sammlungsinformationen behandelt. Mithilfe dieser Informationen können Daten für Server für die direkte Berechtigung bereitgestellt werden, um die Autorisierung von Inhalten zu steuern. AEM Mobile verwendet die gleiche Direct Entitlement API wie Digital Publishing Suite. Dies bedeutet, dass jede Implementierung eines Diensts für direkte Berechtigung, der auf der Direct Entitlement API, Version 2, basiert, mit AEM Mobile kompatibel ist.

Einrichten des Projekts

Führen Sie die folgenden Schritte aus, um mit der On-Demand Services API auf Details zu Sammlungen und Produkten zuzugreifen.

  1. Laden Sie das Dokument für die On-Demand Services API herunter und fordern Sie über das Anforderungsformular in der ZIP-Datei für die On-Demand Services API einen API-Schlüssel an.

  2. Laden Sie das On-Demand Services SDK herunter. Das SDK enthält eine Referenzimplementierung, mit der eine DPS-issueList auf Grundlage von AEM Mobile erneut erstellt wird.

  3. Richten Sie ein Projekt in AEM Mobile ein, veröffentlichen Sie mehrere Sammlungen und konfigurieren Sie im Abschnitt „Produkte und Abonnements“ des On-Demand-Portals (https://aemmobile.adobe.com) mehrere Sammlungen als für den Handel bestimmt (deaktivieren Sie „Kostenloses Produkt“). Weitere Informationen finden Sie unter In-App-Käufe und -Abonnements in AEM Mobile.

  4. Neue Adobe ID erstellen. Beispiel: de_user@company.com

  5. Fügen Sie die Adobe ID „de_user@company.com“ zu den Projekten hinzu, die die Daten abrufen. Gewähren Sie für diesen Benutzer nur die Berechtigungen für „Artikel- und Sammlungsinformationen anzeigen“ und „Produktinformationen anzeigen“. Weitere Informationen finden Sie unter Kontoverwaltung für AEM Mobile.

  6. Generieren Sie device_id und device_token mithilfe des Auth Exchange-Werkzeugs. Achten Sie darauf, dass es sich bei den für dieses Verfahren verwendeten Adobe IDs um die im Anforderungsformular für den API-Schlüssel angegebenen IDs handelt (maximal drei IDs).

    Der AEX-Tokengenerator akzeptiert nur Adobe IDs, keine Enterprise IDs oder Federated IDs. Sie können daher nur Adobe IDs mit dem SDK verwenden.

  7. Ändern Sie „aemmobilesdk/configuration/credentials.php“ und aktualisieren Sie die Variable entsprechend Ihrer Konfiguration.

  8. Rufen Sie die Projekt-ID für Ihr Projekt ab. Hierfür haben Sie zwei Möglichkeiten.

    Methode 1: Kopieren der Projekt ID aus dem Portal

    Navigieren Sie zum Abschnitt „Inhalt und Layouts“ im On-Demand-Portal. Wählen Sie ein Projekt aus der Dropdownliste in der Navigationsleiste. Markieren Sie die URL im Browser.

    Die Projekt-ID folgt nach „/publication/“. In dieser Beispiel-URL ist die Projekt-ID fett hervorgehoben:

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

    Methode 2: Über die On-Demand Services API

    Führen Sie das Skript „recipe/authentication/getUserPermissions.php“ aus.

    Die folgenden Pfade in den JSON-Antwortdaten können mehrere Projekt-IDs enthalten: $data['masters'][#]['publications'][#]['id'];

    Beispielsweise befindet sich die Projekt-ID „bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c“ unter $data['masters'][0]['publications'][2]['id'].

Erstellen des Skripts

Um die Ausgabeliste zu erstellen, benötigen Sie eine Liste von Produkt-IDs und Sammlungen. Zum Generieren der Ausgabeliste mit dem AEM Mobile SDK werden Skripts bereitgestellt:

  • Im XML-Feed: recipes/product/genIssueList.php
  • In JSON: recipes/product/genIssueListJson.php

Einrichten

In diesem Schritt legen Sie die Projekt-ID fest, fordern das Zugriffstoken an und speichern es (in der PHP-Sitzung). Diese kann auch geändert werden, sodass in der lokalen Datenbank gespeichert wird. Das Zugriffstoken ist 48 Stunden lang gültig.

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

Datenbankversion: Anstatt „storeToken()“ am Ende des Beispiels oben aufzurufen, können Sie das Zugriffstoken mit „getToken()“ direkt abrufen und in der Datenbank speichern. Wenn Sie dieses Verfahren verwenden, aktualisieren Sie „aemmobile\userService\Authorization::getStoredToken()“ mit den entsprechenden Funktionen, um das Zugriffstoken aus der Datenbank abzurufen.

Bewährtes Verfahren: Speichern Sie das Zugriffstoken immer (standardmäßig über die PHP-Sitzung) und verwenden Sie es, bis es abläuft. Nachdem es abgelaufen ist, ruft das SDK automatisch erneut „aemmobilesdk\authenticationService\ Authentication::requestToken()“ auf.

Liste der Produkt-IDs

In diesem Schritt wird eine Liste von Produkt-IDs angefordert und gespeichert (in der PHP-Sitzung). Diese kann auch geändert werden, sodass in der lokalen Datenbank gespeichert wird.

Bewährtes Verfahren: Erstellen Sie für diesen Schritt ein eigenständiges Skript. Erstellen Sie einen Cron-Auftrag, der dieses eigenständige Skript aufruft, um die Liste der Produkt-IDs innerhalb eines angemessenen Zeitraums abzurufen und zu speichern. Dies ist abhängig davon, wie häufig die Produkt-IDs aktualisiert werden (z. B. 15 Minuten). Unter „recipes/product/storeProductList.php“ finden Sie ein unabhängiges Beispielskript.

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

Liste der Sammlungen

In diesem Schritt wird eine Liste von Sammlungen angefordert und in der Variablen „$arrResponseMessage“ gespeichert.

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

„$arrResponseMessage“ enthält ein Array mit Sammlungsentitätsnamen. Sie müssen für jeden Sammlungsentitätsnamen eine Anforderung senden, um die jeweiligen Metadaten abzurufen. Danach müssen Sie eine weitere Anforderung senden, um den Veröffentlichungsstatus abzurufen.

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

Jetzt können Sie die Sammlungsmetadaten durchlaufen und alle oder nur die erforderlichen Metadaten abrufen. Speichern Sie die Daten im XML- oder JSON-Format. JSON wird empfohlen, da dies die schnellere Option darstellt.

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

Herunterladen der Bilder

Im vorherigen Schritt lädt das Skript beim Durchlaufen der Sammlungsmetadaten die Bilder nur dann herunter, wenn die Sammlungsentität über ein Hintergrund- und/oder über ein Miniaturbild verfügt und noch nicht lokal in das Skript heruntergeladen wurde. Durch diese letzte Bedingung soll der Ladevorgang beschleunigt werden.

Bewährtes Verfahren: Entsprechend dem Verfahren für die Produkt-IDs sollten Bilddownloads ein eigenständiges Skript mit einem Cron-Auftrag sein, um die aktuellen Bilder in einem angemessenen Zeitraum herunterzuladen. Unter „recipes/product/downloadImages.php“ finden Sie ein unabhängiges Beispielskript.

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

Bereitstellung in der Produktion

Um auf mehrere Projekte zuzugreifen, können Sie die Adobe ID, die Sie oben erstellt haben (de_user@company.com), einem anderen Projekt zuweisen.

Wenn Sie einen gehosteten Berechtigungsserver für mehrere Kunden ausführen, können Sie das gleiche Skript verwenden. Sie müssen Ihre Kunden bitten, die Adobe ID (de_user@company.com) ihren Projekten hinzuzufügen, damit Ihr gehosteter Berechtigungsserver auf die Daten des Kunden zugreifen kann.

Wenn die Adobe ID aus dem Projekt entfernt wird oder die Berechtigungen für „Artikel und Sammlung anzeigen“ und „Produktinformationen anzeigen“ widerrufen werden, kann auf die Informationen nicht mehr zugegriffen werden.

Änderungsprotokoll

06.01.2016

  • Unter „Erstellen des Skripts“ wurde der Abschnitt „Herunterladen der Bilder“ hinzugefügt.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie