Cree una aplicación de blog para Android con Oracle Content Management sin supervisión

Introducción

El entorno de desarrollo Android que utiliza Java o Kotlin puede ser una potente herramienta para crear aplicaciones que consumen contenido de Oracle Content Management. Armado con el modelo de contenido adecuado, puede crear rápidamente la interfaz de usuario de Android que compone una aplicación de blog típica.

En este tutorial, crearemos una sencilla aplicación de blog para Android con Kotlin aprovechando Oracle Content Management como CMS horizontal. Este ejemplo de Android está disponible en GitHub.

El tutorial incluye tres pasos:

  1. Preparación de Oracle Content Management
  2. Crea el blog en Android
  3. Preparar la aplicación para su despliegue

Requisitos

Antes de continuar con este tutorial, le recomendamos que lea primero la siguiente información:

Para seguir este tutorial, necesitará:

Lo que estamos construyendo

Nuestra aplicación de blog consta de tres pantallas que permiten a los visitantes explorar artículos de blog organizados en temas. La primera pantalla, la pantalla de inicio, consistirá en una lista de temas de blog.

Para echar un vistazo a lo que estamos creando, este es el estado final de nuestro tutorial, una aplicación básica de blog para Android que consume contenido de Oracle Content Management.

Este es el aspecto de la pantalla de inicio al final de este tutorial:

En esta imagen se muestra la pantalla de inicio del sitio de demostración de Cafe Supremo con una lista de los temas disponibles.

La segunda página, la pantalla de tema, muestra las vistas previas de cada artículo de blog que pertenece a un tema. A continuación, se muestra el aspecto de una pantalla de tema individual:

En esta imagen se muestra una pantalla de tema denominada 'Cómo hacer café' con una lista de los artículos disponibles para ese tema.

Por último, la pantalla de artículo presenta el artículo final del blog, incluida la información sobre el autor del blog. Este es el aspecto de una página de artículo individual:

En esta imagen se muestra una página de artículo individual, con el contenido y una referencia de autor.

Para continuar, deberá tener una suscripción activa a Oracle Content Management y conectarse con el rol de administrador de contenido.

Tarea 1: Preparación de Oracle Content Management

Si aún no tiene una instancia de Oracle Content Management, consulte el inicio rápido para obtener información sobre cómo registrarse en Oracle Cloud, aprovisionar una instancia de Oracle Content Management y configurar Oracle Content Management como CMS sin cabecera.

Para este tutorial, tendrá que crear un modelo de contenido de dos formas. Hay un paquete de activos descargable disponible que rellenará su repositorio vacío con tipos de contenido y contenido asociado, o bien puede crear su propio modelo de contenido y contenido.

Para preparar Oracle Content Management:

  1. Cree un canal y un repositorio de activos.
  2. Cree un modelo de contenido mediante uno de estos dos métodos:

Creación de un canal y un repositorio de activos

Primero debe crear un canal y un repositorio de activos en Oracle Content Management para poder publicar contenido.

Para crear un canal y un repositorio de activos en Oracle Content Management:

  1. Conéctese a la interfaz web de Oracle Content Management como administrador.

  2. Seleccione Contenido en el menú de navegación izquierdo y, a continuación, seleccione Canales de publicación en la lista de selección de la cabecera de página.

    En esta imagen se muestra la opción Canales de publicación seleccionada en el menú desplegable de la cabecera de la página Contenido.

  3. En la esquina superior derecha, haga clic en Crear para crear un nuevo canal. Asigne el nombre 'OCEGettingStartedChannel' al canal para este tutorial y mantenga el acceso público. Haga clic en Guardar para crear el canal.

    En esta imagen se muestra el panel de definición de canal de publicación, con 'OCEGettingStartedChannel' en el campo de nombre de canal.

  4. Seleccione Contenido en el menú de navegación izquierdo y, a continuación, seleccione Repositorios en la lista de selección de la cabecera de página.

    En esta imagen se muestra la opción Repositories seleccionada en el menú desplegable de la cabecera Content page.

  5. En la esquina superior derecha, haga clic en Crear para crear un nuevo repositorio de activos. Asigne el nombre 'OCEGettingStartedRepository' al repositorio de activos para este tutorial.

    En esta imagen se muestra el panel de definición del repositorio, con 'OCEGettingStartedRepository' en el campo de nombre del repositorio.

  6. En el campo Canales de publicación, seleccione el canal OCEGettingStartedChannel para indicar a Oracle Content Management que el contenido del repositorio OCEGettingStartedRepository se puede publicar en el canal OCEGettingStartedChannel. Haga clic en Guardar cuando termine.

    En esta imagen se muestra el panel de definición de repositorio, con 'OCEGettingStartedChannel' en el campo Canales de publicación.

