必要条件

前提知識

  • MySQL および PHP について理解していること
  • AEM Mobile について理解していること
  • オンデマンドポータルでのコンテンツの作成および公開に関する知識があること

必要な製品

  • AEM Mobile

 

カスタムエンタイトルメントの概要

エンタイトルメントサービスを使用することにより、Experience Manager Mobile アプリで、ユーザーのログインをサポートし、ログイン資格情報に基づいて特定のコレクションにアクセス権(エンタイトルメント)を付与できます。

AEM Mobile では、Direct Entitlement API v2 のみがサポートされることに注意してください。AEM Mobile でのエンタイトルメントの設定を参照してください。

ソースコードのダウンロード

エンタイトルメントサーバーのサンプルコードを使用するには、エンタイトルメントサービスファイルをダウンロードします。

 

注意:

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

注意:

サンプルの実装は、現状のままでの提供となります。Adobe は、コード、実装、または展開プロセスに関するサポートはいたしません。実装に関する質問がある場合、AEM Mobile フォーラムをご利用ください。

エンタイトルメントデータベースのインストール

エンタイトルメントシステムが MySQL データベースに情報を格納したり、そこから情報を取得したりできるようにするには、MySQL データベースに正しいテーブル構造を構築する必要があります。

次の例では MySQL データベースを管理するために phpMyAdmin が使用されていますが、その他の MySQL 管理ツールでも同じ結果を得ることができます。

サーバーに phpMyAdmin が既にインストールされている場合は、新しいデータベースの作成について説明する次のセクションにお進みください。

phpMyAdmin のインストール

  1. phpMyAdmin のホーム ページに移動します。

  2. 「Download x.x.x」ボタンをクリックして、phpMyAdmin の最新バージョンをダウンロードします。

  3. phpMyAdmin のインストールガイドに従って、ダイレクトエンタイトルメントをホストするサーバーに phpMyAdmin をインストールします。

  4. phpMyAdmin をインストールしたサーバーから phpMyAdmin ポータルに移動します。例:http://<my-domain>/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」ボタンをクリックして、選択したデータベースをアップロードします。

    アップロードが成功したら、メッセージが表示されます。

ソースコードの設定

エンタイトルメントサービスが作成したデータベースと通信できるようにするには、ソースコードの 1 つのセクションを更新する必要があります。

MySQL 設定の更新

  1. エンタイトルメントサーバーのソースコードフォルダーに移動します。

  2. テキストエディターで、Source-Code¥php¥settings.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 アプリを 2 つ所有している場合は、管理者ユーザーを 2 つ作成する必要があります。

    リストには、次の形式が含まれています。

    $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. Transmit などの FTP クライアントを使用して、エンタイトルメントサービスをホストする Web サーバーに接続します。

  2. Web サーバーの目的のディレクトリにアップロード先を設定します。

  3. エンタイトルメントサーバーのソースコードフォルダーを選択します。

  4. エンタイトルメントサーバーのソースコードフォルダー内にあるすべてのファイルをアップロードします。

  5. Web サーバーからソースコードフォルダーのパスに移動すると、ログイン画面が表示されます。

エンタイトルメントサーバーの設定のテスト

エンタイトルメントサービスの設定をテストするために、一連のテストが提供されています。ホスティングサーバーの setup_check.html に移動してください。左側のサイドバーにあるいずれかのボタンをクリックして、対応するテストを実行します。各チェックは、成功すると「OK」を返し、失敗するとエラーメッセージを返します。

これには、以下のテストが含まれます。

  • All - これは以下のテストすべてを実行します。
  • PHP Modules – ダイレクトエンタイトルメントソースコードが使用する必要な PHP モジュールがインストールされているかどうかをチェックします。
  • Configuration – ユーザーが settings.php ファイルを更新したかどうかをチェックします。デフォルトでは値がコメントアウトされているため、ユーザーは実際の値を指定する必要があります。
  • Database – ダイレクトエンタイトルメントデータベースが正常に作成されているかどうかをチェックします。settings.php で指定された資格情報でダイレクトエンタイトルメントデータベースにアクセスできるかどうかをチェックします。
  • HTTP Connection – ホスティングサーバーが HTTP(保護されていない)Web サイトにアクセスできるかどうかをチェックします。
  • HTTPS Connection – ホスティングサーバーが HTTPS(暗号化)Web サイトにアクセスできるかどうかをチェックします。

