Android アプリ

アプリケーション例は、Adobe Experience Manager(AEM) のヘッドレス機能を調べる優れた方法です。 この Android アプリケーションは、AEMの GraphQL API を使用してコンテンツに対してクエリを実行する方法を示します。 この AEM Headless Client for Java は、GraphQL クエリを実行し、データを Java オブジェクトにマッピングしてアプリを強化するために使用されます。

AEMヘッドレスを備えた Android Java アプリ

次を表示: GitHub のソースコード

前提条件

以下のツールをローカルにインストールする必要があります。

AEM要件

Android アプリケーションは、次のAEMデプロイメントオプションと連携します。 すべてのデプロイメントには、 WKND サイト v2.0.0 以降 をインストールします。

Android アプリケーションは、 AEM パブリッシュ 環境ですが、Android アプリケーションの設定で認証が指定されている場合は、AEM オーサーからコンテンツをソース化できます。

使用方法

  1. のクローン adobe/aem-guides-wknd-graphql リポジトリ:

    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. 起動 Android Studio フォルダーを開きます。 android-app

  3. ファイルを変更します config.properties 時刻 app/src/main/assets/config.properties および更新 contentApi.endpoint target AEM環境に合わせるには:

    contentApi.endpoint=http://10.0.2.2:4503
    

    基本認証

    この contentApi.user および contentApi.password は、WKND GraphQL コンテンツへのアクセス権を持つローカルAEMユーザーを認証します。

    contentApi.endpoint=http://10.0.2.2:4502
    contentApi.user=admin
    contentApi.password=admin
    
  4. ダウンロード Android 仮想デバイス (API 28 以降)。

  5. Android エミュレーターを使用してアプリをビルドし、デプロイします。

AEM環境への接続

10.0.2.2特別なエイリアス IP (エミュレーターを使用して次を作成する場合) 10.0.2.2:4502 はと同じです。 localhost:4502. AEMパブリッシュ環境に接続する場合(推奨)、認証は必要なく、 contentAPi.user および contentApi.password は空白のままにすることができます。

AEMオーサー環境に接続する場合 認証 が必要です。 デフォルトでは、アプリケーションは、ユーザー名とパスワードがの基本認証を使用するように設定されています。 admin:admin. この AEMHeadlessClientBuilder は、 トークンベースの認証. でトークンベースの認証を使用するには、クライアントビルダーを更新します。 AdventureLoader.java および AdventuresLoader.java:

/* Comment out basicAuth
 if (user != null && password != null) {
   builder.basicAuth(user, password);
 }
*/

// use token-authentication where `token` is a String representing the token
builder.tokenAuth(token)

コード

以下に、アプリケーションの強化に使用される重要なファイルとコードの概要を示します。 完全なコードは、 GitHub.

永続クエリ

AEMヘッドレスのベストプラクティスに従い、iOSアプリケーションはAEM GraphQL に永続化されたクエリを使用して、アドベンチャーデータをクエリします。 アプリケーションでは、次の 2 つの永続クエリを使用します。

  • wknd/adventures-all 持続的なクエリで、AEM内のすべてのアドベンチャを簡潔なプロパティセットで返します。 この永続的なクエリは、初期ビューのアドベンチャーリストを駆動します。
# Retrieves a list of all adventures
{
    adventureList {
        items {
            _path
            slug
            title
            price
            tripLength
            primaryImage {
                ... on ImageRef {
                _path
                mimeType
                width
                height
                }
            }
        }
    }
}
  • wknd/adventure-by-slug 次の条件を満たす 1 つのアドベンチャーを返す永続クエリ slug 一連のプロパティを持つ(アドベンチャーを一意に識別するカスタムプロパティ)。 この永続的なクエリは、アドベンチャーの詳細表示を強化します。
# Retrieves an adventure Content Fragment based on it's slug
# Example query variables:
# {"slug": "bali-surf-camp"}
# Technically returns an adventure list but since the the slug
# property is set to be unique in the CF Model, only a single CF is expected

query($slug: String!) {
  adventureList(filter: {
        slug: {
          _expressions: [ { value: $slug } ]
        }
      }) {
    items {
      _path
      title
      slug
      activity
      adventureType
      price
      tripLength
      groupSize
      difficulty
      price
      primaryImage {
        ... on ImageRef {
          _path
          mimeType
          width
          height
        }
      }
      description {
        json
        plaintext
      }
      itinerary {
        json
        plaintext
      }
    }
    _references {
      ...on AdventureModel {
        _path
        slug
        title
        price
        __typename
      }
    }
  }
}

GraphQL 永続クエリを実行

AEMで永続化されたクエリは HTTPGETを介して実行されるので、 Java 用AEMヘッドレスクライアント は、AEMに対して永続化された GraphQL クエリを実行し、アドベンチャーコンテンツをアプリに読み込むために使用されます。

永続化された各クエリには、AEM HTTPGETエンドポイントを非同期で呼び出し、カスタム定義を使用してアドベンチャーデータを返す、対応する「loader」クラスがあります データモデル.

  • loader/AdventuresLoader.java

    を使用して、アプリケーションのホーム画面にある Adventures のリストを取得します。 wknd-shared/adventures-all 永続化されたクエリ。

  • loader/AdventureLoader.java

    を介して選択する単一のアドベンチャーを取得します。 slug パラメータ、使用 wknd-shared/adventure-by-slug 永続化されたクエリ。

//AdventuresLoader.java

public static final String PERSISTED_QUERY_NAME = "/wknd-shared/adventures-all";
...
AEMHeadlessClientBuilder builder = AEMHeadlessClient.builder().endpoint(config.getContentApiEndpoint());

// Optional authentication for basic auth
String user = config.getContentApiUser();
String password = config.getContentApiPassword();

if (user != null && password != null) {
    builder.basicAuth(user, password);
}

AEMHeadlessClient client = builder.build();
// run a persistent query and get a response
GraphQlResponse response = client.runPersistedQuery(PERSISTED_QUERY_NAME);

GraphQL 応答データモデル

Adventure.java は、GraphQL リクエストの JSON データで初期化され、Android アプリケーションのビューで使用するアドベンチャーをモデル化する Java POJO です。

表示

Android アプリケーションは、2 つのビューを使用して、モバイルエクスペリエンスにアドベンチャーデータを表示します。

  • AdventureListFragment.java

    を呼び出します。 AdventuresLoader 返された冒険をリストに表示します。

  • AdventureDetailFragment.java

    を呼び出します。 AdventureLoader の使用 slug アドベンチャー選択経由で渡されるパラメーター AdventureListFragment 単一の冒険の詳細を表示し、表示します。

リモート画像

loader/RemoteImagesCache.java は、Android の UI 要素で使用できるように、キャッシュ内にリモート画像を準備するのに役立つユーティリティクラスです。 アドベンチャーコンテンツは、URL を介してAEM Assets内の画像を参照し、このクラスは、そのコンテンツの表示に使用されます。

その他のリソース

このページ