Creación de un modelo de contenido

El siguiente paso es crear un modelo de contenido. Puede utilizar uno de estos métodos:

Importar el paquete de activos de muestras de Oracle Content Management

Puede descargar un paquete de activos de ejemplo de Oracle Content Management preconfigurado que contiene todos los tipos de contenido y activos necesarios para este tutorial. Si lo prefiere, también puede crear su propio modelo de contenido en lugar de descargar el paquete de activos de ejemplo.

Puede cargar una copia del contenido que estamos utilizando en este tutorial desde el paquete de activos de muestras de Oracle Content Management. Esto le permitirá experimentar con los tipos de contenido y modificar el contenido. Si desea importar el paquete de activos de muestras de Oracle Content Management, descargue el archivo del paquete de activos OCESamplesAssetPack.zip y extráigalo en el directorio que desee:

  1. Descargue el paquete de activos de muestras de Oracle Content Management (OCESamplesAssetPack.zip) desde la página descargas de Oracle Content Management. Extraiga el archivo zip descargado en una ubicación de la computadora. Después de la extracción, esta ubicación incluirá un archivo denominado OCEGettingStarted_data.zip.

  2. Conéctese a la interfaz web de Oracle Content Management como administrador.

  3. Seleccione Contenido en el menú de navegación izquierdo y, a continuación, seleccione Repositorios en la lista de selección de la cabecera de página. A continuación, seleccione OCEGettingStartedRepository y haga clic en el botón Importar contenido de la barra de acción superior.

    En esta imagen se muestra la página Repositorios, con el elemento OCEGettingStartedRepository seleccionado.

  4. Cargue OCEGettingStarted_data.zip desde la computadora local en la carpeta Documentos.

    En esta imagen se muestra la pantalla de confirmación de carga del archivo OCEGettingStarted_data.zip.

  5. Una vez cargado, seleccione OCEGettingStarted_data.zip y haga clic en Aceptar para importar el contenido en el repositorio de activos.

    En esta imagen se muestra el archivo OCEGettingStarted_data.zip seleccionado con el botón Aceptar activado.

  6. Una vez que el contenido se haya importado correctamente, navegue a la página Activos y abra el repositorio OCEGettingStartedRepository. Verá que todas las imágenes y elementos de contenido relacionados se han agregado al repositorio de activos.

    En esta imagen se muestra el repositorio OCEGettingStartedRepository, con todos los activos que se acaban de importar.

  7. Haga clic en Seleccionar todo en la parte superior izquierda y, a continuación, en Publicar para agregar todos los activos importados al canal de publicación que ha creado anteriormente, OCEGettingStartedChannel.

    En esta imagen se muestra el repositorio OCEGettingStartedRepository, con todos los activos seleccionados y la opción Publish en la barra de acción visible.

  8. Antes de publicar, debe validar todos los activos. En primer lugar, agregue OCEGettingStartedChannel como canal seleccionado y, a continuación, haga clic en el botón Validar.

    En esta imagen se muestra la página Resultados de validación, con el canal OCEGettingStartedChannel agregado en el campo Canales, todos los activos que se van a validar y el botón Validar activado.

  9. Después de validar los activos, puede publicar todos los activos en el canal seleccionado haciendo clic en el botón Publicar en la esquina superior derecha.

    En esta imagen se muestra la página Resultados de validación, con el canal OCEGettingStartedChannel agregado en el campo Canales, todos los activos validados y el botón Publicar activado.

Una vez hecho esto, puede ver en la página Activos que todos los activos se han publicado. (Puede hacerlo mediante el icono situado encima del nombre del activo).

En esta imagen se muestra la página Activos, con todos los activos almacenados.

Después de importar el paquete de activos de muestras de Oracle Content Management, puede empezar a crear el blog en Android.

Crear su propio modelo de contenido

En lugar de importar el paquete de activos de muestras de Oracle Content Management, también puede crear su propio modelo de contenido.

Para este tutorial, estamos utilizando un tipo de contenido llamado 'OCEGettingStartedHomePage' para crear la pantalla de inicio de nuestro blog. Esta página de inicio consta de una lista de temas de blog que se deben incluir en la pantalla.

