On-Demand Services API를 사용하여 AEM Mobile용 컬렉션 및 제품 세부 정보에 액세스

요구 사항

사전 지식

요구 제품

  • Adobe AEM Mobile
  • On-Demand Services API에 대한 액세스

소개

이 문서에서는 AEM Mobile On-Demand Services API를 사용하여 제품 및 컬렉션 정보를 가져오는 방법에 대해 다룹니다. 이 정보는 직접 권한 부여 서버용 데이터를 제공하여 콘텐츠 권한을 제어하는 데 사용됩니다. AEM Mobile은 Digital Publishing Suite와 동일한 Direct Entitlement API를 사용합니다. 이는 Direct Entitlement API v2를 기반으로 하는 모든 직접 권한 부여 서비스 구현이 AEM Mobile과 호환된다는 것을 의미합니다.

내 프로젝트 설정

On-Demand Services API를 사용하여 컬렉션 및 제품 세부 정보에 액세스하려면 다음 단계를 따르십시오.

  1. On-Demand Services API 문서를 다운로드하고 On-Demand Services API .zip 파일에서 찾을 수 있는 요청 양식을 사용하여 API 키를 요청합니다.

  2. On-Demand Services SDK를 다운로드합니다. 이 SDK는 AEM Mobile을 기반으로 DPS issueList를 리빌드하는 참조 구현을 포함합니다.

  3. AEM Mobile에서 프로젝트를 설정하고, 여러 컬렉션을 게시하고, 온디맨드 포털(https://aemmobile.adobe.com)의 제품 및 구독 섹션을 사용하여 여러 컬렉션을 소매(“무료 제품” 비활성)로 구성합니다. 자세한 내용은 AEM Mobile 앱용 인앱 구매 및 구독을 참조하십시오.

  4. Adobe ID를 새로 만듭니다. 예: de_user@company.com

  5. Adobe ID “de_user@company.com”을 데이터를 가져올 프로젝트에 추가합니다. 해당 사용자에게 “아티클 및 컬렉션 정보 보기” 및 “제품 정보 보기” 권한만 부여합니다. 자세한 내용은 AEM Mobile에 대한 계정 관리를 참조하십시오.

  6. Auth Exchange Tool을 사용하여 device_id 및 device_token을 생성합니다. 이 과정에서 사용되는 Adobe ID는 API 키 요청 양식에서 지정(최대 3개)된 ID여야 합니다.

    AEX 토큰 Generator는 Enterprise 또는 Federated ID가 아닌 Adobe ID만 수용합니다. 따라서 SDK에서 Adobe ID만 사용할 수 있습니다.

  7. aemmobilesdk/configuration/credentials.php를 수정하고 변수를 업데이트하여 설정을 반영합니다.

  8. 내 프로젝트에 대한 프로젝트 ID를 구합니다. 이는 다음 두 가지 방법으로 수행할 수 있습니다.

    방법 1: 포털에서 프로젝트 ID 복사

    온디맨드 포털의 콘텐츠 및 레이아웃 섹션으로 이동합니다. 내비게이션 바의 드롭다운 목록에서 프로젝트를 선택합니다. 브라우저의 URL을 선택합니다.

    프로젝트 ID는 “/publication/” 텍스트 다음에 기재되어 있습니다. 이 샘플 URL에서는 프로젝트 ID가 다음과 같이 굵게 표시되어 있습니다.

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

    방법 2: On-Demand Services API 사용

    레시피 실행: recipe/authentication/getUserPermissions.php

    JSON 응답 데이터의 다음 경로에는 여러 프로젝트 ID가 포함될 수 있습니다. $data['masters'][#]['publications'][#]['id'];

    예를 들어 프로젝트 ID의 예인 bf8a2101-abe5-4a4b-a02e-f7d4f5502d3c를 $data['masters'][0]['publications'][2]['id']에서 찾을 수 있습니다.

레시피 제작

문제 목록을 생성하려면 제품 ID 및 컬렉션의 목록이 필요합니다. AEM Mobile SDK를 사용하여 문제 목록을 생성하기 위해 제공된 다음과 같은 레시피가 있습니다.

  • XML 피드에서: `recipes/product/genIssueList.php`
  • JSON에서: `recipes/product/genIssueListJson.php`

설정

이 단계에서는 프로젝트 ID를 설정하고, 액세스 토큰을 요청하고, 이를 PHP 세션에 저장하게 됩니다. 후자는 로컬 데이터베이스에 저장하는 것으로 변경될 수 있습니다. 액세스 토큰은 48시간 동안 유효합니다.

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

데이터베이스 버전: 위에 제시된 예의 끝 부분에서 `storeToken()`을 호출하는 대신 `getToken()`을 사용하여 액세스 토큰을 직접 입수하고 이를 데이터베이스에 저장할 수 있습니다. 이 방법을 사용하는 경우에는 데이터베이스에서 액세스 토큰을 풀링하기 위해 적절한 기능을 사용하여 aemmobile\userService\Authorization::getStoredToken()을 업데이트하십시오.

모범 사례: 액세스 토큰을 항상 저장(기본값: PHP 세션을 통해 저장)하고 만료될 때까지 이를 재사용합니다. 만료되고 나면 SDK가 자동으로 aemmobilesdk\authenticationService\ Authentication::requestToken()을 다시 호출합니다.

제품 ID 목록

이 단계에서는 제품 ID의 목록을 요청하고 이를 PHP 세션에 저장하게 됩니다. 후자는 로컬 데이터베이스에 저장하는 것으로 변경될 수 있습니다.

모범 사례: 이 단계는 별도로 실행되는 스크립트가 되도록 하십시오. 이 별도 스크립트를 호출할 복제 작업을 만들어 적절한 기간 내에서 제품 ID의 목록을 구하고 이를 저장하십시오. 이는 제품 ID를 얼마나 자주 업데이트하는가에 따라 달라집니다(예: 15분). 별도 스크립트의 예는 `recipes/product/storeProductList.php`를 참조하십시오.

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

컬렉션 목록

이 단계에서는 컬렉션의 목록을 요청하고 이를 변수 `$arrResponseMessage`에 저장하게 됩니다.

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

이 `$arrResponseMessage`는 컬렉션 엔티티 이름의 배열을 포함하게 됩니다. 게시 상태를 구하기 위한 기타 요청에 앞서 메타데이터를 구하기 위한 컬렉션 엔티티 이름별 요청을 할 필요가 있습니다.

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

이 시점에서 컬렉션 메타데이터를 통해 반복하여 전체 또는 필요한 메타데이터만 풀링할 수 있습니다. XML 또는 JSON 형식으로 데이터를 저장할 수 있으며, 속도 측면에서 볼 때 후자를 사용하는 것이 권장됩니다.

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

이미지 다운로드

이전 단계에서 메타데이터를 통해 반복하는 동안 컬렉션 엔티티가 백그라운드 및/또는 썸네일 이미지를 가지고 있고 스크립트에 이미 로컬로 다운로드되지 않은 경우에 한해 스크립트가 이미지를 다운로드하게 됩니다. 후자의 경우가 로드 시간이 더 빠릅니다.

모범 사례: 제품 ID를 처리하는 방법과 유사하게, 이미지 다운로드는 적절한 기간 내에서 최신 이미지를 다운로드하기 위한 복제 작업을 사용하는 별도 스크립트여야 합니다. 별도 스크립트의 예는 “recipes/product/downloadImages.php”를 참조하시기 바랍니다.

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

제작 시 배포

여러 프로젝트에 액세스하기 위해 위에서 만든 동일한 Adobe ID(de_user@company.com)를 다른 모든 종류의 프로젝트에 할당할 수 있습니다.

여러 고객에 대해 호스팅되는 권한 서버를 실행 중인 경우 동일한 레시피를 사용할 수 있습니다. 고객들에게 이 Adobe ID(de_user@company.com)를 프로젝트에 추가하여 호스팅되는 권한 서버가 고객으로부터 데이터에 액세스할 수 있도록 요청해야 합니다.

프로젝트에서 Adobe ID를 제거하거나 “아티클 및 컬렉션 보기” 및 “제품 정보 보기” 권한이 해지되면 더 이상 정보에 액세스할 수 없습니다.

변경 로그

2016/01/06

  • “이미지 다운로드” 섹션이 “레시피 제작”에 추가되었습니다.

이 작업에는 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License의 라이센스가 부여되었습니다.  Twitter™ 및 Facebook 게시물은 Creative Commons 약관을 적용받지 않습니다.

법적 고지 사항   |   온라인 개인 정보 보호 정책