Android-app
[AEM Headless as a Cloud Service]{class="badge informative"}
Exempelprogram är ett bra sätt att utforska Adobe Experience Manager headless-funktioner (AEM). Det här Android-programmet visar hur du frågar efter innehåll med hjälp av GraphQL API:er för AEM. The AEM Headless Client for Java används för att köra GraphQL-frågor och mappa data till Java-objekt för att styra programmet.
Visa källkod på GitHub
Förutsättningar prerequisites
Följande verktyg bör installeras lokalt:
AEM
Android-programmet fungerar med följande AEM distributionsalternativ. Alla distributioner kräver WKND Site v3.0.0+ installeras.
Android-programmet är utformat för att ansluta till en AEM Publish -miljön kan däremot hämta innehåll från AEM författare om autentisering anges i Android-programmets konfiguration.
Så här använder du
-
Klona
adobe/aem-guides-wknd-graphql
databas:code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
-
Öppna Android Studio och öppna mappen
android-app
-
Ändra filen
config.properties
påapp/src/main/assets/config.properties
och uppdateracontentApi.endpoint
för att matcha AEM målmiljö:code language-plain contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
Grundläggande autentisering
The
contentApi.user
ochcontentApi.password
autentisera en lokal AEM med åtkomst till WKND GraphQL-innehåll.code language-plain contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com contentApi.user=my-special-android-app-user contentApi.password=password123
-
Hämta en Virtuell Android-enhet (minst API 28).
-
Skapa och distribuera appen med Android-emulatorn.
Ansluta till AEM
Om du ansluter till en AEM författarmiljö auktorisation är obligatoriskt. The AEMHeadlessClientBuilder ger möjlighet att använda tokenbaserad autentisering. Så här använder du tokenbaserad klientbyggare för uppdatering av autentisering i AdventureLoader.java
och 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)
Koden
Nedan följer en kort sammanfattning av de filer och den kod som är viktiga för programmet. Den fullständiga koden finns på GitHub.
Beständiga frågor
Efter AEM Headless-metodtips använder iOS-programmet AEM GraphQL beständiga frågor för att fråga efter äventyrsdata. Programmet använder två beständiga frågor:
wknd/adventures-all
beständig fråga, som returnerar alla äventyr i AEM med en förkortad uppsättning egenskaper. Den här beständiga frågan styr den inledande vyns äventyrslista.
# Retrieves a list of all adventures
{
adventureList {
items {
_path
slug
title
price
tripLength
primaryImage {
... on ImageRef {
_dynamicUrl
_path
}
}
}
}
}
wknd/adventure-by-slug
beständig fråga, som returnerar ett enda äventyr avslug
(en anpassad egenskap som unikt identifierar ett äventyr) med en komplett uppsättning egenskaper. Den här beständiga frågan styr äventyrsdetaljvyerna.
# 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
}
}
}
}
Kör GraphQL beständig fråga
AEM beständiga frågor körs via HTTP-GET och därmed AEM Headless-klient för Java används för att köra beständiga GraphQL-frågor mot AEM och läsa in äventyrsinnehållet i appen.
Varje beständig fråga har en motsvarande"loader"-klass, som asynkront anropar den AEM HTTP-GETENS slutpunkt och returnerar äventyrsdata med hjälp av den anpassade definierade datamodell.
-
loader/AdventuresLoader.java
Hämtar listan med tillägg på programmets startsida med hjälp av
wknd-shared/adventures-all
beständig fråga. -
loader/AdventureLoader.java
Hämtar ett enskilt äventyr som markerar det via
slug
parameter, användawknd-shared/adventure-by-slug
beständig fråga.
//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);
GraphQL svarsdatamodeller data-models
Adventure.java
är en Java POJO som initieras med JSON-data från GraphQL-begäran och modellerar ett äventyr för användning i Android-programmets vyer.
Vyer
Android-programmet använder två vyer för att presentera äventyrsdata i mobilupplevelsen.
-
AdventureListFragment.java
Anropar
AdventuresLoader
och visar de returnerade äventyren i en lista. -
AdventureDetailFragment.java
Anropar
AdventureLoader
medslug
param som skickas via äventyret påAdventureListFragment
och visar information om ett enskilt äventyr.
Fjärrbilder
loader/RemoteImagesCache.java
är en verktygsklass som hjälper till att förbereda fjärrbilder i ett cacheminne så att de kan användas med Android-gränssnittselement. Innehållet i äventyret refererar till bilder i AEM Assets via en URL och den här klassen används för att visa innehållet.