1. Hinweis
Die Entwicklung einer Messaging-App ist eine Herausforderung. Die allgemeine Nutzerfreundlichkeit ist zwar subjektiv, aber Android bietet die Messaging API und die People API, die die Chatfunktion verbessern und optimieren.
In diesem Codelab erfahren Sie, wie Sie diese APIs verwenden, um ein überzeugendes Ökosystem für Chat-Apps auf Android zu schaffen. Sie erweitern die JetChat-App, eine einfache, nicht funktionierende Chat-App, die Jetpack Compose verwendet.
Vorbereitung
- Grundkenntnisse in der Android-Entwicklung
- Grundlegende Kenntnisse zu Benachrichtigungen
Umfang
Eine erweiterte JetChat-App, die Folgendes bietet:
- Benachrichtigungen, die Unterhaltungen im reservierten Unterhaltungsbereich der Benachrichtigungsleiste darstellen.
- Diese Benachrichtigungen enthalten Referenz-Share-Ziele, mit denen Sie Inhalte in den Unterhaltungen Ihrer App teilen können.
- Es werden Best Practices für die Erstellung dieser Objekte erzwungen, damit die vom System bereitgestellten Standardfunktionen genutzt werden können, die Ihre App verbessern.
Lerninhalte
- So werden unterhaltungsbezogene Benachrichtigungen im reservierten Unterhaltungsbereich der Benachrichtigungsleiste angezeigt.
- Informationen zu den verschiedenen Funktionen, die durch die Messaging- und People-APIs ermöglicht werden.
Voraussetzungen
- Git
- Android Studio
- Ein GitHub-Konto
2. Einrichten
Der Ausgangspunkt basiert auf der JetChat-App. Der Startercode erweitert die JetChat-App, um die Messaging- und People-APIs besser zu präsentieren.
Startcode abrufen
So erhalten Sie den Startcode für dieses Codelab:
- Klonen Sie das folgende GitHub-Repository über die Befehlszeile:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- Öffnen Sie das Projekt in Android Studio und klicken Sie dann auf
App ausführen. Der Bereich Emulator wird angezeigt und die App wird darin dargestellt.
Erweiterte JetChat App ausprobieren
- Geben Sie im Textfeld Nachrichten-Composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Nach einigen Sekunden erhalten Sie eine Push-Benachrichtigung mit einer Antwort von jemandem im Chat.
3. Unterhaltungsbenachrichtigungen erstellen
In Android 11 wurden APIs eingeführt, mit denen chatbezogene Benachrichtigungen in einem bestimmten Bereich in der Benachrichtigungsleiste angezeigt werden können, der ausschließlich für Unterhaltungen vorgesehen ist.

