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.propertiesvidapp/src/main/assets/config.propertiesoch uppdateracontentApi.endpointså att den matchar AEM-målmiljön:code language-plain contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.comGrundläggande autentisering
contentApi.userochcontentApi.passwordautentiserar 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-allbestä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-slugbestä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.javaHämtar listan med tillägg på programmets startskärm med hjälp av den
wknd-shared/adventures-allbeständiga frågan. - 
                  
loader/AdventureLoader.javaHämtar ett enskilt äventyr som markerar det via parametern
slug, med hjälp av denwknd-shared/adventure-by-slugbestä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.javaAnropar
AdventuresLoaderoch visar de returnerade äventyren i en lista. - 
                  
AdventureDetailFragment.javaAnropar
AdventureLoadermed denslug-parameter som skickas via äventyvalet i vynAdventureListFragmentoch 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.