需求

必備知識

  • 了解 MySQL 和 PHP
  • 了解 AEM Mobile
  • 透過隨選入口網站建立及發佈內容的知識

必要產品

  • AEM Mobile

 

自訂權益簡介

使用權益服務,Experience Manager Mobile 應用程式就可以支援用戶登入,並根據登入認證來授與特定系列的存取權 (權益)。

請注意,AEM Mobile 只支援 Direct Entitlement API v2。請參閱「AEM Mobile 應用程式中的權益」。

下載原始程式碼

若要開始使用範例權益伺服器程式碼,請下載權益服務檔案。

 

註解:

一旦下載下列軟體,即表示我確認已閱讀並同意 Adobe.com 使用規定以及 Adobe 線上隱私權政策

註解:

範例實作是根據現狀提供,Adobe 不提供程式碼、實作或部署程序的支援。如果您有關於實作的問題,請使用 AEM Mobile 論壇

安裝權益資料庫

MySQL 資料庫必須有正確的表格結構,權益系統才能從其中儲存及擷取資訊。

請注意,雖然下列範例使用 phpMyAdmin 來管理 MySQL 資料庫,但是其他 MySQL 管理工具可以達到相同的結果。

如果您已經在伺服器中安裝 phpMyAdmin,請繼續閱讀下一個章節,內容在說明如何建立新資料庫。

安裝 phpMyAdmin

  1. 導覽至 phpMyAdmin 首頁

  2. 按一下「Download x.x.x」按鈕,下載最新版的 phpMyAdmin。

  3. 依照 phpMyAdmin 安裝指南進行,並在伺服器中安裝 phpMyAdmin 來裝載直接權益。

  4. 從安裝所在的伺服器導覽至 phpMyAdmin 入口網站。範例:http://<我的網域>/phpmyadmin

  5. 如果出現登入提示,請向伺服器輸入資料庫用戶名稱和密碼。

建立新的資料庫

  1. 從 phpMyAdmin 的首頁,按一下位於左邊列的「New」按鈕或位於頂端導覽列上的「Database」索引標籤。

  2. 在資料庫頁面上,於「Create database」欄位中輸入新的資料庫名稱 (最好是「entitlement_admin」)。

  3. 按一下「Create」按鈕,即可使用輸入名稱產生新的資料庫。

上傳預先定義的資料庫結構

  1. 在成功建立資料庫之後,在清單中按一下資料庫「entitlement_admin」(或指定的資料庫名稱)。

  2. 在「entitlement_admin」資料庫頁面中,按一下位於頂端導覽列的「Import」索引標籤。

  3. 按一下「Choose File」選項,以開啟瀏覽器視窗。

  4. 從瀏覽器視窗中,導覽至已下載的權益伺服器檔案夾,並選取預先定義的資料庫檔案,其名稱為「entitlement_admin.sql」。

  5. 按一下「Go」按鈕,上傳選取的資料庫。

    當上傳成功時,會出現一則訊息告知您。

設定原始程式碼

您必須更新原始程式碼的某個區段,好讓權益服務能夠與您剛才建立的資料庫通訊。

更新 MySQL 設定

  1. 導覽至權益伺服器的原始程式碼檔案夾。

  2. 使用文字編輯器開啟位於下列目錄中的「settings.php」檔案:「Source-Code/php/settings.php」。

  3. 更新下列參數的值:

    // enter the MySQL host name
    $db_host = 'localhost';
    // enter the MySQL database username
    $db_user = 'root';
    // enter the MySQL database password
    $db_password = 'root';
    // enter the name of the MySQL database
    $db_name = 'entitlement_admin';
  4. 為參數 $admin_list 更新預先定義的管理員用戶清單。這是裝載之後,將能夠存取自訂權益伺服器範例的管理員用戶清單。

     

    每個管理員用戶都會繫結至一個 AEM Mobile 應用程式。如果您有兩個 iOS 應用程式,您必須建立兩個管理員用戶。

    此清單包含下列格式︰

    $admin_list = array(
        // admin user #1
        array(
            'username' => 'admin1',
            'password' => '202cb962ac59075b964b07152d234b70'
        ),
        // admin user #2
        array(
            'username' => 'admin2',
            'password' => '202cb962ac59075b964b07152d234b70'
        ),
        // add as many admin users as necessary
    );

    註解:

    您必須針對密碼執行 MD5 雜湊 (也就是 PHP 函數 md5())。在上述範例中,範例密碼「202cb962ac59075b964b07152d234b70」是值「123」的 MD5 雜湊。

    <?php
    
    // this will output 202cb962ac59075b964b07152d234b70
    // replace the value '123' below with the desired password for the admin
    echo md5('123');
    
    ?>

