App Android

[AEM headless as a Cloud Service]{class="badge informative"}

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.

App Java Android con AEM headless

Visualizza il codice sorgente in GitHub

Prerequisiti prerequisites

I seguenti strumenti devono essere installati localmente:

Requisiti AEM

L’applicazione Android funziona con le seguenti opzioni di distribuzione dell’AEM. Tutte le distribuzioni richiedono l'installazione del sito WKND v3.0.0+.

L'applicazione Android è progettata per connettersi a un ambiente AEM Publish, tuttavia può creare contenuto da AEM Author se l'autenticazione viene fornita nella configurazione dell'applicazione Android.

Come usare

  1. Clona l'archivio adobe/aem-guides-wknd-graphql:

    code language-shell
    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Apri Android Studio e apri la cartella android-app

  3. Modificare il file config.properties in app/src/main/assets/config.properties e aggiornare contentApi.endpoint in modo che corrisponda all'ambiente AEM di destinazione:

    code language-plain
    contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
    

    Autenticazione di base

    contentApi.user e contentApi.password autenticano un utente AEM locale con accesso al contenuto GraphQL WKND.

    code language-plain
    contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com
    contentApi.user=my-special-android-app-user
    contentApi.password=password123
    
  4. Scarica un dispositivo virtuale Android (API minima 28).

  5. Crea e implementa l’app utilizzando l’emulatore Android.

Connessione agli ambienti AEM

Se è richiesta la connessione a un ambiente di authoring AEM autorizzazione. AEMHeadlessClientBuilder consente di utilizzare l'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 si trova 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:

  • Query persistente wknd/adventures-all, 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
                }
            }
        }
    }
}
  • Query persistente wknd/adventure-by-slug, che restituisce una singola avventura di slug (una 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 su HTTP GET, pertanto il 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 HTTP del GET AEM e restituisce i dati dell'avventura utilizzando il modello dati definito personalizzato.

  • loader/AdventuresLoader.java

    Recupera l'elenco delle avventure nella schermata iniziale dell'applicazione utilizzando la query persistente wknd-shared/adventures-all.

  • loader/AdventureLoader.java

    Recupera una singola avventura selezionandola tramite il parametro slug, utilizzando la query persistente 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);

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 visualizza le avventure restituite in un elenco.

  • AdventureDetailFragment.java

    Richiama AdventureLoader utilizzando il parametro slug trasmesso tramite la selezione di avventura nella visualizzazione AdventureListFragment e visualizza 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 gli elementi dell'interfaccia utente di Android. Il contenuto dell’avventura fa riferimento alle immagini in AEM Assets tramite un URL e questa classe viene utilizzata per visualizzare tale contenuto.

Risorse aggiuntive

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4