Android应用程序

示例应用程序是探索Adobe Experience Manager(AEM)无头功能的绝佳方式。 提供了一个Android应用程序,用于演示如何使用AEM的GraphQL API查询内容。 的 AEM Headless Client for Java 用于执行GraphQL查询并将数据映射到Java对象以为应用程序提供动力。

查看 GitHub上的源代码

前提条件

应在本地安装以下工具:

AEM要求

应用程序旨在连接到AEM 发布WKND参考站点 已安装。

我们建议 将WKND引用站点部署到Cloud Service环境. 使用的本地设置 AEM Cloud Service SDKAEM 6.5快速入门Jar 也可使用。

使用方法

  1. 克隆 aem-guides-wknd-graphql 存储库:

    git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Launch Android Studio 并打开文件夹 android-app

  3. 修改文件 config.properties at app/src/main/assets/config.properties 更新 contentApi.endpoint 要匹配target 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特殊别名 用于本地主机。 所以 10.0.2.2:4502 等于 localhost:4502. 如果连接到AEM发布环境(推荐),则无需授权,并且 contentAPi.usercontentApi.password 可留空。

如果连接到AEM创作环境 授权 必需。 默认情况下,应用程序设置为使用基本身份验证,并且用户名和密码为 admin:admin. 的 AEMHeadlessClientBuilder 提供使用 基于令牌的身份验证. 在中使用基于令牌的身份验证更新客户端生成器 AdventureLoader.javaAdventuresLoader.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 Headless Client for Java 应用程序使用来对AEM执行GraphQL查询,并将冒险内容加载到应用程序中。

AdventuresLoader.java 是在应用程序主屏幕上获取并加载Adventures初始列表的文件。 它利用 持久化查询 其中 预包装 和WKND引用站点。 端点为 /wknd/adventures-all. AEMHeadlessClientBuilder 基于中设置的api端点实例化新实例 config.properties.

//AdventuresLoader.java

public static final String PERSISTED_QUERY_NAME = "/wknd/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);

AdventureLoader.java 是为每个详细视图获取并加载Adventure内容的文件。 再次 AEMHeadlessClient 用于执行查询。 根据Adventure内容片段的路径执行常规graphQL查询。 查询将在名为的单独文件中进行维护 adventureByPath.query

AEMHeadlessClientBuilder builder = AEMHeadlessClient.builder().endpoint(config.getContentApiEndpoint());
String user = config.getContentApiUser();
String password = config.getContentApiPassword();
if (user != null && password != null) {
    builder.basicAuth(user, password);
}
AEMHeadlessClient client = builder.build();

// based on the file adventureByPath.query
String query = readFile(getContext(), QUERY_FILE_NAME);

// construct a parameter map to dynamically pass in adventure path
Map<String, Object> params = new HashMap<>();
params.put("adventurePath", this.path);

// execute the query based on the adventureByPath query and passed in parameters
GraphQlResponse response = client.runQuery(query, params);

Adventure.java 是一个POJO,通过GraphQL请求中的JSON数据进行初始化。

RemoteImagesCache.java 是一个实用程序类,可帮助在缓存中准备远程图像,以便与Android UI元素一起使用。 Adventure内容通过URL引用AEM Assets中的图像,此类用于显示该内容。

视图

AdventureListFragment.java — 在调用时触发 AdventuresLoader 并在列表中显示返回的冒险。

AdventureDetailFragment.java — 初始化 AdventureLoader 并显示单次冒险的细节。

其他资源

在此页面上