On-Demand Services API を使用して AEM Mobile のコレクションおよび製品の詳細にアクセスする

必要条件

前提知識

  • AEM Mobile について理解していること
  • オンデマンドポータルでのコンテンツの作成および公開に関する知識があること
  • On-Demand Services API の使用経験があること
  • Direct Entitlement API v2 に精通していること

必要な製品

  • 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 には、DPS の issueList を AEM Mobile をベースに再構築するリファレンスの実装が備わっています。

  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 キーのリクエストフォームで指定した ID(最大 3 個)にしてください。

    AEX Token Generator では、Adobe ID のみを使用できます。Enterprise ID や Federated ID は使用できません。このため、Adobe ID は SDK でのみ使用できます。

  7. 「aemmobilesdk/configuration/credentials.php」を修正し、設定を反映するように変数を更新します。

  8. プロジェクトのプロジェクト ID を取得します。これを行う方法は 2 通りあります。

    方法 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 セッション内に)格納します。格納先はローカルデータベースに変更することもできます。

ベストプラクティス:この手順をスタンドアロンのスクリプトにします。このスタンドアロンスクリプトを呼び出す cron ジョブを作成し、製品 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 の処理と同様に、画像のダウンロードはスタンドアロンのスクリプトで、適切な時間枠内に最新の画像をダウンロードする cron ジョブとともに実行する必要があります。スタンドアロンスクリプトのサンプルについては、'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 の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー