Aplicativo Android

[AEM Headless as a Cloud Service]{class="badge informative"}

Aplicativos de exemplo são uma ótima maneira de explorar as capacidades headless do Adobe Experience Manager (AEM). Este aplicativo do Android demonstra como consultar conteúdo usando as APIs do GraphQL do AEM. O AEM Headless Client para Java é usado para executar as consultas do GraphQL e mapear dados para objetos Java para potencializar o aplicativo.

Aplicativo Android Java com AEM Headless

Exibir o código-fonte no GitHub

Pré-requisitos :headding-anchor:prerequisites

As seguintes ferramentas devem ser instaladas localmente:

Requisitos do AEM

O aplicativo Android funciona com as seguintes opções de implantação do AEM. Todas as implantações exigem que o WKND Site v3.0.0+ esteja instalado.

O aplicativo do Android foi projetado para se conectar a um ambiente AEM do Publish AEM. No entanto, ele poderá obter conteúdo do autor do se a autenticação for fornecida na configuração do aplicativo do Android.

Como usar

  1. Clonar o repositório adobe/aem-guides-wknd-graphql:

    code language-shell
    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Abra o Android Studio e abra a pasta android-app

  3. Modifique o arquivo config.properties em app/src/main/assets/config.properties e atualize contentApi.endpoint para corresponder ao seu ambiente AEM de destino:

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

    Autenticação básica

    O contentApi.user e o contentApi.password autenticam um usuário AEM local com acesso ao conteúdo do WKND GraphQL.

    code language-plain
    contentApi.endpoint=https://author-p123-e456.adobeaemcloud.com
    contentApi.user=my-special-android-app-user
    contentApi.password=password123
    
  4. Baixe um Dispositivo virtual do Android (API mínima de 28).

  5. Crie e implante o aplicativo usando o emulador do Android.

Conexão com ambientes AEM

Se a conexão com um ambiente de autor AEM autorização for necessária. O AEMHeadlessClientBuilder fornece a capacidade de usar a autenticação baseada em token. Para usar o criador de cliente de atualização de autenticação baseada em token em AdventureLoader.java e 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)

O código

Abaixo está um breve resumo dos arquivos importantes e do código usado para potencializar o aplicativo. O código completo pode ser encontrado no GitHub.

Consultas persistentes

Seguindo as práticas recomendadas do AEM Headless, o aplicativo iOS usa consultas persistentes do AEM GraphQL para consultar dados de aventura. O aplicativo usa duas consultas persistentes:

  • wknd/adventures-all consulta persistente, que retorna todas as aventuras no AEM com um conjunto abreviado de propriedades. Essa consulta persistente direciona a lista de aventura da visualização inicial.
# Retrieves a list of all adventures
{
    adventureList {
        items {
            _path
            slug
            title
            price
            tripLength
            primaryImage {
                ... on ImageRef {
                _dynamicUrl
                _path
                }
            }
        }
    }
}
  • wknd/adventure-by-slug consulta persistente, que retorna uma única aventura por slug (uma propriedade personalizada que identifica exclusivamente uma aventura) com um conjunto completo de propriedades. Essa consulta persistente possibilita as exibições de detalhes 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 {
          _dynamicUrl
          _path
        }
      }
      description {
        json
        plaintext
      }
      itinerary {
        json
        plaintext
      }
    }
    _references {
      ...on AdventureModel {
        _path
        slug
        title
        price
        __typename
      }
    }
  }
}

Executar consulta persistente do GraphQL

As consultas persistentes do AEM são executadas por HTTP GET e, portanto, o cliente AEM Headless para Java é usado para executar as consultas persistentes do GraphQL AEM no e carregar o conteúdo de aventura no aplicativo.

Cada consulta persistente tem uma classe "loader" correspondente, que chama de forma assíncrona o ponto de GET HTTP AEM e retorna os dados de aventura usando o modelo de dados definido pelo cliente.

  • loader/AdventuresLoader.java

    Obtém a lista de Aventuras na tela inicial do aplicativo usando a consulta persistente wknd-shared/adventures-all.

  • loader/AdventureLoader.java

    Busca uma única aventura selecionando-a por meio do parâmetro slug, usando a consulta persistente wknd-shared/adventure-by-slug.

//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 dados de resposta do GraphQL :headding-anchor:data-models

Adventure.java é um POJO Java inicializado com os dados JSON da solicitação do GraphQL e modela uma aventura para uso nas exibições do aplicativo Android.

Exibições

O aplicativo Android usa duas visualizações para apresentar os dados de aventura na experiência móvel.

  • AdventureListFragment.java

    Chama AdventuresLoader e exibe as aventuras retornadas em uma lista.

  • AdventureDetailFragment.java

    Invoca o AdventureLoader usando o parâmetro slug transmitido por meio da seleção de aventura na exibição AdventureListFragment, e exibe os detalhes de uma única aventura.

Imagens remotas

loader/RemoteImagesCache.java é uma classe de utilitário que ajuda a preparar imagens remotas em um cache para que elas possam ser usadas com elementos da interface do usuário do Android. O conteúdo de aventura faz referência a imagens no AEM Assets por meio de um URL e essa classe é usada para exibir esse conteúdo.

Recursos adicionais

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