必要条件

前提知識

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

必要な製品

  • AEM Mobile
  • API キー
  • On-Demand Services API へのアクセス

 

はじめに

PHP 用の Experience Manager Mobile On-Demand Services SDK は、サードパーティの開発者による On-Demand Services API(旧称「Content Producer Service API」)との統合を簡単にするライブラリです。

SDK により、PHP 開発者は様々なオーバーヘッドを管理できます。これには、ベストプラクティス、エラーのフェールセーフ、マイナーではあるが重要なガイドライン(API リクエストごとの適切なヘッダーの設定など)などがあります。

PHP 用の On-Demand Services SDK のダウンロード

注意:

下記のソフトウェアをダウンロードすると、Experience Manager Mobile Services 用 API のライセンスAdobe.com の利用条件アドビのプライバシーポリシーの条件を読んで同意したものとみなされます。

ダウンロード

最新の変更の一覧については、このドキュメントの最後の変更ログを参照してください。

概念について

On-Demand Services API では承認済みアクセスが必要なため、先に進む前に、次のセクションを完全に理解することが重要です。

認証

On-Demand Services API を使用して行った各クライアント(HTTPS)のリクエストについて、リクエストヘッダーに次の情報を指定する必要があります。

  • X-Dps-Api-Key: {{client_id}}
  • Authorization: Bearer {{access token}}

API キーによりクライアントに On-Demand Services API へのアクセス権が付与され、アクセストークンによりクライアントアカウントが識別されます。

API キーをリクエストするには、On-Demand Services API に関するドキュメントを表示し、ドキュメントに記載されたリクエストフォームをダウンロードして記入します。

API キーを受け取った後、アクセストークンを生成できるようになります。アクセストークンを生成するには、以下の手順を実行します。

  1. AEX Device Token Generator に移動します。
  2. 有効なクライアント ID を入力します。
  3. 有効な Adobe ID でログインします。
  4. 成功すると、デバイス ID とデバイストークンが生成されます。
  5. クライアント ID、デバイス ID、デバイストークンを使って API リクエストを実行し、アクセストークンを生成します。

認証に関する注意事項:

  • アクセストークンは 24 時間で有効期限が切れます。
  • デバイス ID とデバイストークンは、使用中である限り自動更新されます。必要に応じて、クライアントはデバイス ID およびトークンを使って新しいアクセストークンを生成できます。
  • デバイス ID とデバイストークンは、それらを生成するために使用したアカウントのパスワードを変更すると無効になります。この場合、デバイス ID とデバイストークンの新しいセットを生成してください。

 

承認

API キーリクエストのプロセスでは、AEX Device Token Generator へのアクセスが許可される最大 3 つの Adobe ID をリクエストできます。これは、プロジェクトにアクセスするには、最大 3 つの Adobe ID しか使用できないことを意味します。ただし、新しいロールおよび権限を使用すれば、Adobe ID を任意の数のプロジェクトに追加できます。

例えば、アカウント A、B、C にプロジェクトがある場合、アカウント A をアカウント B および C のプロジェクトに追加できます。この方法では、アカウント A のデバイス ID とデバイストークンを生成するだけで、アカウント A、B、C 内のプロジェクトにアクセスできるようになります。

開始

PHP 用の SDK では PHP PSR-4 ワークフローに従って、オートローダーと名前空間を使用して必要なクラスをロードします。

オートローダー

オートローダーは /aemmobilesdk/vendor/autoload.php にあります。オートローダーを読み込むには、次のメソッドを使用します。path/to の箇所をオートローダーに対する PHP ファイルの場所に置き換えます。

require_once('path/to/aemmobilesdk/vendor/autoload.php');

名前空間

クラス名に対する名前空間は、/aemmobilesdk/ 内のフォルダー構造に従います。例えば、Article クラスオブジェクトは /aemmobilesdk/contentService/Article.php に配置され、名前空間は次のようになります。

use aemmobilesdk\contentService\Article

一部のバージョンの PHP では名前空間で大文字と小文字が区別されます。フォルダーおよびファイルの名前では大文字、小文字を区別して使用することをお勧めします。

クラス名

各クラスオブジェクトは AEM Mobile のコンポーネントを表し、独自の専門分野内のみを処理します。例えば、Article クラスオブジェクトは、.article zip ファイルのアップロードなど、記事に関連したタスクのみを処理します。Article クラスオブジェクトを使用して、記事をコレクションに追加することはできません。この操作は、Collection クラスオブジェクトを使用して行います。

設定

すべてのクラスオブジェクトには、その初期化時にユーザークライアントのインスタンスが必要です。すべての抽象クラスオブジェクトは初期化する必要はありません(または、初期化できません)。

ユーザークライアント

User クラスオブジェクトはユーザークライアントを表します。これには次のようなものがあります。

  • クライアント資格情報
  • クライアントプロジェクト ID
  • API リクエストの実行

ユーザークライアントを初期化するには、名前空間を指定する必要があります(他のクラスオブジェクトと同様):

use aemmobilesdk\userService\User; 
$objUser = new User();

