需求

必備知識

  • 了解 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 服務授權 API 的條款、Adobe.com 使用條款以及 Adobe 線上隱私權政策

下載

如需最近變更的清單,請參閱本文結尾的變更記錄。

了解概念

On-Demand Services API 需要經過授權的存取。因此,請務必了解並完成本節後再繼續進行。

驗證

對於使用 On-Demand Services API 所提出的每個用戶端 (HTTPS) 要求,您都必須在要求標頭中提供下列資訊:

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

API 金鑰會將 On-Demand Services API 的存取權授與用戶端,而存取 Token 會識別用戶端帳戶。

若要申請 API 金鑰,請檢視「On-Demand Services API」文件,然後依照文件的說明下載並填妥申請表。

收到 API 金鑰之後,您就可以產生存取 Token。若要產生存取 Token,請執行下列動作:

  1. 前往 AEX Device Token Generator
  2. 輸入有效的用戶端 ID。
  3. 使用有效的 Adobe ID 登入。
  4. 如果成功,就會產生裝置 ID 和裝置 Token。
  5. 使用用戶端 ID、裝置 ID 和裝置 Token,提出產生存取 Token 的 API 要求。

驗證注意事項:

  • 存取 Token 將在 24 小時內過期。
  • 裝置 ID 和裝置 Token 只要處於使用狀態,將會自動更新本身的效期。用戶端可以在需要時使用裝置 ID 和 Token 來產生新的存取 Token。
  • 裝置 ID 和裝置 Token 將會在以下情況失效:如果之前用來產生這些 ID 和 Token 之帳戶的密碼已更新。如果發生這個情況,請產生一組新的裝置 ID 和裝置 Token。

 

授權

在 API 金鑰申請程序期間,您最多可以申請 3 個被授與 AEX Device Token Generator 存取權的 Adobe ID。這表示,您最多只能存取 3 個 Adobe ID 以內的專案。不過,透過我們新的角色與權限,您可以將 Adobe ID 新增至任何數目的專案。

例如,如果您在帳戶 A、B 和 C 中都有專案,就可以將帳戶 A 新增至帳戶 B 和 C 中的專案。如此一來,您只需要針對帳戶 A 產生裝置 ID 和裝置 Token,即可存取帳戶 A、B 和 C 中的專案。

快速入門

適用於 PHP 的 SDK 會遵循 PHP PSR-4 工作流程,並使用自動載入器和命名空間來載入必要的類別。

自動載入器

自動載入器位於 /aemmobilesdk/vendor/autoload.php。您可以使用下列方法來載入自動載入器,並根據 PHP 檔案相對於自動載入器的位置,取代 path/to 部分:

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');

若要產生存取 Token,您可以分別呼叫下列兩個函數,以便要求存取 Token 並將存取 Token 儲存在 PHP 工作階段中:

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

若要將專案設為目標,您必須指定專案 ID:

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

您可以透過儀表板中的 URL (即 https://aemmobile.adobe.com/content/index.html#/publication/68957c92-99c2-47a3-8f54-83771ba21348/content) 或經由 API 找到專案 ID。若要使用第二種方法,請使用下列函數來取得與這個用戶的用戶端相關聯的專案清單:

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

建議您最好先確認用戶端用戶擁有正確的角色與權限,然後再存取指定的專案:

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

API 要求

每個類別物件函數都會正確地產生要求標頭與資料,但是實際的執行在於「User」類別物件,如先前所述。若要初始化此類別物件,其程序與初始化用戶的用戶端很相似:

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

資料持續性

用戶會負責確保中繼資料的持續性。例如,有一個系列包含兩篇文章和一個橫幅,而且您想要將第三篇文章新增至系列。您必須先取得此系列中現有兩篇文章和橫幅的清單、將第三篇文章附加至清單 (或加在清單前面),然後使用這四個項目來更新系列。否則,如果您只使用第三篇文章來更新系列,該系列現在只會包含第三篇文章,而移除其他三個項目。

依照配方試驗

我們已提供一些配方,可讓您用來證實這些概念。這些配方位於 /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()。此參數將允許大量發佈和解除發佈動作。此選擇性參數應該包含實體 HREF 與標題版本的陣列清單。
  • 已將選擇性參數新增至 Entity::getHref()。此參數將允許整理不含標題版本的實體 HREF。主要用於將實體新增至系列,因為是否提供標題版本屬於選擇性動作。
  • 已更新 recipes/publication/reset.php (先前為 deleteAll.php) 中的邏輯。這個配方現在會使用更新過的大量 Entity::unpublish() 來解除發佈一列實體 (根據相依性),而非個別解除發佈。

2016/01/06 更新

  • 儲存必要的內部實體中繼資料。
  • 在提出 Entity::update() 要求之後的實體類別。
  • 已新增 Collection::removeEntity() 來從「Collection」類別中儲存的收集內容元素清單中移除特定的實體。我們必須在使用這個新函數之前呼叫 Collection::requestContentElements(),否則「Collection」類別中的清單將會是空的。
  • 已新增「Utility」靜態類別來處理更一般性的功能,例如產生時間戳記、優美地列印物件等等。
  • 在 recipes/product/genIssueList.php 中,配方現在會下載縮圖 (和背景) 影像 (如果可用而且尚未下載)。已建立不同配方 (請參閱 recipes/product/downloadImage.php),其目的僅供下載影像之用,以減少 genIssueList.php 的載入時間。
  • 已新增配方,以便將文章加入至系列 (請參閱 recipes/collection/addArticle.php)。
  • 已新增配方,以便從系列中移除文章 (請參閱 recipes/collection/removeArticle.php)。
  • 已新增配方,以便發佈系列的所有實體,不只是直屬實體 (請參閱 recipes/collection/publishAllChildren.php)。

此産品由 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 授權  Creative Commons 條款未涵蓋 Twitter™ 與 Facebook 文章。

法律說明   |   線上隱私權政策