Android App
[AEM Headless as a Cloud Service]{class="badge informative"}
Voorbeeldtoepassingen zijn een geweldige manier om de mogelijkheden zonder kop van Adobe Experience Manager (AEM) te verkennen. Deze Android-toepassing laat zien hoe u query's uitvoert op inhoud met de GraphQL API's van AEM. De  Hoofdloze Cliënt van AEM voor Java  wordt gebruikt om de vragen van GraphQL uit te voeren en gegevens in kaart te brengen aan de voorwerpen van Java om app te drijven.
          
          
Bekijk de  broncode op GitHub 
Vereisten prerequisites
De volgende gereedschappen moeten lokaal worden geïnstalleerd:
AEM-vereisten
De Android-toepassing werkt met de volgende AEM-implementatieopties. Alle plaatsingen vereisen de  Plaats van WKND v3.0.0+  om worden geïnstalleerd.
De toepassing van Android wordt ontworpen om met AEM te verbinden publiceert milieu, nochtans kan het inhoud van de Auteur van AEM als de authentificatie in de configuratie van de toepassing van Android wordt verstrekt.
Hoe wordt het gebruikt
- 
                  
De gegevensopslagruimte
adobe/aem-guides-wknd-graphqlklonen:code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git - 
                  
Open  Studio van Android  en open de omslag
android-app - 
                  
Wijzig het bestand
config.propertiesopapp/src/main/assets/config.propertiesen werk hetcontentApi.endpointbij zodat dit overeenkomt met de AEM-doelomgeving:code language-plain contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.comBasisauthentificatie
Met
contentApi.userencontentApi.passwordkunt u een lokale AEM-gebruiker verifiëren met toegang tot WKND GraphQL-inhoud.code language-plain contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com contentApi.user=my-special-android-app-user contentApi.password=password123 - 
                  
Download een  Virtuele Apparaat van Android  (minimum API 28).
 - 
                  
Ontwikkel en implementeer de app met de Android-emulator.
 
Verbinding maken met AEM-omgevingen
Als het verbinden met een het auteursmilieu van AEM  vergunning  wordt vereist.  AEMHeadlessClientBuilder  verstrekt de capaciteit om  op teken-gebaseerde authentificatie  te gebruiken. Om op een token gebaseerde verificatie-update-clientbuilder te gebruiken in AdventureLoader.java en 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)
            De code
Hieronder volgt een korte samenvatting van de belangrijke bestanden en code die worden gebruikt om de toepassing te besturen. De volledige code kan op  GitHub  worden gevonden.
Blijvende query's
Na de beste praktijken van AEM Headless, gebruikt de toepassing van iOS AEM GraphQL voortgezette vragen om avontuurgegevens te vragen. De toepassing gebruikt twee voortgeduurde vragen:
wknd/adventures-allbleef query uitvoeren, die alle avonturen in AEM retourneert met een verkorte set eigenschappen. Deze hardnekkige vraag drijft de aanvankelijke lijst van het avontuur van de mening.
# Retrieves a list of all adventures
{
    adventureList {
        items {
            _path
            slug
            title
            price
            tripLength
            primaryImage {
                ... on ImageRef {
                _dynamicUrl
                _path
                }
            }
        }
    }
}
            wknd/adventure-by-slugpersisted query, die één avontuur retourneert vanslug(een aangepaste eigenschap die een avontuur op unieke wijze identificeert) met een volledige set eigenschappen. Dit bleef vraagbevoegdheden de meningen van het avontuurdetail.
# 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
      }
    }
  }
}
            GraphQL-query uitgevoerd
AEM voortgezette vragen worden uitgevoerd over HTTP GET en zo, wordt de  Hoofdloze cliënt van AEM voor Java  gebruikt om de voortgezette vragen van GraphQL tegen AEM uit te voeren en de avontuurinhoud in app te laden.
Elke voortgeduurde vraag heeft een overeenkomstige "lader"klasse, die asynchroon het eindpunt van HTTP van AEM roept GET, en de adventure gegevens terugkeert gebruikend de douane bepaalde  gegevensmodel .
- 
                  
loader/AdventuresLoader.javaHiermee wordt de lijst met avonturen opgehaald op het beginscherm van de toepassing met de
wknd-shared/adventures-allpermanente query. - 
                  
loader/AdventureLoader.javaHiermee wordt één avontuur opgehaald dat het via de parameter
slugselecteert en de querywknd-shared/adventure-by-slugpersisted gebruikt. 
//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-responsgegevensmodellen data-models
Adventure.java is een Java POJO die wordt geïnitialiseerd met de JSON-gegevens uit de GraphQL-aanvraag en een avontuur modelleert voor gebruik in de weergaven van de Android-toepassing.
Weergaven
De Android-toepassing gebruikt twee weergaven om de avontuurgegevens in de mobiele ervaring te presenteren.
- 
                  
AdventureListFragment.javaRoept
AdventuresLoaderaan en geeft de geretourneerde avonturen in een lijst weer. - 
                  
AdventureDetailFragment.javaRoept
AdventureLoaderaan gebruikend deslugparam die via de avontuurselectie op deAdventureListFragmentmening wordt overgegaan, en toont de details van één enkel avontuur. 
Externe afbeeldingen
loader/RemoteImagesCache.java is een hulpprogrammaklasse waarmee externe afbeeldingen in een cache kunnen worden voorbereid, zodat ze kunnen worden gebruikt met Android UI-elementen. De avontuurinhoud verwijst naar afbeeldingen in AEM Assets via een URL en deze klasse wordt gebruikt om die inhoud weer te geven.