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.
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
-
De gegevensopslagruimte
adobe/aem-guides-wknd-graphql
klonen:code language-shell $ 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
bijapp/src/main/assets/config.properties
en werk hetcontentApi.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
encontentApi.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
-
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 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 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 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 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 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 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.