Android App
- 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.
Bekijk de broncode op GitHub
Vereisten
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-graphql
klonen:$ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
-
Open Studio van Androiden open de omslag
android-app
-
Wijzig het bestand
config.properties
opapp/src/main/assets/config.properties
en werk hetcontentApi.endpoint
bij zodat dit overeenkomt met de AEM-doelomgeving:contentApi.endpoint=https://publish-p123-e456.adobeaemcloud.com
Basisauthentificatie
Met
contentApi.user
encontentApi.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
-
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 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 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 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 querywknd-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 deslug
param die via de avontuurselectie op deAdventureListFragment
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.