裝載原始程式碼

將具有更新設定的權益服務原始程式碼上傳至代管伺服器 (在之前的步驟中已設定資料庫)。

  1. 使用 FTP 用戶端 (例如 Transmit) 連線至代管您的權益服務的網頁伺服器。

  2. 將上傳目的地設定為您想要的網頁伺服器目錄。

  3. 選取權益伺服器的原始程式碼檔案夾。

  4. 上傳權益伺服器之原始程式碼檔案夾內的所有檔案。

  5. 從網頁伺服器導覽至原始程式碼檔案夾的路徑,以查看登入畫面。

測試權益伺服器設定

提供了一組測試來測試權益服務的設定。請從代管伺服器導覽至 setup_check.html。按一下左邊列的任何一個按鈕,以執行對應的測試。每個檢查都會在測試成功時傳回「OK」,或是在不成功時傳回錯誤訊息。

其中包括下列測試︰

  • 全部 – 這將會執行底下的完整測試。
  • PHP 模組 – 檢查是否安裝所需的 PHP 模組 (由直接權益原始程式碼所使用)。
  • 設定 – 查看用戶是否已更新 settings.php 檔案。預設會將這些值加為註解,好讓用戶必須提供其實際的值。
  • 資料庫 – 查看直接權益資料庫是否已建立成功。查看是否可以使用 settings.php 中所提供的認證來存取直接權益資料庫。
  • HTTP 連線 – 查看代管伺服器是否可以存取 HTTP (不安全) 網站。
  • HTTPS 連線 – 查看代管伺服器是否可以存取 HTTPS (已加密) 網站。

自訂您的權益服務

本章節將會協助您根據自身的品牌需求來修改權益服務。所有的影像都應該置於權益伺服器之原始程式碼檔案夾的「images」檔案夾中。

自訂登入畫面的背景

  1. 使用下列的尺寸建立影像︰1200 x 1200 像素。
  2. 將影像儲存為「login_bg.jpg」。

自訂登入畫面中的標誌

  1. 使用下列的尺寸建立影像︰34 x 33 像素。
  2. 將影像儲存為「aemmobile_logo.png」。

自訂首頁中的橫幅

  1. 使用下列的尺寸建立影像︰1200 x 170 像素。
  2. 將影像儲存為「header.jpg」。

自訂登入頁面中的文字

  1. 導覽至直接權益伺服器的原始程式碼檔案夾。
  2. 使用文字編輯器開啟「index.html」檔案。
  3. 編輯以下的值︰

登入表頭列

  • 找出下列:「Adobe Experience Manager Mobile」(第 31 行)。
  • 將該值變更為您自己的登入表頭列。

用戶名稱預留位置

  • 找出下列:「Sign in with your Adobe ID for AEM Mobile」(第 40 行)
  • 將該值變更為您自己的用戶名稱預留位置。

密碼預留位置

  • 找出下列:「Password」(第 48 行)
  • 將該值變更為您自己的密碼預留位置。

存取權益服務

如果在登入期間管理員尚未存在,權益服務將會自動建立管理員。一旦登入後,您會看到讓用戶和群組享有系列權益的畫面。如需有關權益之運作方式的詳細資訊,請參閱此文章︰「AEM Mobile 應用程式中的權益」。

