1. Prima di iniziare
Creare un'app di messaggistica è una sfida. Sebbene l'esperienza utente complessiva sia soggettiva, Android fornisce le API Messaging e People, che migliorano e semplificano l'esperienza di chat.
In questo codelab imparerai a utilizzare queste API per creare un ecosistema interessante per le app di chat su Android. Estenderai l'app JetChat, un'app di chat essenziale e non funzionale che utilizza Jetpack Compose.
Prerequisiti
- Conoscenze di base dello sviluppo Android
- Conoscenze di base delle notifiche
Che cosa creerai
Un'app JetChat estesa che esegue le seguenti operazioni:
- Mostra le notifiche che rappresentano le conversazioni nella sezione delle conversazioni riservata del riquadro delle notifiche.
- Fa riferimento ai target di condivisione in queste notifiche che ti consentono di condividere nelle conversazioni dell'app.
- Applica le best practice per la creazione di questi oggetti per sfruttare le esperienze predefinite fornite dal sistema che migliorano l'app.
Che cosa imparerai a fare
- Come mostrare le notifiche relative alle conversazioni nella sezione delle conversazioni riservata del riquadro delle notifiche.
- Come comprendere le varie esperienze abilitate dalle API Messaging e People.
Che cosa ti serve
- Git
- Android Studio
- Un account GitHub
2. Configurazione
Il punto di partenza è l'app JetChat. Il codice di avvio estende l'app JetChat per mostrare meglio le API Messaging e People.
Recuperare il codice di avvio
Per recuperare il codice di avvio per questo codelab:
- Dalla riga di comando, clona il seguente repository GitHub:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- Apri il progetto in Android Studio e fai clic su
Esegui app. Viene visualizzato il riquadro Emulatore con l'app.
Esplorare l'app JetChat estesa
- Nella casella di testo Message #composers dell'app, inserisci un messaggio e tocca Invia.
- Esci dall'app. Dopo alcuni secondi, riceverai una notifica push contenente una risposta da qualcuno nella chat.
3. Creare notifiche delle conversazioni
Android 11 ha introdotto API che consentono alle notifiche relative alla chat di essere visualizzate in una sezione designata del riquadro delle notifiche, riservata esclusivamente alle conversazioni.

