1. Başlamadan önce
Mesajlaşma uygulaması oluşturmak zordur. Genel kullanıcı deneyimi öznel olsa da Android, sohbet deneyimini iyileştiren ve kolaylaştıran Messaging ve People API'lerini sunar.
Bu codelab'de, Android'deki sohbet uygulamaları için ilgi çekici bir ekosistem oluşturmak üzere bu API'leri nasıl kullanacağınızı öğreneceksiniz. Jetpack Compose kullanan, temel ve işlevsel olmayan bir sohbet uygulaması olan JetChat uygulamasını genişletiyorsunuz.
Ön koşullar
- Android geliştirme hakkında temel bilgiler
- Bildirimler hakkında temel bilgi
Ne oluşturacaksınız?
Aşağıdakileri yapan genişletilmiş bir JetChat uygulaması:
- Bildirim çekmecesinin ayrılmış görüşme bölümünde görüşmeleri temsil eden bildirimleri gösterir.
- Bu bildirimlerde, uygulamanızın görüşmelerinde paylaşım yapmanıza olanak tanıyan paylaşım hedefleri gösterilir.
- Uygulamanızı geliştiren sistem tarafından sağlanan varsayılan deneyimlerden yararlanmak için bu nesnelerin oluşturulmasıyla ilgili en iyi uygulamaları zorunlu kılar.
Neler öğreneceksiniz?
- Görüşmeyle ilgili bildirimleri, bildirim çekmecesinin ayrılmış görüşme bölümünde gösterme
- Mesajlaşma ve People API'lerinin sağladığı çeşitli deneyimleri anlama
Gerekenler
- Git
- Android Studio
- GitHub hesabı
2. Hazırlanın
Başlangıç noktası JetChat uygulamasına dayanmaktadır. Başlangıç kodu, Messaging ve People API'lerini daha iyi sergilemek için JetChat uygulamasını genişletir.
Başlangıç kodunu alma
Bu codelab'in başlangıç kodunu almak için aşağıdaki adımları uygulayın:
- Komut satırınızdan aşağıdaki GitHub deposunu klonlayın:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- Projeyi Android Studio'da açın ve
Uygulamayı çalıştır'ı tıklayın. Emülatör bölmesi görünür ve uygulamayı gösterir.
Genişletilmiş JetChat uygulamasını keşfedin
- Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
- Uygulamadan uzaklaşın. Birkaç saniye sonra, sohbetteki bir kullanıcının yanıtını içeren bir push bildirimi alırsınız.
3. Sohbet bildirimleri oluşturma
Android 11'de, sohbetle ilgili bildirimlerin bildirim çekmecesinde yalnızca görüşmeler için ayrılmış bir bölümde görünmesine olanak tanıyan API'ler kullanıma sunuldu.

