必要条件

前提知識

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

必要な製品

  • AEM Mobile
  • On-Demand Services API へのアクセス
  • 共有コンテンツ

共有コンテンツの概要

On-Demand Services API(旧称「Content Producer Service API」)を使用すれば、サードパーティの開発者はオンデマンドサービスとの連携を実現できます。このサービスでは次のことが可能です。

  • 記事の管理
  • コレクションの管理
  • 製品の管理
  • プッシュ通知の管理

HTML ベースの複数の記事を公開する場合は、Shared Content API を使って、複数の記事間で共有されるコンテンツをバンドルします。この記事では共有コンテンツの使い方を説明します。

AEM Mobile では、記事を個別に公開できます。各記事は article_name で識別されます。共有コンテンツの設定時に、HTML ベースの複数の記事で同一の CSS と Javascript ファイルを使用できるようにします。

共有コンテンツを使用しない場合は、HTML の各記事に CSS と JS ファイルを含める必要があります。

この例では、すべての記事で「css/style.css」と「js/main.js」ファイルが重複し、オーバーヘッドを増やしています。共有コンテンツを使用すれば、このようなファイルを 1 つの sharedContent エンティティに追記して、各記事から参照することができます。

共有コンテンツでは、共有ファイルは単一のエンティティに格納され、複数の記事から参照されます。

動的共有コンテンツの概要

AEM Mobile 2017.2 リリース(2017 年 2 月 6 日)では、動的共有コンテンツを使用することで、共有コンテンツを参照する記事を更新しなくても共有コンテンツを更新できるようになりました。以前のリリースでは、sharedContent エンティティを使用し、共有コンテンツとそのコンテンツにリンクされている記事の両方を更新する必要がありました。また、アプリのユーザーが「更新」プロンプトをタップして更新を取得することも必要でした。このリリースでは、新しい dynamicSharedContent エンティティを使用して共有コンテンツをアップロードできます。動的共有コンテンツを更新して公開すると、すべての参照元記事に自動的に変更が反映されます。参照元記事を更新することも、ユーザーが更新プロンプトをタップすることも必要なくなりました。

sharedContentdynamicSharedContent の両方のワークフローがサポートされていますが、このセクションでは、動的共有コンテンツの使用について説明します。従来の共有コンテンツのワークフローを使用する場合は、必要に応じて dynamicSharedContentsharedContent に置き換えてください。

 

共有コンテンツを使う

  1. 各記事の記事エンティティを作成します。

  2. 記事のコンテンツを(manifest.xml に圧縮して)インジェストサービスにアップロードします。詳しくは、AEM Mobile 用の HTML 記事の作成を参照してください。

  3. 共有コンテンツのエンティティを作成します。要求本文には、標準エンティティメタデータ属性を含める必要があります。次の例では、フィールド「sc_one」が dynamicSharedContent エンティティ名です。

    PUT /publication/<projectID>/dynamicSharedContent/sc_one
  4. 作成された結果のエンティティから contentUrl を取得します(応答の一部)。

    {
        …
        "_links": {
            …
            "contentUrl": "/publication/<projectId>/dynamicSharedContent/sc_one/contents;contentVersion=<cVersion1>/"
        }
    }
  5. この contentUrl に共有リソースをアップロードします。

    次に例を示します。

    PUT /publication/<projectId>/dynamicSharedContent/sc_one/contents;contentVersion=<cVersion1>/css/style.css
    PUT /publication/<projectId>/dynamicSharedContent/sc_one/contents;contentVersion=<cVersion1>/js/main.js
  6. dynamicSharedContent エンティティのコンテンツをシール(コミット)します。

    PUT /publication/<projectId>/dynamicSharedContent/sc_one;version=<entVersion>/contents
  7. シールされたエンティティから更新された contentUrl を取得します(応答の一部)。

    {
        …
        "_links": {
            …
            "contentUrl": "/publication/<projectId>/dynamicSharedContent/sc_one/contents;contentVersion=<cVersion2>/"
        }
    }
  8. この記事では、共有 contentUrl を参照するシンボリックリンクアセットをアップロードします。次の例では、フィールド「article_one」が記事エンティティ名用、フィールド「shared」が共有コンテンツを格納するフォルダー名用です。まず、GET コールを実行し、最新の dynamicSharedContent エンティティバージョンを取得します。次に、リンクを共有リソースに更新します。

    PUT /publication/<projectId>/article/article_one/contents;contentVersion=<cVersion3>/dynamicShared
    Content-Type:  application/vnd.adobe.symboliclink+json
    {"href": "/publication/<projectId>/dynamicSharedContent/sc_one/contents;contentVersion=<cVersion2>/"}
  9. 同じ記事内に別の共有エンティティがあれば、その参照を設定します。

    PUT /publication/<projectId>/article/article_one/contents;contentVersion=<cVersion3>/fonts
    Content-Type:  application/vnd.adobe.symboliclink+json
    {"href": "/publication/<projectId>/dynamicSharedContent/sc_two/contents;contentVersion=<cVersion2>/"}

    Content-Type ヘッダーによりこのリソースがシンボリックリンクであることが識別され、リソース名(この例では「article_one」)によりシンボリックリンクのソースが識別され、アップロードされたアセットのコンテンツによりターゲットが識別されます。

  10. 参照元エンティティのコンテンツをシール(コミット)します。

     

    PUT /publication/<projectId>/article/article_one;version=<entVersion>/contents

    これで、「shared」(sc_one 用)と「fonts」(sc_two 用)プレフィックスを使用すれば、article_one 内のコンテンツアセットから dynamicSharedContent エンティティのコンテンツを参照できます。dynamicSharedContent は HTML 記事の 1 階層上の相対位置にあります。

    article_one の HTML コンテンツから javascript と css への参照は次の例のように記述します。

    <script src="../shared/js/logic.js"></script>
    <link rel="stylesheet" type="text/css" href="../shared/css/style.css">

    フォントの設定は次の例のように記述します。

    @font-face {
      font-family: "myFirstFont";
      src: "url(../fonts/Exotic_Regular.woff");
    }
  11. プリフライト以外のアプリの dynamicSharedContent エンティティを公開するか、プリフライト対応アプリのプリフライトをトリガーして、参照記事すべてに対して dynamicSharedContent エンティティの変更を反映します。

    PUT /job
    {
        "workflowType": "publish",
        "entity": {
            "/publication/dynamicSharedContent/sc_one;version=<entVersion>"
        }
    }

