1. Hinweis
Es ist schwierig, eine Messaging-App zu erstellen. Obwohl die Nutzererfahrung insgesamt subjektiv ist, bietet Android die Messaging- und People-APIs, die das Chat-Erlebnis verbessern und optimieren.
In diesem Codelab erfährst du, wie du mit diesen APIs eine faszinierende Umgebung für Chat-Apps unter Android schaffst. Sie erweitern die JetChat-App, eine einfache und nicht funktionsfähige Chat-App, die Jetpack Compose verwendet.
Vorbereitung
- Grundkenntnisse in der Android-Entwicklung
- Grundkenntnisse in Benachrichtigungen
Inhalt
Eine erweiterte JetChat-App, die Folgendes ausführt:
- Zeigt Benachrichtigungen zu Unterhaltungen im Bereich für reservierte Unterhaltungen der Benachrichtigungsleiste an.
- Referenzen teilen in diesen Benachrichtigungen Ziele, die du in den Unterhaltungen deiner App teilen kannst.
- Erzwingt Best Practices zum Erstellen dieser Objekte, um die vom System bereitgestellten Standardfunktionen zur Optimierung Ihrer App zu nutzen.
Aufgaben in diesem Lab
- Benachrichtigungen zu Unterhaltungen im Bereich für reservierte Unterhaltungen der Benachrichtigungsleiste einblenden
- Informationen zu den verschiedenen Möglichkeiten, die durch die Messaging API und die People API ermöglicht werden
Voraussetzungen
- Git
- Android Studio
- Ein GitHub-Konto
2. Einrichten
Der Ausgangspunkt basiert auf der JetChat-App. Der Startcode erweitert die JetChat-App, um die Messaging- und People-APIs besser präsentieren zu können.
Startercode abrufen
So rufen Sie den Startcode für dieses Codelab ab:
- Klonen Sie über die Befehlszeile das folgende GitHub-Repository:
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 mit der App wird eingeblendet.
Erweiterte JetChat App entdecken
- Geben Sie im Textfeld Nachricht #composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Nach wenigen Sekunden erhalten Sie eine Push-Benachrichtigung mit einer Antwort von einem Chatteilnehmer.
3. Unterhaltungsbenachrichtigungen erstellen
Mit Android 11 wurden APIs eingeführt, die es ermöglichen, dass chatbezogene Benachrichtigungen in einem dafür vorgesehenen Bereich der Benachrichtigungsleiste angezeigt werden, was ausschließlich für Unterhaltungen vorgesehen ist.
Die Benachrichtigung muss zur Notification.MessagingStyle
-Klasse gehören und auf eine langlebige Verknüpfung zum Teilen verweisen. In diesem Abschnitt erfahren Sie, wie Sie diese API-Anforderungen erfüllen, damit Benachrichtigungen angezeigt werden, die Unterhaltungen im Bereich „Unterhaltungen“ repräsentieren.
So richten Sie Benachrichtigungen für den NotificationCompat.MessagingStyle
-Kurs ein:
- Klicken Sie in Android Studio auf dem Tab Project (Projekt) auf
app
>java
>com.example.compose.jetchat
>conversation
. Doppelklicken Sie dann aufConversationFragment
. - Suchen Sie in der Datei
ConversationFragment.kt
die KlasseConversationFragment
und dann den CodeblockNotification
dercreateNotification
-Funktion, in dem die Benachrichtigung erstellt wird. - Ersetzen Sie die Methode
setContentText
durch einesetStyle
-Methode, die den Stil der Benachrichtigung auf die KlasseNotificationCompat.MessagingStyle
festlegt. Diese Hilfsklasse fügt die mit der MethodesetContextText
festgelegte Nachricht mit zusätzlichem Kontext hinzu, der für die Nachricht relevant ist, z. B. die Zeit, 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 Nachricht #composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Sie erhalten wieder eine Push-Benachrichtigung, diese ist jedoch anders gestaltet. Sie enthält einen Avatar und einen individuellen Stil für die Nachricht. Es gibt jedoch noch einiges zu tun, bis deine Benachrichtigungen an der gewünschten Stelle angezeigt werden.
4. Freigabeziele für Unterhaltungen erstellen
Sie müssen in der Benachrichtigung auf eine Verknüpfung oder ein Freigabeziel verweisen. Freigabeziele werden in der Datei shortcuts.xml
definiert und sind die Einstiegspunkte für die Verarbeitung von Verknüpfungen, die programmatisch definiert sind. Die von dir erstellten Verknüpfungen repräsentieren die Unterhaltungen in der App und ermöglichen es dir, Inhalte in deinen Unterhaltungen zu teilen.
Freigabeziele definieren
- Klicken Sie auf dem Tab Project (Projekt) mit der rechten Maustaste auf das Verzeichnis
res
und wählen Sie dann New > Verzeichnis. - Geben Sie in das Textfeld
xml
ein und drücken Sie dannEnter
(oderreturn
unter macOS). - Klicken Sie mit der rechten Maustaste auf das Verzeichnis
xml
und wählen Sie Datei aus. - Geben Sie in das Textfeld
shortcuts.xml
ein und drücken Sie dannEnter
(oderreturn
unter macOS). - Deklarieren Sie in der Datei
shortcuts.xml
das Freigabeziel , das die Freigabe von Daten vom Typtext/plain
verwaltet:
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
manifests
und doppelklicken Sie dann aufAndroidManifest.xml
. - Definieren Sie in der Datei
AndroidManifest.xml
die 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>
- Definiere in der Komponente
activity
der DateiAndroidManifest.xml
den 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 festlegen
Für jede Benachrichtigung musst du die entsprechende Verknüpfung verknüpfen. Sie definieren nur ein eindeutiges Kürzel pro Konversation, da dieses für den Kontakt steht, mit dem Sie die Daten teilen möchten.
So erstellen Sie eine Verknüpfung:
- Klicken Sie auf dem Tab Project (Projekt) auf
app
>java
>com.example.compose.jetchat
>conversation
>util
und dann doppelt aufConversationUtil
. - Fügen Sie in der Datei
ConversationUtil.kt
einegenerateShortcut
-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 Unterhaltung erforderlichen Methoden setPerson
und setLongLived
. Die Person ist der Kontakt, der mit der Verknüpfung verknüpft ist. Wenn du für „Langlebig“ einen true
-Wert festlegst, wird diese Verknüpfung vom System im Cache gespeichert und auf verschiedenen Oberflächen der Benutzeroberfläche angezeigt.
Verweisen Sie auf den Kurzbefehl in der Benachrichtigung.
Sie müssen in der Benachrichtigung auf die Freigabeverknüpfung verweisen. Sie müssen jedoch die Verknüpfung erstellen, bevor Sie die Benachrichtigung senden.
Führen Sie dazu die folgenden Schritte aus:
- Suchen Sie in der Datei
ConversationFragment.kt
nach der KlasseConversationFragment
. - Erstellen Sie vor dem Aufruf der Variablen
notification
eineshortcut
-Variable, die auf die ausConversationUtil.generateShortcut
generierte Tastenkombination verweist. - Ersetzen Sie in der Methode
createNotification
der Variablennotification
den Parameternull
durch die Variableshortcut
als 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
createNotification
die MethodeNotificationCompat.Builder#setShortcutInfo
hinzu und übergeben Sie dann die Variableshortcut
als 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
simulateResponseAsANotification
vor der MethodenotificationManager.notify
die MethodepushDynamicShortcut
auf:
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 Nachricht #composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Sie erhalten wieder eine Push-Benachrichtigung, aber diese ist individueller als unterhaltungsbezogene Benachrichtigung gestaltet. Das Avatarsymbol ist ausgeprägter und das App-Symbol ist integriert. Auch Absender, Uhrzeit und Text wurden optimiert.
5. Optional: Bubbles aktivieren
In Android 9 wurden Bubbles eingeführt, verbessert und umfunktioniert, um sie im Kontext von Unterhaltungen in Android 11 zu verwenden. Bubbles sind kreisförmige Overlays, die Avatare für deine Unterhaltungen sind. Sie werden im App Launcher angezeigt und ermöglichen es Ihnen, auf Unterhaltungen in einer maximierten Bubble ganz einfach zu antworten. Auch wenn die Funktion implementiert wurde, sind Bubbles je nach den Einstellungen des Nutzers optional.
So aktivieren Sie Bubbles:
- Fügen Sie in der Datei
AndroidManifest.xml
die AttributeallowEmbedded
undresizeableActivity
hinzu und legen Sie jedes Attribut auf einen Werttrue
fest:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
- Fügen Sie in der Klasse
ConversationUtil
der DateiConversationUtil.kt
die Metadaten der Bubble 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.kt
die Bubble-Metadaten und verweisen Sie auf diese:
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 Nachricht #composers der App eine Nachricht ein und tippen Sie dann auf Senden.
- Verlassen Sie die App. Nach wenigen Sekunden erhalten Sie vom Chat eine Benachrichtigung in Form einer Bubble.
- Tippen Sie auf das Infofeld. Die Unterhaltung wird in der Bubble geöffnet.
6. Optional: Link teilen
Du hast Freigabeziele deklariert und in deinen Benachrichtigungen darauf verwiesen. Dadurch kann dein Kontakt auch im Sharesheet angezeigt werden. Dies ist eine Bottom-up-Komponente, die angezeigt wird, wenn ein ACTION
-Intent gesendet wird. Inhalte zum Teilen werden oben auf dem Sharesheet angezeigt. So kannst du Rich Content in deinen Unterhaltungen teilen.
So rufst du das Sharesheet auf:
- Öffnen Sie auf Ihrem Gerät Google Chrome und rufen Sie eine Webseite Ihrer Wahl auf, z. B. developer.android.com.
- Klicken Sie, falls erforderlich, auf Mehr vert.
- Klicken Sie auf Teilen. Das Sharesheet wird unten auf dem Bildschirm angezeigt.
- Klicken Sie nach Möglichkeit auf JetChat. Die URL wird im Chat geteilt.
- Wenn JetChat nicht angezeigt wird, klicken Sie auf Mehr, um das System-Sharesheet aufzurufen. Wischen Sie dann in 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 mit anderen teilen können. Weitere Informationen finden Sie unter Einfache Daten aus anderen Apps abrufen.
7. Glückwunsch
Glückwunsch! Jetzt wissen Sie, wie Sie einer Android-App mit der Messaging API und der People API chatbezogene Funktionen hinzufügen. Viel Spaß beim Messaging!