指定 Bundle ID

輸入 AEM Mobile 應用程式的 Bundle ID。這應該符合從隨選服務的下列其中一個位置所設定的 Bundle ID︰

專案設定

移至「專案設定 > 存取權索引標籤 > Bundle ID」。如果在這裡指定 Bundle ID,這會傳送至權益服務,而不是應用程式中的 Bundle ID 值。

應用程式設定

前往左側導軌中的「應用程式」,並建立或編輯應用程式。如果專案設定中未指定 Bundle ID,就會使用這個 Bundle ID。

管理用戶

您可以使用權益管理員來建立和更新用戶。用戶必須擁有用戶名稱和密碼,並且包含選擇性描述欄位。一個用戶可以享有一個或多個產品的權益,而且可以指派給一個或多個群組。

  • 若要新增用戶,請從「用戶」索引標籤按一下「新增用戶」。
  • 若要編輯用戶,請從方格中選取用戶,然後按一下「編輯用戶」或按兩下用戶項目。在「編輯用戶」對話框中,您可以更新用戶名稱、密碼或描述。只有在您要更新時才需要設定密碼,否則,可以將它留白。
  • 若要為用戶提供產品的權益,請從第一個下拉式清單中選取產品,然後按一下「+」按鈕。
  • 若要將用戶新增至群組中,請從第二個下拉式清單中選取群組,然後按一下「+」按鈕。
  • 如果要從用戶中移除產品或群組,請從清單中選取該產品或群組,然後按一下「移除」。

管理群組

您可以使用權益管理員來建立和更新群組。群組不是必要的,但是在提供一個或多個產品的權益給用戶群組時,就非常實用。群組必須擁有名稱,並且包含選擇性描述欄位。您可以將產品的權益提供給群組,並指派用戶給群組。

  • 若要新增群組,請在「群組」索引標籤中按一下「新增群組」。
  • 若要編輯群組,請從方格中選取群組,然後按一下「編輯群組」或按兩下。在「編輯群組」對話框中,您可以更新名稱或描述。
  • 若要為群組提供產品的權益,請從第一個下拉式清單中選取產品,然後按一下「+」按鈕。
  • 若要將用戶新增至群組中,請從第二個下拉式清單中選取用戶,然後按一下「+」按鈕。
  • 如果要從群組中移除產品或用戶,請從清單中選取該產品或用戶,然後按一下「移除」。

管理產品

您可以使用權益管理員來建立和更新產品。產品必須有產品標籤、產品描述、產品 ID 和可用日期。在建立產品時,請確定產品 ID 符合隨選入口網站的「產品與訂閱」區段中所建立的產品 ID。如需詳細資訊,請參閱此文章︰「AEM Mobile 的應用程式內購買項目和訂閱」。

  • 若要新增產品,請在「產品」索引標籤中按一下「新增產品」。
  • 若要編輯產品,請從方格中選取產品,然後按一下「編輯產品」或按兩下。在「編輯產品」對話框中,您可以更新產品標籤、產品描述、產品 ID 或可用日期。
  • 若要讓群組享有產品的權益,請從第一個下拉式清單中選取群組,然後按一下「+」按鈕。
  • 若要讓用戶享有產品的權益,請從第二個下拉式清單中選取用戶,然後按一下「+」按鈕。
  • 如果要從產品中移除群組或用戶,請從清單中選取該群組或用戶,然後按一下「移除」。 

為 AEM Mobile 專案啟用權益伺服器

若要將權益伺服器與 AEM Mobile 專案產生關聯,您需要進行下列作業︰

  1. 將 Bundle ID 輸入到權益伺服器中。這必須符合之前在隨選服務中所設定的 Bundle ID。

    這可以在隨選服務的專案中繼資料中找到:

    或是在 AEM Mobile 應用程式設定中找到 (如果未在專案層級設定的話)。

  2. 將權益端點輸入到隨選服務中。如需詳細資訊,請參閱此說明文章︰「AEM Mobile 應用程式中的權益」。