La notifica deve essere della classe Notification.MessagingStyle e fare riferimento a una scorciatoia per la condivisione di lunga durata. In questa sezione imparerai a soddisfare questi requisiti dell'API per mostrare queste notifiche che rappresentano le conversazioni nella sezione delle conversazioni.
Per creare notifiche della classe NotificationCompat.MessagingStyle:
- Nella scheda Progetto di Android Studio, fai clic su
app>java>com.example.compose.jetchat>conversatione poi fai doppio clic suConversationFragment. - Nel file
ConversationFragment.kt, trova la classeConversationFragmente poi il blocco di codiceNotificationdella funzionecreateNotificationin cui viene creata la notifica. - Sostituisci il metodo
setContentTextcon un metodosetStyleche imposta lo stile della notifica sulla classeNotificationCompat.MessagingStyle. Questa classe helper aggiunge il messaggio impostato con il metodosetContextTextcon un contesto aggiuntivo pertinente al messaggio, ad esempio l'ora di invio e la persona che lo ha inviato.
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()
}
Eseguire l'app
- Esegui l'app.
- Nella casella di testo Message #composers dell'app, inserisci un messaggio e tocca Invia.
- Esci dall'app. Riceverai di nuovo una notifica push, ma con uno stile diverso. Include un avatar e uno stile distinto per il messaggio. Tuttavia, devi fare altro prima che le notifiche vengano visualizzate dove dovrebbero.
4. Creare target di condivisione per le conversazioni
Devi fare riferimento a una scorciatoia per la condivisione o a un target di condivisione nella notifica. I target di condivisione sono definiti nel file shortcuts.xml e sono i punti di ingresso per la gestione delle scorciatoie definite a livello di programmazione. Le scorciatoie che crei rappresentano le conversazioni nell'app e ti consentono di condividere contenuti nelle conversazioni.
Definire i target di condivisione
- Nella scheda Progetto, fai clic con il tasto destro del mouse sulla directory
rese seleziona Nuovo > Directory. - Nella casella di testo, inserisci
xmle premiEnter(oreturnsu macOS). - Fai clic con il tasto destro del mouse sulla directory
xmle seleziona File. - Nella casella di testo, inserisci
shortcuts.xmle premiEnter(oreturnsu macOS). - Nel file
shortcuts.xml, dichiara il target di condivisione che gestisce la condivisione dei dati di tipotext/plain:
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>
- Nella scheda Progetto, fai clic su
manifestse poi fai doppio clic suAndroidManifest.xml. - Nel file
AndroidManifest.xml, definisci il fileshortcuts.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>
- Nel componente
activitydel fileAndroidManifest.xml, definisci il filtro per intent che contiene la logica di condivisione:
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>
...
Definire le scorciatoie
Per ogni notifica, devi associare la scorciatoia pertinente. Definisci una sola scorciatoia univoca per conversazione, perché la scorciatoia univoca rappresenta l'unico contatto con cui condividere.
Per generare una scorciatoia:
- Nella scheda Progetto, fai clic su
app>java>com.example.compose.jetchat>conversation>utile poi fai doppio clic suConversationUtil. - Nel file
ConversationUtil.kt, aggiungi una funzionegenerateShortcut:
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()
}
Questa funzione contiene i metodi setPerson e setLongLived necessari per la conversazione. La persona è il contatto associato alla scorciatoia e l'impostazione di lunga durata su un valore true garantisce che questa scorciatoia venga memorizzata nella cache dal sistema e visualizzata in varie piattaforme dell'UI.
Fare riferimento alla scorciatoia nella notifica
Devi fare riferimento alla scorciatoia per la condivisione nella notifica. Tuttavia, devi creare la scorciatoia prima di inviare la notifica.
Per farlo, segui questi passaggi:
- Nel file
ConversationFragment.kt, trova la classeConversationFragment. - Prima della chiamata alla variabile
notification, crea una variabileshortcutche faccia riferimento alla scorciatoia generata daConversationUtil.generateShortcut. - Nel metodo
createNotificationdella variabilenotification, sostituiscinullcon la variabileshortcutcome parametro.
ConversationFragment.kt
private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
val notification = createNotification(notificationId, message, person, shortcut, time)
...
}
}
- Nel metodo
createNotification, aggiungi ilNotificationCompat.Builder#setShortcutInfometodo e poi passa la variabileshortcutcome parametro.
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()
}
Pubblicare la scorciatoia
- Per pubblicare la scorciatoia, nella funzione
simulateResponseAsANotificationprima del metodonotificationManager.notify, chiama il metodopushDynamicShortcut:
ConversationFragment.kt
import androidx.core.content.pm.ShortcutManagerCompat
...private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
...
}
}
Eseguire l'app
- Esegui l'app.
- Nella casella di testo Message #composers dell'app, inserisci un messaggio e tocca Invia.
- Esci dall'app. Riceverai di nuovo una notifica push, ma con uno stile più distinto come notifica relativa alla conversazione. L'icona dell'avatar è più pronunciata e integra l'icona dell'app. Anche il mittente, l'ora e il testo sono più semplificati.
5. (Facoltativo) Attivare le bolle
Le bolle sono state introdotte in Android 9, migliorate e riproposte per l'utilizzo nel contesto delle conversazioni in Android 11. Le bolle sono overlay circolari che sono avatar delle tue conversazioni. Vengono visualizzate nel launcher delle app e ti consentono di rispondere facilmente alle conversazioni in una bolla espansa. Anche se implementate, le bolle sono facoltative a seconda delle preferenze dell'utente.
Per attivare le bolle:
- Nel file
AndroidManifest.xml, aggiungi gli attributiallowEmbeddederesizeableActivity, quindi imposta ciascuno su un valoretrue:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
- Nel file
ConversationUtil.ktdella classeConversationUtil, aggiungi i metadati delle bolle:
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()
}
- Nel file
ConversationFragment.kt, crea e fai riferimento ai metadati delle bolle nella notifica:
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()
}
Eseguire l'app
- Esegui l'app.
- Nella casella di testo Message #composers dell'app, inserisci un messaggio e tocca Invia.
- Esci dall'app. Dopo alcuni secondi, riceverai una notifica dalla chat sotto forma di bolla.
- Tocca la bolla. La conversazione si apre dalla bolla.

6. (Facoltativo) Condividere un link
Hai dichiarato i target di condivisione e hai fatto riferimento a questi nelle notifiche, il che ha anche consentito la visualizzazione del tuo contatto in Sharesheet, un componente dal basso verso l'alto che viene visualizzato quando viene inviato un intent ACTION. I target di condivisione vengono visualizzati nella parte superiore di Sharesheet e ti consentono di condividere contenuti avanzati nelle conversazioni.
Per richiamare Sharesheet:
- Sul dispositivo, apri Google Chrome e vai a una pagina web a tua scelta, ad esempio developer.android.com.
- Se necessario, fai clic su
Altro verticale. - Fai clic su
Condividi. Sharesheet viene visualizzato nella parte inferiore dello schermo.

- Se possibile, fai clic su
JetChat. L'URL viene condiviso nella chat. - Se non vedi
JetChat, fai clic su
Altro per richiamare Sharesheet di sistema, quindi scorri verso l'alto su Sharesheet e fai clic su
JetChat. L'URL viene condiviso nella chat.
Questo è un semplice esempio. Esistono tipi di contenuti più avanzati da condividere. Per ulteriori informazioni, consulta Recuperare dati semplici da altre app.
7. Complimenti
Complimenti! Ora sai come aggiungere funzionalità relative alla chat a un'app per Android con le API Messaging e People. Buona conversazione!