En esta imagen se muestra la pantalla de inicio del sitio de demostración de Cafe Supremo.

Para crear tipos de contenido para el modelo de contenido:

  1. Conéctese a la interfaz web de Oracle Content Management como administrador.
  2. Seleccione Contenido en el menú de navegación izquierdo y, a continuación, seleccione Tipos de activos en la lista de selección de la cabecera de página.
  3. Haga clic en Crear en la esquina superior derecha.
  4. Seleccione crear un tipo de contenido (no un tipo de activo digital). Repita esta acción para todos los tipos de contenido necesarios.

En esta imagen se muestra el cuadro de diálogo Crear tipo de activo en la interfaz web de Oracle Content Management.

Crearemos cuatro tipos de contenido, cada uno con su propio conjunto de campos:

El primer tipo de contenido, OCEGettingStartedHomePage, debe tener los siguientes campos:

Nombre mostrado Tipo de campo necesario Nombre de la Máquina
Nombre de la Compañía Campo de texto de un solo valor X company_name
Logotipo de compañía Campo de texto de un solo valor X company_logo
Temas Campo de referencia de varios valores X temas
URL de Contacto Campo de texto de un solo valor X contact_url
Acerca de URL Campo de texto de un solo valor X about_url

Este es el aspecto de la definición de tipo de contenido OCEGettingStartedHomePage:

En esta imagen se muestra la definición del tipo de contenido 'OCEGettingStartedHomePage'. Incluye estos campos de datos: Nombre de la compañía, Logotipo de la compañía, Temas, URL de contacto y URL de Acerca de.

El segundo tipo de contenido, OCEGettingStartedTopic, debe tener el siguiente campo:

Nombre mostrado Tipo de campo necesario Nombre de la Máquina
Vista en miniatura Campo de imagen de valor único X vista en miniatura

Este es el aspecto del tipo de contenido OCEGettingStartedTopic:

En esta imagen se muestra la definición del tipo de contenido 'OCEGettingStartedTopic'. Incluye este campo de datos: Vista en miniatura.

El tercer tipo de contenido, OCEGettingStartedAuthor, debe tener los siguientes campos:

Nombre mostrado Tipo de campo necesario Nombre de la Máquina
Avatar Campo de imagen de valor único X avatar

Este es el aspecto del tipo de contenido OCEGettingStartedAuthor:

En esta imagen se muestra la definición del tipo de contenido 'OCEGettingStartedAuthor'. Incluye este campo de datos: Avatar.

El tipo de contenido cuarto y final, OCEGettingStartedArticle, debe tener los siguientes campos:

Nombre mostrado Tipo de campo necesario Nombre de la Máquina
Fecha de publicación Campo de fecha de valor único X published_name
Autor Campo de referencia de valor único X autor
Imagen Campo de imagen de valor único X imagen
Leyenda de Imagen Campo de texto de un solo valor X image_caption
Contenido del artículo Campo de texto grande de valor único X article_content
Tema Campo de referencia de valor único X Tema

Este es el aspecto del tipo de contenido OCEGettingStartedArticle:

En esta imagen se muestra la definición del tipo de contenido 'OCEGettingStartedArticlePage'. Incluye estos campos de datos: Fecha de publicación, Autor, Imagen, Título de imagen, Contenido de artículo y Tema.

Una vez que haya creado los tipos de contenido, puede agregar estos tipos de contenido al repositorio que ha creado anteriormente, OCEGettingStartedRepository:

  1. Conéctese a la interfaz web de Oracle Content Management como administrador.
  2. Navegue hasta OCEGettingStartedRepository.
  3. Edite el repositorio y, en Tipos de activos, especifique los cuatro tipos de contenido recién creados. Haga clic en el botón Save (Guardar) para guardar los cambios.

En esta imagen se muestra la página Editar repositorio en Oracle Content Management, con los cuatro tipos de contenido recién creados asociados al repositorio OCEGettingStartedRepository.

Después de agregar los tipos de contenido al repositorio, puede abrir el repositorio OCEGettingStartedRepository en la página Activos y empezar a crear los elementos de contenido para todos los tipos de contenido.

En esta imagen se muestran los elementos de contenido de la página Activos de la interfaz web de Oracle Content Management, con opciones a la izquierda para recopilaciones, canales, idiomas, tipos, selección de elementos de contenido y estado.