製作的改進

在目前設定中,管理員用戶認證是在 /php/settings.php 檔案中設定。若要讓規劃管理員用戶的流程最佳化,建議您最好將 $admin_list 儲存到資料庫中,然後使用 MySQL 管理工具 (例如 phpMyAdmin) 加以建立/編輯/更新/刪除。

  1. 在資料庫中建立新的表格 (例如管理員),您可以使用稍早建立的相同資料庫 (建議使用),並建立所需的管理員用戶 (數目不限)。

  2. 在 /php/settings.php 檔案中,$admin_list = array() 必須替換成會查詢資料庫中管理員用戶清單的 MySQL 準備陳述式。範例如下︰

    // initializes the empty list of admin user
    $admin_list = array();
    
    // connects to the database
    $dbconnect = $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
    
    if ($dbconnect) { // successfully connected to the database
    	// queries the database for the list of admin user credentials: username, password
    	$stmt = $mysqli->prepare('SELECT username, password FROM admins);
    
    	if ($stmt) { // prepare statement succeeded
    		$stmt->bind_param('ss', $username, $password);
    		$stmt->execute();
    		// stores the queried results
    		$stmt->store_result();
    
    		if ($stmt->num_rows > 0) { // there exists admin users in the database
    			// appends the queried admin credentials to the list
    			while($stmt->fetch()) {
    				$admin_list[] = array(
    					'username' => $username,
    					'password' => $password
    				);
    			}
    		}
    	}
    }
    

使用權益服務中的自訂驗證

此範例權益伺服器現在支援使用 Google、Facebook 或一般身分提供者。如此一來,用戶就可以使用 Google 或 Facebook 帳戶登入,或使用您所設計的自訂登入體驗。根據預設,權益服務無法同時支援這 3 種類型的身分提供者。

如需有關自訂驗證的詳細資訊,請參閱「AEM Mobile 應用程式中的自訂驗證」。

使用 Google 或 Facebook 做為身分提供者

當使用 Google 或 Facebook 做為身分提供者時,AEM Mobile 應用程式將會在 Entitlement V2 API 中提供 authToken:/entitlements。視權益伺服器設定而定,此範例權益伺服器將會依據 authToken 使用 Google 或 Facebook API 來提取用戶電子郵件,並與權益資料庫進行核對。

若要設定此伺服器,請將參數 $identity_provider 更新為「google」或「facebook」。此參數可以在 /php/settings.php 中找到。

使用一般身分提供者

當使用一般身分提供者時,應用程式會將用戶重新導向到提供的自訂登入 UI。此 UI 必須處理登入認證,加以驗證,然後將結果傳回應用程式。

範例登入 UI 已設定在 /idp 目錄中。當在隨選服務中設定一般身分提供者時,驗證 URL 應該如下所示:
http://<網域>/<原始程式碼路徑>/idp/index.html

如果您先前已將伺服器設定為使用 Google 或 Facebook,請將參數 $identity_provider 改回「default」。此參數可以在 /php/settings.php 中找到。

設定服務以支援身分提供者

每個應用程式都只能支援一個身分提供者:Google、Facebook 或一般。根據預設,此範例權益伺服器也將只支援其中一個。不過,如果您有支援一個以上身分提供者的理由,例如將相同的權益伺服器用於多個應用程式,那麼您將需要複製 /services 目錄,並將它重新命名為其他名稱,例如 services-google。在最新複製的目錄中,強制將參數 $identity_provider 設定為所需的身分提供者 (範例:$identity_provider = "google"),方法是將此參數新增到第 13 行後面。

// in /services-google/index.php

require_once "../php/settings.php";
require_once "../php/utils.php";

$identity_provider = "google"

$path_info = $_SERVER["PATH_INFO"];
$call = substr($path_info, 1);

在此範例中,新的權益端點將會如下所示︰
http://<網域>/<原始程式碼路徑>/services-google/index.php

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

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