Android App

[AEM, hoofdloos 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 inhoud kunt opvragen met de GraphQL API's van AEM. De AEM Zwaarloze Cliënt 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 prerequisites

De volgende gereedschappen moeten lokaal worden geïnstalleerd:

AEM

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 een AEM het milieu van Publish te verbinden, nochtans kan het inhoud van AEM Auteur 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:

    code language-shell
    $ 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 bij app/src/main/assets/config.properties en werk het contentApi.endpoint bij zodat dit overeenkomt met de AEM van het doel:

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

    Basisauthentificatie

    Met contentApi.user en contentApi.password kunt u een lokale AEM 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
    
  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 AEM auteursmilieu 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 AEM Beste praktijken zonder hoofd, gebruikt de toepassing van iOS AEM GraphQL voortgezette vragen om avontuurgegevens te vragen. De toepassing gebruikt twee voortgeduurde vragen:

  • wknd/adventures-all persisted query, die alle avonturen in AEM met een verkorte set eigenschappen retourneert. 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 blijvende vragen worden uitgevoerd over de GET van HTTP en zo, wordt de AEM Zwaardeloze cliënt 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 AEM eindpunt van de GET van HTTP roept, en de avontuurgegevens 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 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.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

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4