Android App
[AEM Headless as a Cloud Service]{class="badge informative"}
Exempelprogram är ett bra sätt att utforska de headless-funktionerna i Adobe Experience Manager (AEM). I det här Android-programmet visas hur du frågar efter innehåll med GraphQL API:er för AEM. AEM Headless Client för Java används för att köra GraphQL-frågor och mappa data till Java-objekt för att styra programmet.
Visa källkoden på GitHub
Förutsättningar prerequisites
Följande verktyg bör installeras lokalt:
AEM
Android fungerar med följande distributionsalternativ för AEM. Alla distributioner kräver att WKND-platsen v3.0.0+ är installerad.
Android-programmet är utformat för att ansluta till en AEM Publish -miljö, men det kan hämta innehåll från AEM Author om autentisering anges i Android-programmets konfiguration.
Så här använder du
-
Klona
adobe/aem-guides-wknd-graphql
-databasen: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
vidapp/src/main/assets/config.properties
och uppdateracontentApi.endpoint
så att den matchar AEM-målmiljön:code language-plain contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
Grundläggande autentisering
contentApi.user
ochcontentApi.password
autentiserar en lokal AEM-användare 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).
-
Bygg och distribuera appen med Android-emulatorn.
Ansluta till AEM-miljöer
Om du ansluter till en AEM-redigeringsmiljö krävs behörighet. 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
I enlighet med bästa praxis för AEM Headless 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 enskilt äventyr frånslug
(en anpassad egenskap som unikt identifierar ett äventyr) med en fullständig 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 över HTTP GET och därför används klienten AEM Headless för Java för att köra beständiga GraphQL-frågor mot AEM och läsa in äventyret i appen.
Varje beständig fråga har en motsvarande inläsarklass, som asynkront anropar AEM HTTP GET-slutpunkten och returnerar äventyrsdata med den anpassade definierade datamodellen.
-
loader/AdventuresLoader.java
Hämtar listan med tillägg på programmets startskärm med hjälp av den
wknd-shared/adventures-all
beständiga frågan. -
loader/AdventureLoader.java
Hämtar ett enskilt äventyr som markerar det via parametern
slug
, med hjälp av denwknd-shared/adventure-by-slug
beständiga frågan.
//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 som ska användas 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
med denslug
-parameter som skickas via äventyvalet i vynAdventureListFragment
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 UI-element. 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.