DocumentatieAEMTutorials voor AEMAEM Headless-tutorial

Android App

Laatst bijgewerkt: 5 mei 2025
  • Van toepassing op:
  • Experience Manager as a Cloud Service
  • Onderwerpen:
  • Contentfragmenten

Gemaakt voor:

  • Beginner
  • Ontwikkelaar

AEM Headless as a Cloud Service

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 Javawordt gebruikt om de vragen van GraphQL uit te voeren en gegevens in kaart te brengen aan de voorwerpen van Java om app te drijven.

Android Java app met AEM Headless

Bekijk de broncode op GitHub

Vereisten

De volgende gereedschappen moeten lokaal worden geïnstalleerd:

  • de Studio van Android
  • Git

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.

  • AEM as a Cloud Service

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

  1. De gegevensopslagruimte adobe/aem-guides-wknd-graphql klonen:

    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Open Studio van Androiden open de omslag android-app

  3. Wijzig het bestand config.properties op app/src/main/assets/config.properties en werk het contentApi.endpoint bij zodat dit overeenkomt met de AEM-doelomgeving:

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

    Basisauthentificatie

    Met contentApi.user en contentApi.password kunt u een lokale AEM-gebruiker verifiëren met toegang tot WKND GraphQL-inhoud.

    contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com
    contentApi.user=my-special-android-app-user
    contentApi.password=password123
    
  4. Download een Virtuele Apparaat van Android(minimum API 28).

  5. Ontwikkel en implementeer de app met de Android-emulator.

Verbinding maken met AEM-omgevingen

Als het verbinden met een het auteursmilieu van AEM vergunningwordt vereist. AEMHeadlessClientBuilderverstrekt de capaciteit om op teken-gebaseerde authentificatiete 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 GitHubworden 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-all bleef 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-slug persisted query, die één avontuur retourneert van slug (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 Javagebruikt 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.java

    Hiermee wordt de lijst met avonturen opgehaald op het beginscherm van de toepassing met de wknd-shared/adventures-all permanente query.

  • loader/AdventureLoader.java

    Hiermee wordt één avontuur opgehaald dat het via de parameter slug selecteert en de query wknd-shared/adventure-by-slug persisted 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

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.java

    Roept AdventuresLoader aan en geeft de geretourneerde avonturen in een lijst weer.

  • AdventureDetailFragment.java

    Roept AdventureLoader aan gebruikend de slug param die via de avontuurselectie op de AdventureListFragment mening 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.

Aanvullende bronnen

  • Begonnen het Worden met de Zetel van AEM - Zelfstudie van GraphQL
  • Hoofdloze Cliënt van AEM voor Java
recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4