Blog-App für Android mit Headless Oracle Content Management erstellen
Einführung
Die Android-Entwicklungsumgebung mit Java oder Kotlin kann ein leistungsstarkes Tool zum Erstellen von Anwendungen sein, die Inhalte aus Oracle Content Management nutzen. Bewaffnet mit dem richtigen Content-Modell können Sie schnell die Android-Benutzeroberfläche erstellen, die eine typische Blog-App ausmacht.
In diesem Tutorial erstellen wir eine einfache Blog-Anwendung für Android mit Kotlin, indem wir Oracle Content Management als Headless-CMS nutzen. Dieses Android-Beispiel ist unter GitHub verfügbar.
Das Tutorial besteht aus drei Schritten:
- Oracle Content Management vorbereiten
- Blog in Android erstellen
- Anwendung für Deployment vorbereiten
Voraussetzungen
Bevor Sie mit diesem Tutorial fortfahren, sollten Sie zuerst die folgenden Informationen lesen:
Um diesem Tutorial zu folgen, benötigen Sie:
- Oracle Content Management-Abonnement
- Oracle Content Management-Account mit der Rolle "Content Administrator"
- ein Windows- oder Mac-Computer mit konfigurierten Android-Tools
- vorhandene Kenntnisse der Kotlin- und Android-Programmierung, da dieses Tutorial voraussetzt, dass Sie bereits mit gängigen Android-Entwicklungskonzepten vertraut sind, die Kotlin verwenden
Was wir bauen
Unsere Blog-App besteht aus drei Bildschirmen, die es Besuchern ermöglichen, in Themen organisierte Blogartikel zu erkunden. Der erste Bildschirm, der Startbildschirm, besteht aus einer Liste von Blog-Themen.
Hier finden Sie den Endstatus unseres Tutorials, einer grundlegenden Android-Bloganwendung, die Inhalte von Oracle Content Management konsumiert.
So sieht der Home-Bildschirm am Ende dieses Tutorials aus:
Auf der zweiten Seite, dem Themenbildschirm, werden Vorschauwerte für jeden Blogartikel angezeigt, der zu einem Thema gehört. So sieht ein einzelner Themenbildschirm aus:
Schließlich gibt der Artikelbildschirm den letzten Blog-Artikel aus, einschließlich Informationen zum Autor des Blogs. So wird eine einzelne Artikelseite aussehen:
Um fortzufahren, benötigen Sie ein aktives Abonnement für Oracle Content Management und müssen mit der Rolle "Content Administrator" angemeldet sein.
Aufgabe 1: Oracle Content Management vorbereiten
Wenn noch keine Oracle Content Management-Instanz vorhanden ist, finden Sie unter Schnellstart Informationen zur Registrierung für Oracle Cloud, zum Provisioning einer Oracle Content Management-Instanz und zum Konfigurieren von Oracle Content Management als Headless-CMS.
Für dieses Tutorial müssen Sie ein Contentmodell auf zwei Arten erstellen. Es ist ein downloadfähiges Asset Pack verfügbar, das Ihr leeres Repository mit Inhaltstypen und zugehörigen Inhalten füllt, oder Sie können ein eigenes Contentmodell und einen eigenen Inhalt erstellen.
So bereiten Sie Oracle Content Management vor:
- Erstellen Sie ein Kanal- und Asset-Repository.
- Erstellen Sie ein Contentmodell mit einer der beiden folgenden Methoden:
- Methode 1: Oracle Content Management Samples Asset Pack importieren
- Methode 2: Eigenes Contentmodell erstellen
Channel- und Asset-Repository erstellen
Sie müssen zunächst einen Kanal und ein Asset-Repository in Oracle Content Management erstellen, damit Sie Inhalte veröffentlichen können.
So erstellen Sie einen Kanal und ein Asset-Repository in Oracle Content Management:
Melden Sie sich als Administrator bei der Oracle Content Management-Webbenutzeroberfläche an.
Wählen Sie im linken Navigationsmenü Inhalt aus, und wählen Sie Kanäle veröffentlichen aus der Auswahlliste im Seitenheader aus.
Klicken Sie in der oberen rechten Ecke auf Erstellen, um einen neuen Channel zu erstellen. Benennen Sie den Kanal "OCEGettingStartedChannel" für dieses Tutorial, und halten Sie den Zugriff öffentlich. Klicken Sie auf Speichern, um den Channel zu erstellen.
Wählen Sie im linken Navigationsmenü Inhalt, und wählen Sie dann Repositorys aus der Auswahlliste im Seitenheader aus.
Klicken Sie in der oberen rechten Ecke auf Erstellen, um ein neues Asset-Repository zu erstellen. Benennen Sie das Asset-Repository "OCEGettingStartedRepository" für dieses Tutorial.
Wählen Sie im Feld Kanäle veröffentlichen den Kanal OCEGettingStartedChannel aus, um Oracle Content Management anzugeben, dass der Inhalt im Repository OCEGettingStartedRepository im Kanal OCEGettingStartedChannel veröffentlicht werden kann. Klicken Sie auf Speichern, wenn Sie fertig sind.
Contentmodelle erstellen
Im nächsten Schritt erstellen Sie ein Contentmodell. Sie können eine von zwei Methoden verwenden:
- Methode 1: Oracle Content Management Samples Asset Pack importieren
- Methode 2: Eigenes Contentmodell erstellen
Oracle Content Management-Beispielassetpaket importieren
Sie können ein vorkonfiguriertes Oracle Content Management-Beispielassetpaket mit allen erforderlichen Inhaltstypen und -assets für dieses Tutorial herunterladen. Falls gewünscht, können Sie auch ein eigenes Contentmodell erstellen, anstatt das Beispielassets-Pack herunterzuladen.
Sie können eine Kopie des in diesem Tutorial verwendeten Inhalts aus dem Oracle Content Management Samples Asset Pack hochladen. Dadurch können Sie mit den Inhaltstypen experimentieren und den Inhalt ändern. Wenn Sie das Oracle Content Management Samples Asset Pack importieren möchten, laden Sie das Asset Pack-Archiv OCESamplesAssetPack.zip herunter, und extrahieren Sie es in ein Verzeichnis Ihrer Wahl:
Laden Sie das Oracle Content Management Samples Asset Pack (OCESamplesAssetPack.zip) von der Oracle Content Management-Seite für Downloads herunter. Extrahieren Sie die heruntergeladene ZIP-Datei in einen Speicherort auf Ihrem Computer. Nach dem Extrahieren enthält dieser Speicherort eine Datei mit dem Namen OCEGettingStarted_data.zip.
Melden Sie sich als Administrator bei der Oracle Content Management-Webbenutzeroberfläche an.
Wählen Sie im linken Navigationsmenü Inhalt, und wählen Sie dann Repositorys aus der Auswahlliste im Seitenheader aus. Wählen Sie jetzt OCEGettingStartedRepository aus, und klicken Sie in der oberen Aktionsleiste auf die Schaltfläche Inhalt importieren.
Laden Sie OCEGettingStarted_data.zip von Ihrem lokalen Rechner in den Ordner Dokumente hoch.
Wählen Sie nach dem Hochladen OCEGettingStarted_data.zip aus, und klicken Sie auf OK, um den Inhalt in das Asset-Repository zu importieren.
Nachdem der Inhalt erfolgreich importiert wurde, navigieren Sie zur Seite Assets, und öffnen Sie das Repository OCEGettingStartedRepository. Alle zugehörigen Bilder und Inhaltselemente wurden dem Asset-Repository hinzugefügt.
Klicken Sie oben links auf Alle auswählen und dann auf Veröffentlichen, um alle importierten Assets zum Veröffentlichungskanal hinzuzufügen, den Sie zuvor erstellt haben: OCEGettingStartedChannel.
Vor dem Veröffentlichen müssen Sie alle Assets validieren. Fügen Sie zuerst OCEGettingStartedChannel als ausgewählten Channel hinzu, und klicken Sie dann auf die Schaltfläche Validieren.
Nachdem die Assets validiert wurden, können Sie alle Assets im ausgewählten Channel veröffentlichen, indem Sie oben rechts auf die Schaltfläche Veröffentlichen klicken.
Anschließend können Sie auf der Seite Anlagen sehen, dass alle Assets veröffentlicht wurden. (Sie können das Symbol über dem Assetnamen angeben.)
Nachdem Sie das Oracle Content Management Samples Asset Pack importiert haben, können Sie mit dem Erstellen des Blogs in Android beginnen.
Eigenes Contentmodell erstellen
Anstatt das Oracle Content Management Samples Asset Pack zu importieren, können Sie auch ein eigenes Contentmodell erstellen.
Für dieses Tutorial verwenden wir den Inhaltstyp "OCEGettingStartedHomePage", um den Startbildschirm für unseren Blog zu erstellen. Diese Homepage besteht aus einer Liste von Blog-Themen, die auf dem Bildschirm angezeigt werden sollen.
So erstellen Sie Inhaltstypen für das Contentmodell:
- Melden Sie sich als Administrator bei der Oracle Content Management-Webbenutzeroberfläche an.
- Wählen Sie im linken Navigationsmenü Inhalt aus, und wählen Sie dann Assettypen aus der Auswahlliste im Seitenheader aus.
- Klicken Sie oben rechts auf Erstellen.
- Wählen Sie diese Option, um einen Inhaltstyp (kein digitaler Assettyp) zu erstellen. Wiederholen Sie diesen Vorgang für alle erforderlichen Inhaltstypen.
Wir erstellen vier Inhaltstypen mit jeweils eigenen Feldern:
- OCEGettingStartedHomePage
- OCEGettingStartedTopic
- OCEGettingStartedAuthor
- OCEGettingStartedArticle
Der erste Inhaltstyp, OCEGettingStartedHomePage, muss die folgenden Felder enthalten:
Anzeigename | Feldtyp | Erforderlich | Rechnername |
---|---|---|---|
Unternehmensname | Einwertiges Textfeld | X | company_name |
Firmenlogo | Einwertiges Textfeld | X | company_logo |
Themen | Mehrfachwert-Referenzfeld | X | Themen |
Kontakt-URL | Einwertiges Textfeld | X | contact_url |
URL | Einwertiges Textfeld | X | about_url |
So sollte Ihre OCEGettingStartedHomePage-Contenttypdefinition aussehen:
Der zweite Inhaltstyp, OCEGettingStartedTopic, muss das folgende Feld enthalten:
Anzeigename | Feldtyp | Erforderlich | Rechnername |
---|---|---|---|
Thumbnail | Bildfeld mit einem Wert | X | Thumbnail |
So sollte der Inhaltstyp OCEGettingStartedTopic aussehen:
Der dritte Inhaltstyp, OCEGettingStartedAuthor, muss die folgenden Felder enthalten:
Anzeigename | Feldtyp | Erforderlich | Rechnername |
---|---|---|---|
Avatar | Bildfeld mit einem Wert | X | Avatar |
So sollte der Inhaltstyp OCEGettingStartedAuthor aussehen:
Der vierte und der letzte Inhaltstyp, OCEGettingStartedArticle, müssen die folgenden Felder aufweisen:
Anzeigename | Feldtyp | Erforderlich | Rechnername |
---|---|---|---|
Veröffentlichungsdatum | Einzelwert-Datumsfeld | X | published_name |
Autor | Einzelwert-Referenzfeld | X | Autor |
Bild | Bildfeld mit einem Wert | X | Bild |
Bildunterschrift | Einwertiges Textfeld | X | image_caption |
Inhalt des Artikels | Einzelwert-Großtextfeld | X | article_content |
Thema | Einzelwert-Referenzfeld | X | Thema |
So sollte der Inhaltstyp OCEGettingStartedArticle aussehen:
Nachdem Sie die Inhaltstypen erstellt haben, können Sie diese Inhaltstypen dem zuvor erstellten Repository OCEGettingStartedRepository hinzufügen:
- Melden Sie sich als Administrator bei der Oracle Content Management-Webbenutzeroberfläche an.
- Navigieren Sie zu OCEGettingStartedRepository.
- Bearbeiten Sie das Repository, und geben Sie unter Anlagentypen alle vier neu erstellten Inhaltstypen an. Klicken Sie auf Speichern, um die Änderungen zu speichern.
Nachdem Sie die Inhaltstypen zum Repository hinzugefügt haben, können Sie das Repository OCEGettingStartedRepository auf der Seite Assets öffnen und mit dem Erstellen der Inhaltselemente für alle Inhaltstypen beginnen.
Aufgabe 2: Bloganwendung in Android erstellen
Um unsere Oracle Content Management-Inhalte in einer Android-Anwendung zu nutzen, können wir das in Kotlin geschriebene Android-Blogbeispiel verwenden, das als Open-Source-Repository in GitHub verfügbar ist.
Hinweis: Beachten Sie, dass die Verwendung des Android-Beispiels optional ist und wir es in diesem Tutorial für den schnellen Einstieg verwenden. Sie können auch Ihre eigene Android-Anwendung in Java oder Kotlin erstellen, da beide mit dem SDK kompatibel sind.
Die Erstellung des Blogs in Android besteht aus folgenden Schritten:
- Klonen Sie das Beispiel-Repository und das Android-SDK, und veröffentlichen Sie das SDK lokal
- Android-Anwendung konfigurieren
- REST-API für Oracle Content Management zum Abrufen von Inhalt verwenden
Beispiel-Repository und Android-SDK klonen und SDK lokal veröffentlichen
Das Android-Blogbeispiel ist als Open-Source-Repository unter GitHub verfügbar.
Sie müssen das Beispiel zunächst von GitHub auf Ihren lokalen Rechner und das Android-SDK von GitHub klonen, falls noch nicht geschehen.
Wenn Sie über Ihren Beispielcode und das SDK verfügen, um das Android-SDK im Beispielprojekt zu nutzen, müssen Sie das SDK in Ihrem lokalen Maven-Repository erstellen und veröffentlichen, damit es vom Beispielprojekt verwendet werden kann. Öffnen Sie das Android-SDK-Projekt in Android Studio, und führen Sie die Aufgabe publishToMavenLocal
aus, um das SDK zu erstellen und im lokalen Maven-Repository zu veröffentlichen.
Android-Beispiel in Android Studio öffnen
Wie bei jeder Android-Anwendung müssen Sie es in Android Studio importieren, damit Sie es von dort in einem Android-Emulator oder -Gerät erstellen und ausführen können. Der Beispielcode ist bereits mit dem Server und dem Veröffentlichungskanal vorkonfiguriert, die zum Abrufen von Daten für die Bloganwendung verwendet werden.
REST-API für Oracle Content Management zum Abrufen von Inhalt verwenden
Die REST-API für Content Delivery bietet Zugriff auf veröffentlichte Assets in Oracle Content Management. Veröffentlichte Assets umfassen Inhaltselemente und digitale Assets sowie ihre Formatvarianten. Wir können jetzt die REST-API für Content Management nutzen, um Inhalte abzurufen, damit wir sie in unserer Bloganwendung wiedergeben können.
Die Datei src/.../samples/blog/MainActivity.kt enthält eine Funktion zum Erstellen des Objekts ContentDeliveryClient, das zum Aufrufen der REST-API verwendet wird. Die folgende Funktion ist eine vereinfachte Version der Funktion aus der Beispielanwendung, in der die verwendeten Werte angezeigt werden.
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
.enableCache(appContext.cacheDir)
settings}
// SDK: create client API we'll use to make calls
=
deliveryClient .createDeliveryClient(
ContentSDK,
serverUrl,
channelToken)
settings}
Die Kernklassen, die zum Abrufen von Daten zum Auffüllen der Blog-Beispielanwendung verwendet werden, befinden sich im Paket "viewmodel" und haben das Suffix "Repository". Beispiel: Die Datei HomePageRepository.kt enthält Methoden zum Abrufen von Daten für die Homepage der Bloganwendung, einschließlich der Liste der Themen, die auf der Homepage angezeigt werden.
Homepage-Daten
Die Homepage erfordert mehrere Datenaufrufe, um alle Daten abzurufen:
- Zuerst werden Elemente im Channel abgefragt, die dem Homepage-Typ entsprechen.
- Rufen Sie dann die Details für jedes Thema ab.
Im Folgenden finden Sie die Funktion, die das SDK verwendet, um Daten für die Homepage abzurufen. Diese Funktion zeigt die verwendeten Werte an, während die Beispielanwendungsfunktion Konstanten verwendet.
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
= item.getReferenceListField("topics").first().value.type
topicType
return HomePage(
= item.getTextField("company_name"),
companyName = item.getDigitalAssetField("company_logo").getThumbnailUrl(),
logoImageUrl = item.getTextField("contact_url"),
contactUrl = item.getTextField("about_url"),
aboutUrl = topicList.associateBy { it.id }) // convert list to map
topics
}
Das Objekt SearchAssetsRequest im obigen Code erstellt die Anforderung, und die Funktion fetchResult() erstellt einen synchronen REST-Aufruf ähnlich der Anforderung unten, um die Homepagedaten abzurufen.
GET content/published/api/v1.1/items?q=(type eq "OCEGettingStartedHomePage" AND name eq "HomePage")?fields=all&links=none&channelToken={channelToken}
Themenseite
Im Artikelbildschirm werden alle Artikel für ein bestimmtes Thema angezeigt. Wir verwenden dasselbe Muster wie für die Homepage. Dieses Mal wird jedoch nach Inhaltselementen des Typs OCEGettingStartedArticle gesucht, die das Thema referenzieren, dessen Themen-ID ausgewählt ist. Außerdem wird gezeigt, wie Sie einen asynchronen Methodenaufruf mit dem SDK ausführen. Weitere Einzelheiten finden Sie in der Datei ArticlesRepository.kt. Im Folgenden finden Sie jedoch die Core-Methode mit dem verwendeten Muster und den verwendeten Werten.
// 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
.fetchAsync {response ->
searchRequest// successful SDK call?
if (response.isSuccess) {
// process the list and display in ui
} else {
// handle error case
}
}
Artikelseite
Auf dem einzelnen Artikelbildschirm wird ein einzelner Artikel angezeigt, der Bildschirm enthält jedoch Inhalt des Autors, der ein separater Inhaltstyp ist. Um ein Inhaltselement sowie alle Inhaltselemente abzurufen, die es referenziert, verwenden Sie die Methode expand() beim Erstellen des Anforderungsobjekts wie unten gezeigt, um fields.author abzurufen. Details befinden sich in AritcleDetailRepository.kt. Im Folgenden finden Sie jedoch das Core-Codemuster:
// 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
}
}
Da wir nun unsere Datenabfragen haben, können wir die Antworten in unserer Android-Anwendungs-UI wiedergeben.
ViewModel-Klassen für Android
Die Bloganwendung ist als standardmäßige Android-Anwendung ViewModel strukturiert. Es gibt viele Online-Ressourcen, die beschreiben, wie ViewModel in Android verwendet und in Kotlin implementiert wird.
Komponentenstruktur
Für jeden Bildschirm in der Anwendung gibt es drei Kernklassen:
- die Klasse ViewModel, die die Struktur der Daten definiert
- die Repository-Klasse, die den SDK-Aufruf zum Abrufen der Daten macht
- die Klasse Fragment, die für das Auffüllen der UI mit der Klasse ViewModel verantwortlich ist.
Die Klassen im Artikellistenbildschirm sind beispielsweise:
- ArticlesFragment
- ArticlesViewModel
- ArticlesRepository
Aufgabe 3: Anwendung für Deployment vorbereiten
Nachdem wir unsere Android-Bloganwendung erstellt haben, müssen wir sie in einem mobilen Emulator oder Gerät aus Android Studio testen, damit wir alle Probleme debuggen und eine Vorschau der Anwendung anzeigen können, bevor sie live geht.
Schlussfolgerung
In diesem Tutorial haben wir eine Bloganwendung für Android erstellt, die Sie unter GitHub finden können. Diese Website verwendet Oracle Content Management als Headless-CMS. Nachdem wir Oracle Content Management mit einem Kanal veröffentlichter Inhalte für das Tutorial der Blogwebsite eingerichtet und konfiguriert haben, haben wir die Android-Site installiert und ausgeführt, um die erforderlichen Inhalte abzurufen und die Site zu erstellen.
Weitere Informationen zu wichtigen Oracle Content Management-Konzepten finden Sie in der Dokumentation.
Weitere Beispiele finden Sie auf der Oracle Content Management-Seite Beispiele im Oracle Help Center.
Blog-App für Android mit Headless Oracle Content Management erstellen
F80569-01
Mai 2023
Copyright © 2021, 2023, Oracle and/or its affiliates.
Hauptverfasser: Oracle Corporation