Aplicación de Android

Las aplicaciones de ejemplo son una buena manera de explorar las capacidades sin objetivos de Adobe Experience Manager (AEM). Esta aplicación de Android muestra cómo consultar contenido mediante las API de GraphQL de AEM. La variable AEM cliente sin encabezado para Java se utiliza para ejecutar las consultas de GraphQL y asignar datos a objetos Java para impulsar la aplicación.

Aplicación Java de Android con AEM sin encabezado

Consulte la código fuente en GitHub

Requisitos previos

Las siguientes herramientas deben instalarse localmente:

AEM requisitos

La aplicación Android funciona con las siguientes opciones de implementación de AEM. Todas las implementaciones requieren la variable Sitio WKND v2.0.0+ para instalar.

La aplicación Android está diseñada para conectarse a un AEM Publish , sin embargo, puede obtener contenido de AEM Author si se proporciona autenticación en la configuración de la aplicación Android.

Utilización

  1. Clonar el adobe/aem-guides-wknd-graphql repositorio:

    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Launch Android Studio y abra la carpeta android-app

  3. Modificación del archivo config.properties at app/src/main/assets/config.properties y actualizar contentApi.endpoint para que coincida con el entorno de AEM de destino:

    contentApi.endpoint=http://10.0.2.2:4503
    

    Autenticación básica

    La variable contentApi.user y contentApi.password autentique a un usuario AEM local con acceso al contenido de WKND GraphQL.

    contentApi.endpoint=http://10.0.2.2:4502
    contentApi.user=admin
    contentApi.password=admin
    
  4. Descargar un Dispositivo virtual de Android (API mínima 28).

  5. Cree e implemente la aplicación con el emulador de Android.

Conexión a entornos AEM

10.0.2.2 es alias especial IP para localhost al usar el emulador crear 10.0.2.2:4502 es equivalente a localhost:4502. Si se conecta a un entorno de publicación AEM (recomendado), no se requiere ninguna autorización y contentAPi.user y contentApi.password se puede dejar en blanco.

Si se conecta a un entorno de creación de AEM autorización es obligatorio. De forma predeterminada, la aplicación está configurada para utilizar la autenticación básica con un nombre de usuario y una contraseña de admin:admin. La variable AEMHeadlessClientBuilder proporciona la capacidad de usar autenticación basada en token. Para utilizar el generador de cliente de actualización de autenticación basada en token en AdventureLoader.java y 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)

El código

A continuación se muestra un breve resumen de los archivos y el código importantes utilizados para activar la aplicación. El código completo se puede encontrar en GitHub.

Consultas persistentes

Siguiendo AEM prácticas recomendadas sin encabezado, la aplicación de iOS utiliza consultas persistentes AEM GraphQL para consultar datos de aventura. La aplicación utiliza dos consultas persistentes:

  • wknd/adventures-all consulta persistente, que devuelve todas las aventuras en AEM con un conjunto abreviado de propiedades. Esta consulta persistente impulsa la lista de aventuras de la vista inicial.
# Retrieves a list of all adventures
{
    adventureList {
        items {
            _path
            slug
            title
            price
            tripLength
            primaryImage {
                ... on ImageRef {
                _path
                mimeType
                width
                height
                }
            }
        }
    }
}
  • wknd/adventure-by-slug consulta persistente, que devuelve una sola aventura de slug (una propiedad personalizada que identifica de forma exclusiva una aventura) con un conjunto completo de propiedades. Esta consulta persistente potencia las vistas de detalles de aventura.
# 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 {
          _path
          mimeType
          width
          height
        }
      }
      description {
        json
        plaintext
      }
      itinerary {
        json
        plaintext
      }
    }
    _references {
      ...on AdventureModel {
        _path
        slug
        title
        price
        __typename
      }
    }
  }
}

Ejecutar consulta persistente de GraphQL

AEM las consultas persistentes se ejecutan a través de GET HTTP y, por lo tanto, la variable AEM cliente sin encabezado para Java se utiliza para ejecutar las consultas de GraphQL persistentes con AEM y cargar el contenido de aventura en la aplicación.

Cada consulta persistente tiene una clase "loader" correspondiente, que llama asincrónicamente al punto final de la GET HTTP AEM y devuelve los datos de aventura utilizando el definido personalizado modelo de datos.

  • loader/AdventuresLoader.java

    Obtiene la lista de aventuras en la pantalla de inicio de la aplicación utilizando la variable wknd-shared/adventures-all consulta persistente.

  • loader/AdventureLoader.java

    Recopila una sola aventura seleccionándola a través de la variable slug usando el parámetro wknd-shared/adventure-by-slug consulta persistente.

//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);

Modelos de datos de respuesta de GraphQL

Adventure.java es un POJO de Java que se inicializa con los datos JSON de la solicitud de GraphQL y modela una aventura para utilizarla en las vistas de la aplicación Android.

Vistas

La aplicación Android utiliza dos vistas para presentar los datos de aventura en la experiencia móvil.

  • AdventureListFragment.java

    Invoca el AdventuresLoader y muestra las aventuras devueltas en una lista.

  • AdventureDetailFragment.java

    Invoca el AdventureLoader usando la variable slug parámetro transferido a través de la selección de aventura en la variable AdventureListFragment y muestra los detalles de una sola aventura.

Imágenes remotas

loader/RemoteImagesCache.java es una clase de utilidad que ayuda a preparar imágenes remotas en una caché para que se puedan utilizar con elementos de interfaz de usuario de Android. El contenido de aventura hace referencia a imágenes en AEM Assets a través de una URL y esta clase se utiliza para mostrar ese contenido.

Recursos adicionales

En esta página