Die Benachrichtigung muss der Klasse Notification.MessagingStyle angehören und auf eine langlebige Tastenkombination zum Teilen verweisen. In diesem Abschnitt erfahren Sie, wie Sie diese API-Anforderungen erfüllen, um diese Benachrichtigungen, die Konversationen darstellen, im Konversationsbereich anzuzeigen.
So aktivieren Sie Benachrichtigungen der Klasse NotificationCompat.MessagingStyle:
- Klicken Sie in Android Studio auf dem Tab Project (Projekt) auf
app>java>com.example.compose.jetchat>conversationund doppelklicken Sie dann aufConversationFragment. - Suchen Sie in der Datei
ConversationFragment.ktnach der KlasseConversationFragmentund dann nach dem CodeblockNotificationder FunktioncreateNotification, in dem die Benachrichtigung erstellt wird. - Ersetzen Sie die
setContentText-Methode durch einesetStyle-Methode, die den Stil der Benachrichtigung auf die KlasseNotificationCompat.MessagingStylefestlegt. Diese Hilfsklasse fügt der mit der MethodesetContextTextfestgelegten Nachricht zusätzlichen Kontext hinzu, der für die Nachricht relevant ist, z. B. die Uhrzeit, zu der sie gesendet wurde, und die Person, die sie gesendet hat.
ConversationFragment.kt
private fun createNotification(
notificationId: Int,
message: Message,
person: Person,
shortcut: ShortcutInfoCompat,
time: Long
): Notification? {
...
.setStyle(NotificationCompat.MessagingStyle(person).addMessage(
NotificationCompat.MessagingStyle.Message(
message.content,
time,
person
)
)
)
...
.build()
}
App ausführen
- Starten Sie die App.
- Geben Sie im Textfeld Nachrichten-Composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Sie erhalten wieder eine Push-Benachrichtigung, die jedoch anders gestaltet ist. Sie enthält einen Avatar und einen bestimmten Stil für die Nachricht. Es gibt jedoch noch einiges zu tun, bevor Ihre Benachrichtigungen dort angezeigt werden, wo sie angezeigt werden sollen.
4. Freigabeziele für Unterhaltungen erstellen
Sie müssen in der Benachrichtigung auf eine Tastenkombination zum Teilen oder ein Ziel zum Teilen verweisen. Freigabeziele werden in der Datei shortcuts.xml definiert und sind die Einstiegspunkte für die Verarbeitung von programmatisch definierten Verknüpfungen. Die von Ihnen erstellten Verknüpfungen stellen die Unterhaltungen in der App dar und ermöglichen es Ihnen, Inhalte in Ihren Unterhaltungen zu teilen.
Ziele für den Anteil definieren
- Klicken Sie auf dem Tab Project (Projekt) mit der rechten Maustaste auf das Verzeichnis
resund wählen Sie New > Directory (Neu > Verzeichnis) aus. - Geben Sie in das Textfeld
xmlein und drücken Sie dannEnter(oderreturnunter macOS). - Klicken Sie mit der rechten Maustaste auf das Verzeichnis
xmlund wählen Sie dann Datei aus. - Geben Sie in das Textfeld
shortcuts.xmlein und drücken Sie dannEnter(oderreturnunter macOS). - Deklarieren Sie in der Datei
shortcuts.xmldas Share-Ziel , das die Freigabe von Daten des Typstext/plainverarbeitet:
shortcuts.xml
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<share-target android:targetClass="com.example.compose.jetchat.NavActivity">
<data android:mimeType="text/plain" />
<category android:name="com.example.compose.jetchat.share.TEXT_SHARE_TARGET" />
</share-target>
</shortcuts>
- Klicken Sie auf dem Tab Projekt auf
manifestsund doppelklicken Sie dann aufAndroidManifest.xml. - Definieren Sie in der Datei
AndroidManifest.xmldie Dateishortcuts.xml:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.compose.jetchat">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Jetchat.NoActionBar">
...
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</application>
</manifest>
- Definieren Sie in der Komponente
activityder DateiAndroidManifest.xmlden Intent-Filter, der die Freigabelogik enthält:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.compose.jetchat">
...
<activity
...
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
...
Tastenkombinationen definieren
Jeder Benachrichtigung muss der entsprechende Kurzbefehl zugeordnet werden. Sie können nur ein eindeutiges Tastenkürzel pro Unterhaltung definieren, da das eindeutige Tastenkürzel den einen Kontakt darstellt, mit dem Sie Inhalte teilen möchten.
So erstellen Sie eine Verknüpfung:
- Klicken Sie auf dem Tab Projekt auf
app>java>com.example.compose.jetchat>conversation>utilund doppelklicken Sie dann aufConversationUtil. - Fügen Sie in der Datei
ConversationUtil.kteinegenerateShortcut-Funktion hinzu:
ConversationUtil.kt
import android.content.Intent
import androidx.core.content.pm.ShortcutInfoCompat
import com.example.compose.jetchat.NavActivity
class ConversationUtil {
companion object {
...
fun generateShortcut(context: Context, shortcutId: String): ShortcutInfoCompat {
return ShortcutInfoCompat.Builder(context, shortcutId)
.setCategories(setOf(CATEGORY_SHARE))
.setLongLived(true)
.setShortLabel(shortcutId)
.setLongLabel(shortcutId)
.setIntent(
Intent(context, NavActivity::class.java)
.setAction(Intent.ACTION_VIEW)
)
.build()
}
Diese Funktion enthält die für die Konversation erforderlichen Methoden setPerson und setLongLived. Die Person ist der Kontakt, der mit der Verknüpfung verknüpft ist. Wenn Sie „long-lived“ auf den Wert true festlegen, wird diese Verknüpfung vom System im Cache gespeichert und auf verschiedenen Oberflächen in der Benutzeroberfläche angezeigt.
Verweisen Sie in der Benachrichtigung auf die Tastenkombination.
Sie müssen in der Benachrichtigung auf die Tastenkombination zum Teilen verweisen. Sie müssen die Verknüpfung jedoch erstellen, bevor Sie die Benachrichtigung senden.
Führen Sie dazu die folgenden Schritte aus:
- Suchen Sie in der Datei
ConversationFragment.ktnach der KlasseConversationFragment. - Erstellen Sie vor dem Aufruf der Variablen
notificationeine Variableshortcut, die auf die vonConversationUtil.generateShortcutgenerierte Verknüpfung verweist. - Ersetzen Sie in der
createNotification-Methode der Variablennotificationnulldurch die Variableshortcutals Parameter.
ConversationFragment.kt
private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
val notification = createNotification(notificationId, message, person, shortcut, time)
...
}
}
- Fügen Sie in der Methode
createNotificationdie MethodeNotificationCompat.Builder#setShortcutInfohinzu und übergeben Sie dann die Variableshortcutals Parameter.
ConversationFragment.kt
private fun createNotification(
notificatoinIf: Int,
messagin: Message,
person: Person,
shortcut: ShortcutInfoCompat?,
time: Long
): Notification {
...
return NotificationCompat.Builder(context!!, ConversationUtil.CHANNEL_MESSAGES)
...
.setShortcutInfo(shortcut)
.build()
}
Verknüpfung veröffentlichen
- Rufen Sie zum Veröffentlichen der Verknüpfung in der Funktion
simulateResponseAsANotificationvor der MethodenotificationManager.notifydie MethodepushDynamicShortcutauf:
ConversationFragment.kt
import androidx.core.content.pm.ShortcutManagerCompat
...private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
...
}
}
App ausführen
- Starten Sie die App.
- Geben Sie im Textfeld Nachrichten-Composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Sie erhalten wieder eine Push-Benachrichtigung, die jedoch deutlicher als Unterhaltungsbenachrichtigung gestaltet ist. Das Avatarsymbol ist deutlicher zu sehen und enthält das App-Symbol. Absender, Uhrzeit und Text sind ebenfalls übersichtlicher.
5. Optional: Bubbles aktivieren
Bubbles wurden in Android 9 eingeführt und in Android 11 verbessert und für die Verwendung im Kontext von Unterhaltungen neu ausgerichtet. Blasen sind kreisförmige Overlays, die als Avatare für Ihre Unterhaltungen dienen. Sie werden im App-Launcher angezeigt und ermöglichen es Ihnen, ganz einfach in einer maximierten Bubble auf Unterhaltungen zu antworten. Auch wenn Blasen implementiert sind, sind sie je nach Nutzereinstellung optional.
So aktivieren Sie Blasen:
- Fügen Sie in der Datei
AndroidManifest.xmldie AttributeallowEmbeddedundresizeableActivityhinzu und legen Sie für jedes den Werttruefest:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
- Fügen Sie in der Klasse
ConversationUtilder DateiConversationUtil.ktdie Blasenmetadaten hinzu:
ConversationUtil.kt
import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
fun createBubbleMetadata(context: Context, icon: IconCompat): NotificationCompat.BubbleMetadata {
// Create bubble intent
val target = Intent(context, NavActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, REQUEST_BUBBLE, target, flagUpdateCurrent(mutable = true))
// Create bubble metadata
return NotificationCompat.BubbleMetadata.Builder(bubbleIntent, icon)
.setDesiredHeight(400)
.setSuppressNotification(true)
.build()
}
- Erstellen Sie in der Datei
ConversationFragment.ktdie Blasenmetadaten für die Benachrichtigung und verweisen Sie darauf:
ConversationFragment.kt
private fun createNotification(
notificatoinIf: Int,
messagin: Message,
person: Person,
shortcut: ShortcutInfoCompat?,
time: Long
): Notification {
...
// Reference the bubble metadata in the notification.
return NotificationCompat.Builder(context!!, ConversationUtil.CHANNEL_MESSAGES)
...
.setBubbleMetadata(ConversationUtil.createBubbleMetadata(context!!, person.icon!!))
...
.build()
}
App ausführen
- Starten Sie die App.
- Geben Sie im Textfeld Nachrichten-Composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Nach einigen Sekunden erhalten Sie eine Benachrichtigung vom Chat in Form einer Bubble.
- Tippe auf die Bubble. Die Unterhaltung wird über die Bubble geöffnet.