Tarea 2: Crear la aplicación de blog en Android

Para consumir nuestro contenido de Oracle Content Management en una aplicación Android, podemos utilizar el ejemplo de blog de Android escrito en Kotlin, que está disponible como repositorio de código abierto en GitHub.

Nota: Recuerde que el uso del ejemplo de Android es opcional y lo usamos en este tutorial para comenzar rápidamente. También puede crear su propia aplicación Android en Java o Kotlin, ya que ambos son compatibles con el SDK.

La construcción del blog en Android consta de estos pasos:

  1. Clonar el repositorio de ejemplo y el SDK de Android, y publicar el SDK localmente
  2. Configurar la aplicación Android
  3. Usar la API de REST de Oracle Content Management para recuperar contenido

Clonar el SDK de Android y del repositorio de ejemplo, y publicar el SDK localmente

El ejemplo de blog para Android está disponible como repositorio de código abierto en GitHub.

Primero deberá clonar el ejemplo de GitHub en la computadora local, así como el SDK de Android de GitHub, si aún no lo ha hecho.

Una vez que tenga su código de ejemplo y el SDK, para poder utilizar el SDK de Android en el proyecto de ejemplo, debe crear y publicar el SDK en el repositorio de Maven local para que el proyecto de ejemplo lo pueda consumir. Abra el proyecto SDK de Android en Android Studio y ejecute la tarea publishToMavenLocal para crear y publicar el SDK en el repositorio de Maven local.

Abrir la muestra de Android en Android Studio

Al igual que con cualquier aplicación Android, tendrá que importarlo a Android Studio, para que pueda crearlo y ejecutarlo desde allí en un emulador o dispositivo Android. El código de ejemplo ya está preconfigurado con el servidor y el canal de publicación que se utilizan para obtener datos para la aplicación de blog.

Uso de la API de REST de Oracle Content Management para recuperar contenido

La API de REST para Content Delivery proporciona acceso a activos publicados en Oracle Content Management. Los activos publicados incluyen elementos de contenido y activos digitales, así como sus representaciones. Ahora podemos aprovechar la API de REST para Content Management para recuperar contenido para que podamos presentarlo en nuestra aplicación de blog.

El archivo src/.../samples/blog/MainActivity.kt tiene una función para crear el objeto ContentDeliveryClient, que se utiliza para realizar llamadas a la API de REST. La siguiente función es una versión simplificada de la función de la aplicación de ejemplo que muestra los valores que se están utilizando.

   fun createDeliveryClient() {

        // preferences for cache
        val cacheEnabled = true

        // the server url and channel token for blog data
        val serverUrl = "https://ocemobile-oce0002.cec.ocp.oraclecloud.com"
        val channelToken = "b9ea60be0abf7255934cd2202fcf1314"


        val settings = ContentSettings()
        if (cacheEnabled) {
            // enable caches, using default settings
            settings.enableCache(appContext.cacheDir)
        }

        // SDK: create client API we'll use to make calls
        deliveryClient =
                ContentSDK.createDeliveryClient(
                        serverUrl,
                        channelToken,
                        settings)
    }

Las clases principales utilizadas para obtener datos para rellenar la aplicación de ejemplo de blog están bajo el paquete "viewmodel" y tienen el sufijo "Repository". Por ejemplo, el archivo HomePageRepository.kt contiene métodos para obtener datos para la página inicial de la aplicación de blog, incluida la lista de temas mostrados en la página inicial.

Datos de la página de inicio

La página inicial requiere varias llamadas de datos para obtener todos sus datos:

  1. En primer lugar, se consultan los elementos del canal que coinciden con el tipo de página inicial.
  2. A continuación, recupere los detalles de cada uno de los elementos del tema.

