De On-Demand Services API gebruiken voor toegang tot collectie- en productdetails voor AEM Mobile

Vereisten

Vereiste kennis

Vereiste producten

  • Adobe AEM Mobile
  • Toegang tot de On-Demand Services API

Inleiding

Dit artikel gaat over het gebruik van de AEM Mobile On-Demand Services API voor het ophalen van product- en collectiegegevens. Deze informatie kan voor het opgeven van gegevens voor directe machtigingsservers worden gebruikt om het maken van inhoud te regelen. AEM Mobile gebruikt dezelfde Direct Entitlement API als Digital Publishing Suite. Dit betekent dat elke service-implementatie voor directe machtiging die is gebaseerd op versie 2 van de Direct Entitlement API, compatibel is met AEM Mobile.

Uw project instellen

Volg de volgende stappen om de On-Demand Services API te gebruiken voor toegang tot collectie- en productdetails.

  1. Download het document On-Demand Services API en vraag een API-sleutel aan via het aanvraagformulier dat u kunt vinden in het .zip-bestand met de On-Demand Services API.

  2. Download deOn-Demand Services SDK. Deze SDK bevat een referentie-implementatie waarmee een DPS issueList opnieuw wordt gegenereerd op basis van AEM Mobile.

  3. Configureer een project in AEM Mobile, publiceer meerdere collecties en gebruik de sectie Producten en abonnementen van de on-demandportal (https://aemmobile.adobe.com) om meerdere collecties als handelsversie te configureren (“Gratis product” uitschakelen). Zie Aankopen in de app en abonnementen voor AEM Mobile-apps voor meer informatie.

  4. Maak een nieuwe Adobe ID. Voorbeeld: de_user@company.com

  5. Voeg de Adobe ID “de_user@company.com” toe aan de projecten die de gegevens ophalen. Geef deze gebruiker alleen de rechten “Artikel- en collectie-informatie weergeven” en “Productinformatie weergeven”. Zie Accountbeheer voor AEM Mobile voor meer informatie.

  6. Genereer een device_id and device_token met het gereedschap voor ontwerpuitwisseling. Zorg ervoor dat de Adobe ID's die in dit proces worden gebruikt, dezelfde zijn (maximaal 3) die zijn opgegeven in het aanvraagformulier van de API-sleutel.

    De AEX token generator accepteert alleen Adobe ID's, geen Enterprise of Federated ID's. Daarom kunt u alleen Adobe ID's met de SDK gebruiken.

  7. Pas “aemmobilesdk/configuration/credentials.php” aan en werk de variabele bij om uw instellingen te reflecteren.

  8. Haal de project-id op voor uw project. U kunt dit op twee manieren doen.

    Methode 1: de project-id van de portal kopiëren

    Navigeer naar de sectie Inhoud en Lay-out van de on-demandportal. Selecteer een project uit de vervolgkeuzelijst op de navigatiebalk. Selecteer de URL in de browser.

    De project-id wordt weergegeven na de tekst “/publication/”. In deze voorbeeld-URL is de project-id vetgedrukt:

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

    Methode 2: de On-Demand Services API gebruiken

    Voer werkwijze: recipe/authentication/getUserPermissions.php uit

    De volgende paden in de JSON-reactiegegevens kunnen meerdere project-id's bevatten: $data['masters'][#]['publications'][#]['id'];

    Bijvoorbeeld: de project-id uit het voorbeeld bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c kan worden gevonden in $data['masters'][0]['publications'][2]['id']

De werkwijze maken

Voor het genereren van een lijst met problemen hebt u een lijst met product-id's en collecties nodig. Er worden werkwijzen geleverd om de lijst met problemen te genereren met de AEM Mobile SDK:

  • In XML-feed: “recipes/product/genIssueList.php”
  • In JSON: “recipes/product/genIssueListJson.php”

Instellen

Tijdens deze stap stelt u de project-id in, vraagt u de toegangstoken aan en slaat u deze op (in PHP-sessie). Dit laatste kan worden gewijzigd zodat deze wordt opgeslagen in een lokale database. De toegangstoken is 48 uur geldig.

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

Databaseversie: in plaats van “storeToken()” aan te roepen aan het einde van het bovenstaande voorbeeld, kunt u “getToken()” gebruiken om de toegangstoken direct op te halen en op te slaan in de database. Als u deze methode gebruikt, moet u aemmobile\userService\Authorization::getStoredToken() bijwerken met de geschikte functionaliteit om het toegangstoken uit de database op te halen.

Beste werkwijze: sla de toegangstoken altijd op (standaard is via PHP-sessie) en hergebruik deze totdat de token verloopt. Wanneer de token verlopen is, roept de SDK automatisch opnieuw aemmobilesdk\authenticationService\ Authentication::requestToken() aan.

Lijst met product-id's

In deze stap vragen we een lijst met product-id's aan en slaan deze op (in PHP-sessie). Dit laatste kan worden gewijzigd zodat deze wordt opgeslagen in een lokale database.

Beste werkwijze: maak van deze stap een zelfstandig script; maak een cron-taak waarmee dit zelfstandige script wordt aangeroepen om de lijst met product-id's binnen een redelijk tijd op te halen en op te slaan. Deze tijd is afhankelijk van hoe vaak u de product-id's bijwerkt (bijvoorbeeld 15 minuten). Zie “recipes/product/storeProductList.php” voor een voorbeeld van een zelfstandig script.

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

Lijst met collecties

In deze stap vragen we een lijst met collecties aan en slaan deze op in de variabele “$arrResponseMessage”.

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

De “$arrResponseMessage” bevat een elementenset met entiteitsnamen van de collectie. U moet een aanvraag indienen per entiteitsnaam van de collectie om de metagegevens op te halen. Hierna moet u een andere aanvraag indienen om de publicatiestatus op te halen.

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

Op dit punt kunt u door de metagegevens van de collectie bladeren en alle of alleen de benodigde metagegevens ophalen. Sla de gegevens op in XML of JSON. De laatste heeft de voorkeur aangezien deze indeling sneller is.

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

De afbeeldingen downloaden

Tijdens de vorige stap, terwijl u door de metagegevens van de collectie bladert, downloadt het script de afbeeldingen alleen als de entiteit van de collectie een achtergrond- en/of miniatuurafbeelding bevat en deze nog niet lokaal naar het script is gedownload. Het laatste gedeelde van de voorwaarde is bedoeld om de laadtijd sneller te maken.

Beste werkwijze: vergelijkbaar met hoe de product-id's worden verwerkt. De afbeeldingsdownloads moeten een afzonderlijk script zijn, met een cron-taak die binnen een redelijk tijdsbestek de nieuwste afbeeldingen downloadt. Zie “recipes/product/downloadImages.php” voor een voorbeeld van een zelfstandig script.

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

Implementatie in productie

Als u meerdere projecten wilt openen, kunt u dezelfde Adobe ID die u hierboven hebt gemaakt (de_user@company.com), toewijzen aan elk andere project.

Als u een gehoste machtigingsserver uitvoert voor meerdere klanten, kunt u dezelfde werkwijze volgen. U vraagt uw klanten om de Adobe ID (de_user@company.com) toe te voegen aan hun projecten, zodat uw gehoste machtingingsserver toegang heeft tot de gegevens van de klant.

Als de Adobe ID is verwijderd uit het project of de rechten “Artikelen en collecties weergeven” en “Productinformatie” zijn ingetrokken, is de informatie voor niemand meer toegankelijk.

Wijzigingenlogboek

2016/01/06

  • De sectie “De afbeeldingen downloaden” is toegevoegd aan “De werkwijze maken”.

Dit werk is gelicentieerd onder de Creative Commons Naamsvermelding/Niet-commercieel/Gelijk delen 3.0 Unported-licentie  De voorwaarden van Creative Commons zijn niet van toepassing op Twitter™- en Facebook-berichten.

Juridische kennisgevingen   |   Online privacybeleid