6. Optional: Link teilen
Sie haben Freigabeziele deklariert und in Ihren Benachrichtigungen darauf verwiesen. Dadurch wird Ihr Kontakt auch im Sharesheet angezeigt, einer Bottom-up-Komponente, die erscheint, wenn ein ACTION-Intent gesendet wird. Die Freigabeziele werden oben im Freigabe-Sheet angezeigt. So können Sie Rich Content in Ihren Unterhaltungen teilen.
So rufen Sie das Freigabeblatt auf:
- Öffnen Sie auf Ihrem Gerät Google Chrome und rufen Sie dann eine beliebige Webseite auf, z. B. developer.android.com.
- Klicken Sie bei Bedarf auf das Dreipunkt-Menü
. - Klicken Sie auf
Teilen. Das Freigabeblatt wird unten auf dem Bildschirm angezeigt.

- Klicken Sie nach Möglichkeit auf
JetChat. Die URL wird im Chat geteilt. - Wenn Sie
JetChat nicht sehen, klicken Sie auf
Mehr, um das System-ShareSheet aufzurufen. Wischen Sie dann im ShareSheet nach oben und klicken Sie auf
JetChat. Die URL wird im Chat geteilt.
Dies ist ein einfaches Beispiel. Es gibt umfangreichere Inhaltstypen, die Sie teilen können. Weitere Informationen finden Sie unter Einfache Daten von anderen Apps abrufen.
7. Glückwunsch
Glückwunsch! Jetzt wissen Sie, wie Sie Chatfunktionen in Android-Apps implementieren mit der Messaging API und der People API. Viel Spaß beim Messaging!