エンタイトルメントサービスのカスタマイズ

このセクションでは、エンタイトルメントサービスを独自ブランドにカスタマイズする方法について説明します。すべての画像は、エンタイトルメントサーバーのソースコードフォルダー内の 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 アプリでのエンタイトルメントの設定を参照してください。

バンドル ID の指定

AEM Mobile アプリ用のバンドル ID を入力します。この ID は、オンデマンドサービスの以下のいずれかの場所で設定された ID と一致している必要があります。

プロジェクト設定

「プロジェクト設定」 > 「アクセス」タブ > 「バンドル ID」に移動します。ここでバンドル ID が指定されている場合、アプリで指定されるバンドル ID の値ではなく、この ID がエンタイトルメントサービスに送信されます。

アプリ設定

左のナビゲーションバーの「アプリケーション」に移動し、アプリを作成または編集します。プロジェクト設定にバンドル ID が指定されていない場合、このバンドル ID が使用されます。

ユーザーの管理

エンタイトルメントの管理者を使用して、ユーザーを作成したり、更新したりできます。ユーザーにはユーザー名とパスワードが必要で、オプションで説明フィールドを含めることができます。ユーザーに 1 つ以上の製品に対する権利を付与できます。また、1 つ以上のグループに割り当てることもできます。

  • ユーザーを追加するには、「Users」タブから「Add User」をクリックします。
  • ユーザーを編集するには、グリッドからユーザーを選択し、「Edit User」をクリックするか、ユーザーエントリをダブルクリックします。「Edit User」ダイアログボックスで、ユーザー名、パスワードまたは説明を更新することができます。更新する場合は、パスワードのみを設定する必要があります。それ以外は、空白のままにできます。
  • ユーザーに製品の権利を付与するには、最初のドロップダウンから製品を選択し、「+」ボタンをクリックします。
  • ユーザーをグループに追加するには、2 番目のドロップダウンからグループを選択し、「+」ボタンをクリックします。
  • ユーザーから製品またはグループを削除するには、リストからその製品またはグループを選択して、「Remove」をクリックします。

グループの管理

エンタイトルメントの管理者を使用して、グループを作成したり、更新したりできます。グループは必須ではありませんが、1 つ以上の製品に対する権利をユーザーのグループに付与するのに便利です。グループには名前が必要で、オプションで説明フィールドを含めることができます。製品の権利をグループに付与することも、ユーザーをグループに割り当てることもできます。

  • グループを追加するには、「Groups」タブから「Add Group」をクリックします。
  • グループを編集するには、グループをグリッドから選択し、「Edit Group」をクリックするか、ダブルクリックします。「Edit Group」ダイアログボックスで、名前または説明を更新することができます。
  • グループに製品の権利を付与するには、最初のドロップダウンから製品を選択し、「+」ボタンをクリックします。
  • ユーザーをグループに追加するには、2 番目のドロップダウンからユーザーを選択し、「+」ボタンをクリックします。
  • グループから製品またはユーザーを削除するには、リストからその製品またはユーザーを選択して、「Remove」をクリックします。

製品の管理

エンタイトルメントの管理者を使用して、製品を作成したり、更新したりできます。製品には、製品のラベル、製品の詳細、製品 ID および公開日を指定する必要があります。製品を作成するときに、製品 ID がオンデマンドポータルの「製品と購読」セクションで作成した ID と一致していることを確認してください。詳しくは、AEM Mobile でのアプリ内課金および購読を参照してください。

  • 製品を追加するには、「Product」タブから「Add Product」をクリックします。
  • 製品を編集するには、製品をグリッドから選択し、「Edit Product」をクリックするか、ダブルクリックします。「Edit Product」ダイアログで、製品のラベル、製品の詳細、製品 ID または公開日を更新できます。
  • グループに製品に対する権利を付与するには、最初のドロップダウンからグループを選択し、「+」ボタンをクリックします。
  • ユーザーに製品に対する権利を付与するには、最初のドロップダウンからユーザーを選択し、「+」ボタンをクリックします。
  • 製品からグループまたはユーザーを削除するには、リストからそのグループまたはユーザーを選択して、「Remove」をクリックします。 