既存の共有コンテンツから動的共有コンテンツへの移行

新しい共有コンテンツ機能は、既存の共有コンテンツのワークフローには影響しません。動的共有コンテンツを利用するには、既存の共有コンテンツを変更して新しい動的ワークフローを有効にする必要があります。

  1. 新しい dynamicSharedContent エンティティを作成します。

  2. 以前の sharedContent エンティティのすべてのアセットを新しい dynamicSharedContent エンティティに追加して、そのエンティティのコンテンツをシールします。

  3. 各記事のシンボリックリンク (symlink) ファイルを更新し、シールされたバージョンの新しい dynamicSharedContent エンティティを指定します。

  4. プロジェクトのコンテンツをプレビュー(プリフライト)すると、動的コンテンツを記事で利用できるようになっています。

  5. 新しい共有コンテンツ機能は、既存の共有コンテンツのワークフローには影響しません。動的共有コンテンツを利用するには、既存の共有コンテンツを変更して新しい動的ワークフローを有効にする必要があります。

    準備ができたら、動的共有コンテンツを公開します。次に、共有コンテンツを参照する記事を公開します。

    共有コンテンツを更新するには、動的共有コンテンツのアセットを追加または変更し、エンティティをシールします。共有コンテンツを参照する記事をプレビューして、動的共有コンテンツを公開します。変更内容は、参照元記事に反映されます。

注意:

現時点では、動的共有コンテンツの公開を取り消すことはできません。このオプションがサポートされるまでの間は、次善策として動的共有コンテンツからすべてのファイルのコンテンツを削除して再度公開してください。この動的共有コンテンツへの symlink を参照元記事または動的バナーから削除するという方法もあります。

共有コンテンツの注意点

記事内で共有コンテンツが使用されている場合は、共有コンテンツエンティティのダウンロードが完全に完了しないと、記事のレンダリングが開始しません。このため、すべての共有コンテンツを含むサイズの大きいエンティティを使用するよりも、複数の共有コンテンツエンティティに分けて作成することをお勧めします。

コンテンツが提供されるパスは、手順 8 と 9 で示したシンボリックリンクの作成によって異なります。手順 8 の sc_one は、パス「shared」以下で参照され、手順 9 の sc_two は、パス「fonts」以下で参照されます。Unix オペレーティングシステムでシンボリックリンクを使用し、共有コンテンツの動作を確認できます。

共有コンテンツは On-Demand Services API でのみ管理できます。現在、オンデマンドサービスポータルには共有コンテンツを管理するユーザーインターフェイスはありません。

On-Demand Services API には sharedContent のサンプルが含まれています。/sharedContent フォルダーを確認してください。

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

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