Aplicativos de exemplo são uma ótima maneira de explorar as capacidades headless do Adobe Experience Manager (AEM). Este aplicativo para Android demonstra como consultar conteúdo usando as APIs do GraphQL do AEM. A variável Cliente AEM Headless para Java é usado para executar as consultas do GraphQL e mapear dados para objetos Java para potencializar o aplicativo.
Exibir o código-fonte no GitHub
As seguintes ferramentas devem ser instaladas localmente:
O aplicativo Android funciona com as seguintes opções de implantação do AEM. Todas as implantações exigem o Site WKND v3.0.0+ a ser instalado.
O aplicativo Android foi projetado para se conectar a um AEM Publish ambiente, no entanto, ele pode obter conteúdo do Autor do AEM se a autenticação for fornecida na configuração do aplicativo Android.
Clonar o adobe/aem-guides-wknd-graphql
repositório:
$ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
Launch Android Studio e abra a pasta android-app
Modificar o arquivo config.properties
em app/src/main/assets/config.properties
e atualizar contentApi.endpoint
para corresponder ao ambiente do AEM do target:
contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
Autenticação básica
A variável contentApi.user
e contentApi.password
autenticar um usuário local do AEM com acesso ao conteúdo do WKND GraphQL.
contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com
contentApi.user=admin
contentApi.password=admin
Baixar um Dispositivo virtual Android (API mínima 28).
Crie e implante o aplicativo usando o emulador de Android.
Se estiver se conectando a um ambiente de autor de AEM autorização é obrigatório. A variável AEMHeadlessClientBuilder oferece a capacidade de usar autenticação baseada em token. Para usar a autenticação baseada em token, atualize o construtor do cliente no AdventureLoader.java
e 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)
Abaixo está um breve resumo dos arquivos importantes e do código usado para potencializar o aplicativo. O código completo pode ser encontrado em GitHub.
Seguindo as práticas recomendadas do AEM Headless, o aplicativo iOS usa consultas persistentes do AEM GraphQL para consultar dados de aventura. O aplicativo usa duas consultas persistentes:
wknd/adventures-all
consulta persistente, que retorna todas as aventuras no AEM com um conjunto abreviado de propriedades. Essa consulta persistente direciona a lista de aventura da visualização inicial.# Retrieves a list of all adventures
{
adventureList {
items {
_path
slug
title
price
tripLength
primaryImage {
... on ImageRef {
_dynamicUrl
_path
}
}
}
}
}
wknd/adventure-by-slug
consulta persistente, que retorna uma única aventura de slug
(uma propriedade personalizada que identifica exclusivamente uma aventura) com um conjunto completo de propriedades. Essa consulta persistente possibilita as exibições de detalhes de aventura.# 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 {
_dynamicUrl
_path
}
}
description {
json
plaintext
}
itinerary {
json
plaintext
}
}
_references {
...on AdventureModel {
_path
slug
title
price
__typename
}
}
}
}
As consultas persistentes de AEM são executadas por HTTP GET e, portanto, o Cliente AEM Headless para Java é usado para executar as consultas persistentes do GraphQL em relação ao AEM e carregar o conteúdo de aventura no aplicativo.
Cada consulta persistente tem uma classe "loader" correspondente, que chama de forma assíncrona o ponto de GET HTTP do AEM e retorna os dados de aventura usando a definição personalizada modelo de dados.
loader/AdventuresLoader.java
Obtém a lista de Aventuras na tela inicial do aplicativo usando o wknd-shared/adventures-all
consulta persistente.
loader/AdventureLoader.java
Busca uma única aventura selecionando-a por meio da slug
parâmetro, usando o wknd-shared/adventure-by-slug
consulta persistente.
//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);
Adventure.java
é um POJO Java inicializado com os dados JSON da solicitação do GraphQL e modela uma aventura para uso nas visualizações do aplicativo Android.
O aplicativo Android usa duas visualizações para apresentar os dados de aventura na experiência móvel.
AdventureListFragment.java
Chama o AdventuresLoader
e exibe as aventuras retornadas em uma lista.
AdventureDetailFragment.java
Chama o AdventureLoader
usando o slug
parâmetro passado pela seleção de aventura no AdventureListFragment
e exibe os detalhes de uma única aventura.
loader/RemoteImagesCache.java
é uma classe de utilitário que ajuda a preparar imagens remotas em um cache para que elas possam ser usadas com elementos da interface do usuário do Android. O conteúdo de aventura faz referência a imagens no AEM Assets por meio de um URL e essa classe é usada para exibir esse conteúdo.