Le chapitre 7 du tutoriel utilise une application mobile Android native pour consommer du contenu d’AEM Content Services.
Ce tutoriel utilise une application mobile Android native simple pour utiliser et afficher le contenu d’événement exposé par AEM Content Services.
L’utilisation de Android n’est pas importante, et l’application mobile consommatrice peut être écrite dans n’importe quelle structure pour n’importe quelle plateforme mobile, par exemple iOS.
Android est utilisé pour les tutoriels en raison de la possibilité d’exécuter un émulateur Android sous Windows, macOs et Linux, sa popularité, et du fait qu’il peut être écrit en tant que Java, une langue bien comprise par les développeurs AEM.
L’application mobile Android du tutoriel est notdestiné à expliquer comment créer des applications mobiles Android ou transmettre les bonnes pratiques de développement Android, mais plutôt à illustrer comment AEM Content Services peut être utilisé à partir d’une application mobile.
Si AEM Publish n’est pas exécuté sur http://localhost:4503 l’hôte et le port peuvent être mis à jour dans le rapport Settings pour pointer vers la propriété hôte/port de publication AEM.
Cette section décrit le code de l’application mobile Android qui interagit le plus et qui dépend d’AEM Content Services et de sa sortie JSON.
Lors du chargement, l’application mobile effectue les HTTP GET
to /content/wknd-mobile/en/api/events.model.json
qui est le point d’entrée AEM Content Services configuré pour fournir le contenu permettant de piloter l’application mobile.
Parce que le modèle modifiable de l’API Events (/content/wknd-mobile/en/api/events.model.json
) est verrouillée, l’application mobile peut être codée pour rechercher des informations spécifiques à des emplacements spécifiques dans la réponse JSON.
HTTP GET
demande à AEM Publish à l’adresse /content/wknd-mobile/en/api/events.model.json
pour collecter le contenu afin de renseigner l’interface utilisateur de l’application mobile.Vous trouverez ci-dessous un condensé du code dans le fichier de l’application mobile. MainActivity
chargé d’appeler AEM Content Services pour collecter le contenu qui entraîne l’expérience de l’application mobile.
protected void onCreate(Bundle savedInstanceState) {
...
// Create the custom objects that will map the JSON -> POJO -> View elements
final List<ViewBinder> viewBinders = new ArrayList<>();
viewBinders.add(new LogoViewBinder(this, getAemHost(), (ImageView) findViewById(R.id.logo)));
viewBinders.add(new TagLineViewBinder(this, (TextView) findViewById(R.id.tagLine)));
viewBinders.add(new EventsViewBinder(this, getAemHost(), (RecyclerView) findViewById(R.id.eventsList)));
...
initApp(viewBinders);
}
private void initApp(final List<ViewBinder> viewBinders) {
final String aemUrl = getAemUrl(); // -> http://localhost:4503/content/wknd-mobile/en/api/events.mobile.json
JsonObjectRequest request = new JsonObjectRequest(aemUrl, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
for (final ViewBinder viewBinder : viewBinders) {
viewBinder.bind(response);
}
}
},
...
);
}
onCreate(..)
est le crochet d’initialisation de l’application mobile et enregistre les 3 ViewBinders
responsable de l’analyse du fichier JSON et de la liaison des valeurs à la variable View
éléments .
initApp(...)
est ensuite appelée, ce qui envoie la requête de GET HTTP au point de terminaison AEM Content Services sur AEM Publish pour collecter le contenu. Lors de la réception d’une réponse JSON valide, la réponse JSON est transmise à chaque ViewBinder
qui est chargé d’analyser le fichier JSON et de le lier au fichier mobile ; View
éléments .
Ensuite, nous allons voir le LogoViewBinder
, qui est simple, mais met en évidence plusieurs points importants.
public class LogoViewBinder implements ViewBinder {
...
public void bind(JSONObject jsonResponse) throws JSONException, IOException {
final JSONObject components = jsonResponse.getJSONObject(":items").getJSONObject("root").getJSONObject(":items");
if (components.has("image")) {
final Image image = objectMapper.readValue(components.getJSONObject("image").toString(), Image.class);
final String imageUrl = aemHost + image.getSrc();
Glide.with(context).load(imageUrl).into(logo);
} else {
Log.d("WKND", "Missing Logo");
}
}
}
La première ligne de bind(...)
navigue vers le bas de la réponse JSON à l’aide des clés ; :items → root →:items qui représente le conteneur de mise en page AEM auquel les composants ont été ajoutés.
A partir de là, une vérification pour une clé nommée image, qui représente le composant Image (il est important que ce nom de noeud → clé JSON soit stable). Si cet objet existe, il est lu et mappé à l’objet POJO d’image personnalisée via le Jackson ObjectMapper
bibliothèque . Le POJO de l'image est exploré ci-dessous.
Enfin, le logo src
est chargé dans Android ImageView à l’aide de la variable Glide bibliothèque d’assistance.
Notez que nous devons fournir le schéma AEM, l’hôte et le port (via aemHost
) à l’instance de publication AEM en tant qu’AEM Content Services ne fournira que le chemin d’accès JCR (c.-à-d. /content/dam/wknd-mobile/images/wknd-logo.png
) au contenu référencé.
Bien que cela soit facultatif, l’utilisation de la variable Jackson ObjectMapper ou des fonctionnalités similaires fournies par d’autres bibliothèques comme Gson, permettent de mapper des structures JSON complexes à des POJO Java sans avoir à traiter directement les objets JSON natifs eux-mêmes. Dans ce cas simple, nous mettons en correspondance la variable src
de la fonction image
Objet JSON, sur la propriété src
dans le POJO de l’image, directement via la propriété @JSONProperty
annotation.
package com.adobe.aem.guides.wknd.mobile.android.models;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Image {
@JsonProperty(value = "src")
private String src;
public String getSrc() {
return src;
}
}
Le POJO de l’événement, qui nécessite de sélectionner beaucoup plus de points de données à partir de l’objet JSON, bénéficie de cette technique plus que la simple image, que nous voulons tout simplement : src
.
Maintenant que vous savez comment AEM Content Services peut générer une expérience mobile native, utilisez ce que vous avez appris pour effectuer les étapes suivantes et voir vos modifications répercutées dans l’application mobile.
Après chaque étape, effectuez une extraction pour actualiser l’application mobile et vérifiez la mise à jour de l’expérience mobile.
Vous avez terminé avec le tutoriel AEM sans tête !
Pour en savoir plus sur AEM Content Services et AEM as a Headless CMS, consultez la documentation et les documents d’activation de l’Adobe :