Aplicativo Android
[AEM Headless as a Cloud Service]{class="badge informative"}
Aplicativos de exemplo são uma ótima maneira de explorar as capacidades headless do Adobe Experience Manager (AEM). Este aplicativo do Android demonstra como consultar conteúdo usando as APIs do GraphQL do AEM. O AEM Headless Client 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
Pré-requisitos prerequisites
As seguintes ferramentas devem ser instaladas localmente:
Requisitos do AEM
O aplicativo Android funciona com as seguintes opções de implantação do AEM. Todas as implantações exigem que o WKND Site v3.0.0+ esteja instalado.
O aplicativo do Android foi projetado para se conectar a um ambiente AEM do Publish AEM. No entanto, ele poderá obter conteúdo do autor do se a autenticação for fornecida na configuração do aplicativo do Android.
Como usar
-
Clonar o repositório
adobe/aem-guides-wknd-graphql
:code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
-
Abra o Android Studio e abra a pasta
android-app
-
Modifique o arquivo
config.properties
emapp/src/main/assets/config.properties
e atualizecontentApi.endpoint
para corresponder ao seu ambiente AEM de destino:code language-plain contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
Autenticação básica
O
contentApi.user
e ocontentApi.password
autenticam um usuário AEM local com acesso ao conteúdo do WKND GraphQL.code language-plain contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com contentApi.user=my-special-android-app-user contentApi.password=password123
-
Baixe um Dispositivo virtual do Android (API mínima de 28).
-
Crie e implante o aplicativo usando o emulador do Android.
Conexão com ambientes AEM
Se a conexão com um ambiente de autor AEM autorização for necessária. O AEMHeadlessClientBuilder fornece a capacidade de usar a autenticação baseada em token. Para usar o criador de cliente de atualização de autenticação baseada em token em 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)
O código
Abaixo está um breve resumo dos arquivos importantes e do código usado para potencializar o aplicativo. O código completo pode ser encontrado no GitHub.
Consultas persistentes
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 porslug
(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
}
}
}
}
Executar consulta persistente do GraphQL
As consultas persistentes do AEM são executadas por HTTP GET e, portanto, o cliente AEM Headless para Java é usado para executar as consultas persistentes do GraphQL AEM no 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 AEM e retorna os dados de aventura usando o modelo de dados definido pelo cliente.
-
loader/AdventuresLoader.java
Obtém a lista de Aventuras na tela inicial do aplicativo usando a consulta persistente
wknd-shared/adventures-all
. -
loader/AdventureLoader.java
Busca uma única aventura selecionando-a por meio do parâmetro
slug
, usando a consulta persistentewknd-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);
Modelos de dados de resposta do GraphQL data-models
Adventure.java
é um POJO Java inicializado com os dados JSON da solicitação do GraphQL e modela uma aventura para uso nas exibições do aplicativo Android.
Exibições
O aplicativo Android usa duas visualizações para apresentar os dados de aventura na experiência móvel.
-
AdventureListFragment.java
Chama
AdventuresLoader
e exibe as aventuras retornadas em uma lista. -
AdventureDetailFragment.java
Invoca o
AdventureLoader
usando o parâmetroslug
transmitido por meio da seleção de aventura na exibiçãoAdventureListFragment
, e exibe os detalhes de uma única aventura.
Imagens remotas
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.