クライアント資格情報は /aemmobilesdk/configuration/Credentials.php で設定でき、自動で読み込まれるか、または次の関数を呼び出して実行時に読み込みます。

$objUser->setClientId('enter-your-client-id');
$objUser->setClientSecret('enter-your-client-secret');
$objUser->setDeviceId('enter-your-device-id');
$objUser->setDeviceToken('enter-your-device-token');

アクセストークンを生成するには、次の 2 つの関数(PHP セッションでアクセストークンをリクエストする関数とアクセストークンを格納する関数)を呼び出します。

$objUser->requestToken(); 
$objUser->storeToken();

プロジェクトを対象とする場合は、プロジェクト ID を指定します。

$objUser->setPublicationGuid('68957c92-99c2-47a3-8f54-83771ba21348');

プロジェクト ID はダッシュボードの URL(https://aemmobile.adobe.com/content/index.html#/publication/68957c92-99c2-47a3-8f54-83771ba21348/content など)または API から入手できます。後者の方法の場合、次の関数を使用して、このユーザークライアントに関連付けられたプロジェクトの一覧を取得できます。

$objUser->requestPermissions(); 
$arrPermissionList = $objUser->getResponse();

ベストプラクティスとして、指定したプロジェクトにアクセスする前に、クライアントユーザーに適切なロールと権限があることを確認することをお勧めします。

$objUser->requestPermissions(); 
$objUser->verifyPermissions();

API リクエスト

各クラスオブジェクト関数は、リクエストヘッダーおよびデータを適切に生成しますが、実際の実行は、先に述べたように User クラスオブジェクトが行います。クラスオブジェクトを初期化するプロセスは、ユーザークライアントを初期化するプロセスと同様です。

use aemmobilesdk\contentService\Article; 
$objArticle = new Article($objUser);

データ持続性

ユーザーは、メタデータの永続性の確保に責任があります。例えば、コレクションに 2 つの記事と 1 つのバナーがあり、3 つ目の記事をコレクションに追加するとします。最初にこのコレクション内の既存の 2 つの記事と 1 つのバナーの一覧を取得し、3 つ目の記事を一覧に追加してから、4 つすべての項目でコレクションを更新します。コレクションを 3 つ目の記事のみで更新すると、3 つ目の記事のみがコレクションに含まれ、他の 3 つは削除されます。

レシピで実験

概念実証に使用できるレシピを用意しました。これは、/recipes/ に配置されています。PHP 用の SDK は開発中であることに注意してください。アドビは、PHP 用 SDK の改善に向け継続してアップデートを提供し、AEM Mobile に新機能を追加して行く予定です。

変更ログ

 

2016/11/01 更新

  • 動的バナーのサポートとレシピが追加されました。
  • インジェストサービスに直接 PDF をアップロードするためのサポートが追加されました(記事のみ)。

2016/02/22 更新

  • SDK のディレクトリが dps2015sdk から aemmobilesdk に更新されました。既存および今後のすべての PHP SDK 名前空間は aemmobilesdk に更新する必要があります(具体的には、aemmobilesdk\userService\User; を使用してください)。
  • Entity::publish() および Entity::unpublish() にオプションのパラメーターが追加されました。これにより、公開および公開の取り消し操作の一括処理が可能になります。オプションのパラメーターには、head バージョンとエンティティ HREF の配列リストを含める必要があります。
  • Entity::getHref() にオプションのパラメーターが追加されました。これにより、head バージョンを指定しなくてもエンティティ HREF をキュレーションできます。head バージョンの指定はオプションのため、主にコレクションへのエンティティの追加に使用します。
  • recipes/publication/reset.php(以前の deleteAll.php)のロジックが更新されました。このレシピでは、更新された Entity::unpublish() の一括処理を使用して、個別に公開を取り消さなくても(依存関係に基づいた)エンティティのリストに対して公開の取り消しを行うことができるようになりました。

2016/01/06 更新

  • 内部の必要なエンティティメタデータを格納します。
  • Entity::update() リクエストを作成した後のエンティティクラス。
  • Collection クラスに格納されたコレクションコンテンツ要素の一覧から特定のエンティティを削除する Collection::removeEntity() を追加しました。この機能を使用するには、事前に Collection::requestContentElements() を呼び出す必要があります。呼び出さないと、Collection クラス内の一覧が空になります。
  • タイムスタンプ、プリティプリントオブジェクトなどの生成などの汎用関数を処理する Utility 静的クラスを追加しました。
  • recipes/product/genIssueList.php で、サムネイル(および背景)画像をダウンロード可能であるもののまだダウンロードされていない場合に、レシピがそれらをダウンロードします。genIssueList.php の読み込み時間を短縮するためのみに、画像のダウンロード用に別個のレシピ(recipes/product/downloadImage.php を参照)が作成されました。
  • コレクションに記事を追加するレシピを追加しました(recipes/collection/addArticle.php を参照)。
  • コレクションから記事を削除するレシピを追加しました(recipes/collection/removeArticle.php を参照)。
  • コレクションのすべてのエンティティ(即時エンティティのみでなく)を公開するレシピを追加しました(recipes/collection/publishAllChildren.php を参照)。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

リーガルノーティス   |   プライバシーポリシー