AEM Mobile プロジェクトのエンタイトルメントサーバーの有効化

エンタイトルメントサーバーを AEM Mobile プロジェクトと関連付けるには、以下を実行する必要があります。

  1. バンドル ID をエンタイトルメントサーバーに入力します。この ID は、オンデマンドサービスで設定した ID と一致している必要があります。

    これは、オンデマンドサービスのプロジェクトメタデータで確認できます。

    または AEM Mobile アプリの設定で確認できます(プロジェクトレベルで設定されていない場合)。

  2. エンタイトルメントエンドポイントをオンデマンドサービスに入力します。詳しくは、AEM Mobile アプリでのエンタイトルメントの設定を参照してください。

実稼働版の機能強化

現在の設定では、管理者ユーザーの資格情報は /php/settings.php ファイルで設定されています。管理者ユーザーの管理プロセスを最適化するため、$admin_list をデータベースに保存し、MySQL 管理ツール(phpMyAdmin など)を使用して管理者ユーザーを作成/編集/更新/削除することをお勧めします。

  1. データベースに新しいテーブル(admins など)を作成し(以前に作成した同じデータベースを使用できます(推奨))、必要に応じて複数の管理者ユーザーを作成します。

  2. /php/settings.php ファイルで、「$admin_list = array()」を、管理者ユーザーのリストをデータベースに問い合わせる MySQL の prepare ステートメントに置き換える必要があります。以下に例を示します。

    // 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、汎用 ID プロバイダーを使用できるようになっています。これにより、ユーザーは Google または Facebook アカウントを使用するか、設計したカスタムログインエクスペリエンスを使用してログインできます。デフォルトでは、エンタイトルメントサービスによって 3 種類の ID プロバイダーすべてが同時にサポートされるわけではありません。

カスタム認証について詳しくは、AEM Mobile アプリでのカスタム認証を参照してください。

Google または Facebook を ID プロバイダーとして使用する

Google または Facebook を ID プロバイダーとして使用した場合、AEM Mobile アプリでは Entitlement V2 API: /entitlements で authToken が提供されます。エンタイトルメントサーバーの設定に応じて、この例のエンタイトルメントサーバーは Google または Facebook API を使用して authToken に基づいたユーザー電子メールを取り出し、エンタイトルメントデータベースと照らし合わせます。

サーバーを設定するには、パラメーター $identity_provider を google または facebook に更新します。このパラメーターは、/php/settings.php にあります。

汎用 ID プロバイダーの使用

汎用 ID プロバイダーを使用した場合、アプリはユーザーを指定されたカスタムログイン UI にリダイレクトします。UI はログイン資格情報を処理し、検証して、結果をアプリに渡す必要があります。

サンプルのログイン UI が /idp ディレクトリにセットアップされています。オンデマンドサービスで汎用 ID プロバイダーを設定した場合、認証 URL は次のようになります:
http://<ドメイン>/<ソースコードへのパス>/idp/index.html

サーバーを Google または Facebook を使用するように構成済みの場合は、パラメーター $identity_provider をデフォルトに戻してください。このパラメーターは、/php/settings.php にあります。

サービスを ID プロバイダーをサポートするように設定する

各アプリでは、1 つの ID プロバイダー(Google、Facebook、汎用)のみがサポートされます。デフォルトでは、この例のエンタイトルメントサーバーが同様に 1 つのみをサポートします。ただし、複数の ID プロバイダーをサポートする特別な理由がある場合は(複数のアプリに対して同じエンタイトルメントサーバーを使用するなど)、サービスディレクトリをコピーし、services-google などに名前変更する必要があります。新しくコピーしたディレクトリで、パラメーター $identity_provider を行番号 13 の後に追加して、目的の ID プロバイダー($identity_provider = "google" など)に強制的に設定します。

// 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 によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

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