Bildirim, Notification.MessagingStyle sınıfında olmalı ve uzun ömürlü paylaşma kısayoluna referans vermelidir. Bu bölümde, görüşme bölümünde görüşmeleri temsil eden bu bildirimleri göstermek için bu API koşullarını nasıl karşılayacağınızı öğreneceksiniz.
NotificationCompat.MessagingStyle sınıfındaki bildirimleri almak için aşağıdaki adımları uygulayın:
- Android Studio'nun Project (Proje) sekmesinde
app>java>com.example.compose.jetchat>conversation'ı tıklayın ve ardındanConversationFragment'ı çift tıklayın. ConversationFragment.ktdosyasındaConversationFragmentsınıfını, ardından bildirimin oluşturulduğucreateNotificationişlevininNotificationkod bloğunu bulun.setContentTextyöntemini, bildirimin stiliniNotificationCompat.MessagingStylesınıfına ayarlayan birsetStyleyöntemiyle değiştirin. Bu yardımcı sınıf,setContextTextyöntemiyle ayarlanan iletiyi, gönderildiği zaman ve gönderen kişi gibi iletiyle alakalı ek bağlamlarla birlikte ekler.
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()
}
Uygulamayı çalıştırma
- Uygulamayı çalıştırın.
- Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
- Uygulamadan uzaklaşın. Tekrar push bildirimi alırsınız ancak bu bildirim farklı şekilde biçimlendirilmiştir. Mesaj için bir avatar ve farklı bir stil içerir. Ancak bildirimlerinizin doğru yerde görünmesi için yapmanız gereken başka işlemler var.
4. Sohbetler için paylaşım hedefleri oluşturma
Bildirimde bir paylaşma kısayoluna veya paylaşma hedefine referans vermeniz gerekir. Paylaşım hedefleri shortcuts.xml dosyasında tanımlanır ve programatik olarak tanımlanan kısayolların işlenmesi için giriş noktalarıdır. Oluşturduğunuz kısayollar, uygulamadaki görüşmeleri temsil eder ve görüşmelerinizde içerik paylaşmanıza olanak tanır.
Pay hedefi tanımlama
- Proje sekmesinde,
resdizinini sağ tıklayın ve Yeni > Dizin'i seçin. - Metin kutusuna
xmlyazıpEntertuşuna (macOS'tereturn) basın. xmldizinini sağ tıklayın ve Dosya'yı seçin.- Metin kutusuna
shortcuts.xmlyazıpEntertuşuna (macOS'tereturn) basın. shortcuts.xmldosyasında,text/plaintüründeki verilerin paylaşımını işleyen paylaşım hedefi 'ni bildirin:
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>
- Proje sekmesinde
manifestssimgesini tıklayın ve ardındanAndroidManifest.xmlsimgesini çift tıklayın. AndroidManifest.xmldosyasındashortcuts.xmldosyasını tanımlayın:
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>
AndroidManifest.xmldosyasınınactivitybileşeninde, paylaşım mantığını içeren intent filtresini tanımlayın:
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>
...
Kısayolları tanımlama
Her bildirim için ilgili kısayolu ilişkilendirmeniz gerekir. Benzersiz kısayol, paylaşılacak tek kişiyi temsil ettiğinden her ileti dizisi için yalnızca bir benzersiz kısayol tanımlarsınız.
Kısayol oluşturmak için aşağıdaki adımları uygulayın:
- Proje sekmesinde
app>java>com.example.compose.jetchat>conversation>util'ı tıklayın ve ardındanConversationUtil'ı çift tıklayın. ConversationUtil.ktdosyasına birgenerateShortcutişlevi ekleyin:
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()
}
Bu işlev, sohbet için gerekli olan setPerson ve setLongLived yöntemlerini içerir. Kişi, kısayolla ilişkilendirilen kişidir ve uzun ömürlü ayarını true değerine getirmek, bu kısayolun sistem tarafından önbelleğe alınmasını ve kullanıcı arayüzündeki çeşitli yüzeylerde gösterilmesini sağlar.
Bildirimdeki kısayola bakın.
Bildirimde paylaşma kısayoluna referans vermeniz gerekir. Ancak bildirimi göndermeden önce kısayolu oluşturmanız gerekir.
Bunun için, aşağıdaki adımları uygulayın:
ConversationFragment.ktdosyasındaConversationFragmentsınıfını bulun.notificationdeğişkenine yapılan çağrıdan önce,ConversationUtil.generateShortcut'den oluşturulan kısayola referans veren birshortcutdeğişkeni oluşturun.notificationdeğişkeninincreateNotificationyöntemindenulldeğerini parametre olarakshortcutdeğişkeniyle değiştirin.
ConversationFragment.kt
private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
val notification = createNotification(notificationId, message, person, shortcut, time)
...
}
}
createNotificationyöntemineNotificationCompat.Builder#setShortcutInfoyöntemini ekleyin ve ardındanshortcutdeğişkenini parametre olarak iletin.
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()
}
Kısayolu yayınlayın.
- Kısayolu yayınlamak için
simulateResponseAsANotificationişlevinde,notificationManager.notifyyönteminden öncepushDynamicShortcutyöntemini çağırın:
ConversationFragment.kt
import androidx.core.content.pm.ShortcutManagerCompat
...private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
...
}
}
Uygulamayı çalıştırma
- Uygulamayı çalıştırın.
- Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
- Uygulamadan uzaklaşın. Tekrar push bildirimi alırsınız ancak bu bildirim, görüşmeyle ilgili bir bildirim olarak daha belirgin bir şekilde biçimlendirilir. Avatar simgesi daha belirgin ve uygulama simgesini içeriyor. Gönderen, saat ve metin de daha düzenli hale getirildi.
5. İsteğe bağlı: Baloncukları etkinleştirme
Balonlar Android 9'da kullanıma sunulmuş, Android 11'de ise geliştirilerek Android'deki sohbetler bağlamında kullanılmak üzere yeniden tasarlanmıştır. Sohbet balonları, görüşmelerinizin avatarları olan dairesel yer paylaşımlarıdır. Uygulama başlatıcıda görünürler ve genişletilmiş bir balonda görüşmelere kolayca yanıt vermenizi sağlarlar. Uygulansa bile, kullanıcı tercihine bağlı olarak mesaj balonları isteğe bağlıdır.
Mesaj balonlarını etkinleştirmek için aşağıdaki adımları uygulayın:
AndroidManifest.xmldosyasındaallowEmbeddedveresizeableActivityözelliklerini ekleyin, ardından her birinitruedeğerine ayarlayın:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
ConversationUtil.ktdosyasınınConversationUtilsınıfına balon meta verilerini ekleyin:
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()
}
ConversationFragment.ktdosyasında, bildirimdeki balon meta verilerini oluşturun ve bunlara referans verin:
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()
}
Uygulamayı çalıştırma
- Uygulamayı çalıştırın.
- Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
- Uygulamadan uzaklaşın. Birkaç saniye sonra, sohbetten balon şeklinde bir bildirim alırsınız.
- Balona dokunun. Görüşme, baloncuğun içinden açılır.

6. İsteğe bağlı: Bağlantı paylaşma
Paylaşım hedefleri bildirdiniz ve bildirimlerinizde bunlara referans verdiniz. Bu sayede, bir ACTION amacı gönderildiğinde görünen aşağıdan yukarıya doğru bir bileşen olan paylaşım sayfasında da kişinizin gösterilmesi sağlandı. Paylaşım hedefleri, paylaşım sayfasının üst kısmında görünür ve görüşmelerinizde zengin içerik paylaşmanıza olanak tanır.
Paylaşım sayfasını açmak için şu adımları uygulayın:
- Cihazınızda Google Chrome'u açın ve ardından developer.android.com gibi istediğiniz bir web sayfasına gidin.
- Gerekirse
Diğer'i tıklayın.
Paylaş'ı tıklayın. Paylaşım sayfası ekranın alt kısmında görünür.

- Mümkünse
JetChat'i tıklayın. URL, sohbette paylaşılır.
JetChat'i görmüyorsanız sistem paylaşım sayfasını çağırmak için
Diğer'i tıklayın, ardından paylaşım sayfasında yukarı kaydırıp
JetChat'i tıklayın. URL, sohbette paylaşılır.
Bu basit bir örnektir. Paylaşılacak daha zengin içerik türleri vardır. Daha fazla bilgi için Diğer uygulamalardan basit verileri alma başlıklı makaleyi inceleyin.
7. Tebrikler
Tebrikler! Artık Messaging ve People API'lerini kullanarak Android uygulamasına sohbetle ilgili özellikler eklemeyi biliyorsunuz. Keyifli mesajlaşmalar!