前提知識
- 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 のホーム ページに移動します。
-
パラメーター $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'); ?>
エンタイトルメントサービスの設定をテストするために、一連のテストが提供されています。ホスティングサーバーの setup_check.html に移動してください。左側のサイドバーにあるいずれかのボタンをクリックして、対応するテストを実行します。各チェックは、成功すると「OK」を返し、失敗するとエラーメッセージを返します。

これには、以下のテストが含まれます。
- All - これは以下のテストすべてを実行します。
- PHP Modules – ダイレクトエンタイトルメントソースコードが使用する必要な PHP モジュールがインストールされているかどうかをチェックします。
- Configuration – ユーザーが settings.php ファイルを更新したかどうかをチェックします。デフォルトでは値がコメントアウトされているため、ユーザーは実際の値を指定する必要があります。
- Database – ダイレクトエンタイトルメントデータベースが正常に作成されているかどうかをチェックします。settings.php で指定された資格情報でダイレクトエンタイトルメントデータベースにアクセスできるかどうかをチェックします。
- HTTP Connection – ホスティングサーバーが HTTP(保護されていない)Web サイトにアクセスできるかどうかをチェックします。
- HTTPS Connection – ホスティングサーバーが HTTPS(暗号化)Web サイトにアクセスできるかどうかをチェックします。
このセクションでは、エンタイトルメントサービスを独自ブランドにカスタマイズする方法について説明します。すべての画像は、エンタイトルメントサーバーのソースコードフォルダー内の images フォルダーに格納する必要があります。
ログイン画面の背景のカスタマイズ
- サイズ 1200 x 1200 ピクセルで画像を作成します。
- Login_bg.jpg として画像を保存します。
ログイン画面のロゴのカスタマイズ
- サイズ 34 x 33 ピクセルで画像を作成します。
- aemmobile_logo.png として画像を保存します。
ホームページのバナーのカスタマイズ
- サイズ 1200 x 170 ピクセルで画像を作成します。
- header.jpg として画像を保存します。
ログインページのテキストのカスタマイズ
- ダイレクトエンタイトルメントサーバーのソースコードフォルダーに移動します。
- index.html ファイルをテキストエディターで開きます。
- 以下の値を編集します。
ログインヘッダー
- 「Adobe Experience Manager Mobile」(31 行目)を検索します。
- この値を独自のログインヘッダーに変更します。
ユーザー名プレースホルダー
- 「Sign in with your Adobe ID for AEM Mobile」(40 行目)を検索します。
- この値を独自のユーザー名プレースホルダーに変更します。
パスワードプレースホルダー
- 「Password」(48 行目)を検索します。
- この値を独自のパスワードプレースホルダーに変更します。
管理者がログインの時点で存在しない場合、エンタイトルメントサービスによって管理者が自動的に作成されます。ログインすると、コレクションへの権利をユーザーとグループに付与できる画面が表示されます。エンタイトルメントの機能方法について詳しくは、AEM Mobile アプリでのエンタイトルメントの設定を参照してください。
プロジェクト設定
「プロジェクト設定」 > 「アクセス」タブ > 「バンドル 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 アプリでのエンタイトルメントの設定を参照してください。
現在の設定では、管理者ユーザーの資格情報は /php/settings.php ファイルで設定されています。管理者ユーザーの管理プロセスを最適化するため、$admin_list をデータベースに保存し、MySQL 管理ツール(phpMyAdmin など)を使用して管理者ユーザーを作成/編集/更新/削除することをお勧めします。
-
/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 プロバイダーとして使用した場合、AEM Mobile アプリでは Entitlement V2 API: /entitlements で authToken が提供されます。エンタイトルメントサーバーの設定に応じて、この例のエンタイトルメントサーバーは Google または Facebook API を使用して authToken に基づいたユーザー電子メールを取り出し、エンタイトルメントデータベースと照らし合わせます。
サーバーを設定するには、パラメーター $identity_provider を google または facebook に更新します。このパラメーターは、/php/settings.php にあります。
汎用 ID プロバイダーを使用した場合、アプリはユーザーを指定されたカスタムログイン UI にリダイレクトします。UI はログイン資格情報を処理し、検証して、結果をアプリに渡す必要があります。
サンプルのログイン UI が /idp ディレクトリにセットアップされています。オンデマンドサービスで汎用 ID プロバイダーを設定した場合、認証 URL は次のようになります:
http://<ドメイン>/<ソースコードへのパス>/idp/index.html
サーバーを Google または Facebook を使用するように構成済みの場合は、パラメーター $identity_provider をデフォルトに戻してください。このパラメーターは、/php/settings.php にあります。
各アプリでは、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);