A continuación se muestra la función que utiliza el SDK para recuperar datos para la página inicial. Esta función muestra los valores utilizados, mientras que la función de aplicación de ejemplo utiliza constantes.

  private fun getHomePage(): HomePage {

        // SDK: create search request to get home page
        val getHomePageRequest = SearchAssetsRequest(ContentApi.deliveryClient)
                .type("OCEGettingStartedHomePage")    // search by content type
                .name("HomePage")    // ...and by content name
                .linksNone()        // do not include links in the response
                .fieldsAll()        // do include all fields

        val searchResult = getHomePageRequest.fetchResult()

        // from the search result, only expect a single home page
        val contentItems = searchResult.contentItems

        // handle situation where no data is returned
        if (contentItems.isNullOrEmpty())
            throw ContentException(ContentException.REASON.itemNotFound, "No home page found for type")

        // get first itme in home page data
        val item = contentItems.first()

        // convert list of ids into topic list
        val topicList = item.getReferenceListIds("topics").map { Topic(it) }
        // grab the topic type from one of the references
        topicType = item.getReferenceListField("topics").first().value.type

        return HomePage(
                companyName = item.getTextField("company_name"),
                logoImageUrl = item.getDigitalAssetField("company_logo").getThumbnailUrl(),
                contactUrl = item.getTextField("contact_url"),
                aboutUrl = item.getTextField("about_url"),
                topics = topicList.associateBy { it.id }) // convert list to map

    }

El objeto SearchAssetsRequest del código anterior crea la solicitud y la función fetchResult() hará una llamada REST síncrona similar a la siguiente solicitud para obtener los datos de la página inicial.

GET content/published/api/v1.1/items?q=(type eq "OCEGettingStartedHomePage" AND name eq "HomePage")?fields=all&links=none&channelToken={channelToken}

Página de tema

La pantalla Artículos muestra todos los artículos de un tema determinado. Utilizamos el mismo patrón que para la página inicial, pero esta vez buscamos elementos de contenido del tipo OCEGettingStartedArticle que hagan referencia al tema cuyo ID de tema está seleccionado. También se muestra cómo realizar una llamada al método asíncrono mediante el SDK. Consulte el archivo ArticlesRepository.kt para obtener más información, pero este es el método principal que muestra el patrón y los valores utilizados.

// SDK: create search request to get all the articles
// sort by published_date field in descending order
   
val searchRequest = SearchAssetsRequest(ContentApi.deliveryClient)
        .type("OCEGettingStartedArticle")                // get "article" type
        .fieldEquals("topic", topicId)  // match topic id (e.g. drinks, recipes)
        .sortByField("published_date")  // sort by published date (optional)
        .sortOrderDescending(true)
        .linksNone()            // no need for links (optional)

// SDK: make request to get articles using async callback method
   
searchRequest.fetchAsync {response ->
     // successful SDK call?
     if (response.isSuccess) {
         // process the list and display in ui
      } else {
         // handle error case
      }
  }   
  

Página de Artículo

La pantalla de artículo individual muestra un único artículo, pero la pantalla incluye contenido de Author, que es un tipo de contenido independiente. Para recuperar un elemento de contenido más cualquier elemento de contenido al que haga referencia, utilice el método expand() al crear el objeto de solicitud como se muestra a continuación para obtener fields.author. Los detalles están en AritcleDetailRepository.kt, pero este es el patrón de código principal:

// make a call to get the article, expanding the "author" field

val request  = GetContentItemRequest(ContentApi.deliveryClient, articleId)
       .expand("author")     // only expand the author field
       .linksNone()

// get the article detail as an asynchronous call

request.fetchAsync {response ->
     // successful SDK call?
     if (response.isSuccess) {
         // process the list and display in ui
      } else {
         // handle error case
      }
  }   

Ahora que tenemos nuestras consultas de datos, podemos presentar las respuestas en nuestra interfaz de usuario de la aplicación Android.

Clases ViewModel de Android

La aplicación de blog está estructurada como una aplicación estándar ViewModel para Android. Hay muchos recursos en línea que describen cómo se utiliza ViewModel en Android e implementado en Kotlin.

Estructura de componente

Hay tres clases principales para cada pantalla de la aplicación:

Por ejemplo, las clases de la pantalla de lista de artículos son:

Tarea 3: Preparación de la aplicación para su despliegue

Ahora que hemos creado nuestra aplicación de blog Android, necesitamos probarla en un emulador móvil o dispositivo de Android Studio para poder depurar cualquier problema y obtener una vista previa de la aplicación antes de que se active.

Conclusión

En este tutorial, creamos una aplicación de blog para Android, que se puede encontrar en GitHub. Este sitio utiliza Oracle Content Management como CMS sin cabecera. Después de configurar Oracle Content Management con un canal de contenido publicado para el tutorial del sitio del blog, instalamos y ejecutamos el sitio Android para recuperar el contenido necesario y crear el sitio.

Obtenga información sobre los conceptos importantes de Oracle Content Management en la documentación.

Puede encontrar más ejemplos como este en la página Ejemplos de Oracle Content Management en Oracle Help Center.