Grundlagen
- Grundlagen von AEM Mobile
- Grundlagen des Erstellens und Veröffentlichens von Inhalten über das On-Demand-Portal
- Erfahrung mit der On-Demand Services API
- Erfahrung mit der Direct Entitlement API, Version 2
Erforderliche Produkte
- Adobe AEM Mobile
- Zugriff auf die On-Demand Services API
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.
Führen Sie die folgenden Schritte aus, um mit der On-Demand Services API auf Details zu Sammlungen und Produkten zuzugreifen.
-
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.
-
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.
-
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.
-
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.
-
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).
-
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'].
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
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.
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();
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; } }
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; } }
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.