App Android
Le applicazioni di esempio sono un ottimo modo per esplorare le funzionalità headless di Adobe Experience Manager (AEM). Questa applicazione Android illustra come eseguire query sui contenuti che utilizzano le API GraphQL dell’AEM. Il Client AEM headless per Java viene utilizzato per eseguire le query GraphQL e mappare i dati su oggetti Java per alimentare l’app.
Visualizza codice sorgente su GitHub
Prerequisiti prerequisites
I seguenti strumenti devono essere installati localmente:
Requisiti AEM
L’applicazione Android funziona con le seguenti opzioni di implementazione AEM. Tutte le distribuzioni richiedono Sito WKND v3.0.0+ da installare.
L’applicazione Android è progettata per connettersi a un Pubblicazione AEM Tuttavia, può originare il contenuto da AEM Author se l’autenticazione viene fornita nella configurazione dell’applicazione Android.
Come usare
-
Clona il
adobe/aem-guides-wknd-graphql
archivio:code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
-
Apri Android Studio e apri la cartella
android-app
-
Modificare il file
config.properties
aapp/src/main/assets/config.properties
e aggiornacontentApi.endpoint
per adattarsi all’ambiente AEM di destinazione:code language-plain contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
Autenticazione di base
Il
contentApi.user
econtentApi.password
autentica un utente AEM locale con accesso al contenuto WKND GraphQL.code language-plain contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com contentApi.user=my-special-android-app-user contentApi.password=password123
-
Scarica un Dispositivo virtuale Android (API minima 28).
-
Crea e implementa l’app utilizzando l’emulatore Android.
Connessione agli ambienti AEM
Se ci si connette a un ambiente di authoring AEM autorizzazione è obbligatorio. Il AEMHeadlessClientBuilder consente di utilizzare autenticazione basata su token. Per utilizzare il generatore client di aggiornamento autenticazione basato su token in 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)
Il codice
Di seguito è riportato un breve riepilogo dei file e del codice importanti utilizzati per alimentare l'applicazione. Il codice completo è disponibile su GitHub.
Query persistenti
Seguendo le best practice di AEM Headless, l’applicazione iOS utilizza query persistenti AEM GraphQL per eseguire query sui dati di avventura. L’applicazione utilizza due query persistenti:
wknd/adventures-all
query persistente, che restituisce tutte le avventure in AEM con un set abbreviato di proprietà. Questa query persistente guida l’elenco di avventure della visualizzazione iniziale.
# Retrieves a list of all adventures
{
adventureList {
items {
_path
slug
title
price
tripLength
primaryImage {
... on ImageRef {
_dynamicUrl
_path
}
}
}
}
}
wknd/adventure-by-slug
query persistente, che restituisce una singola avventura dislug
(proprietà personalizzata che identifica in modo univoco un’avventura) con un set completo di proprietà. Questa query persistente attiva le visualizzazioni dei dettagli dell’avventura.
# 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
}
}
}
}
Esegui query persistente GraphQL
Le query persistenti dell’AEM vengono eseguite tramite HTTP GET, pertanto Client AEM headless per Java viene utilizzato per eseguire le query GraphQL persistenti sull’AEM e caricare il contenuto dell’avventura nell’app.
Ogni query persistente ha una classe "loader" corrispondente, che chiama in modo asincrono l’endpoint del GET HTTP dell’AEM e restituisce i dati dell’avventura utilizzando il file personalizzato definito modello dati.
-
loader/AdventuresLoader.java
Recupera l’elenco delle Avventure nella schermata iniziale dell’applicazione utilizzando
wknd-shared/adventures-all
query persistente. -
loader/AdventureLoader.java
Recupera una singola avventura selezionandola tramite
slug
, utilizzandowknd-shared/adventure-by-slug
query 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);
Modelli di dati di risposta GraphQL data-models
Adventure.java
è un POJO Java inizializzato con i dati JSON della richiesta GraphQL e modella un’avventura da utilizzare nelle viste dell’applicazione Android.
Viste
L’applicazione Android utilizza due viste per presentare i dati dell’avventura nell’esperienza mobile.
-
AdventureListFragment.java
Richiama
AdventuresLoader
e mostra le avventure restituite in un elenco. -
AdventureDetailFragment.java
Richiama
AdventureLoader
utilizzandoslug
param passato tramite la selezione di avventura sulAdventureListFragment
visualizza e mostra i dettagli di una singola avventura.
Immagini remote
loader/RemoteImagesCache.java
è una classe di utilità che consente di preparare immagini remote in una cache in modo che possano essere utilizzate con elementi dell’interfaccia utente Android. Il contenuto dell’avventura fa riferimento alle immagini in AEM Assets tramite un URL e questa classe viene utilizzata per visualizzare tale contenuto.