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 (Kişiler) 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 beste özelliğini kullanan sade ve çalışmayan bir sohbet uygulaması olan JetChat uygulamasının kapsamını genişletirsiniz.
Ön koşullar
- Android geliştirmeyle ilgili temel bilgiler
- Bildirimlerle ilgili temel bilgiler
Oluşturacaklarınız
Aşağıdakileri yapan genişletilmiş bir JetChat uygulaması:
- Bildirim çekmecesinin ayrılmış ileti dizisi bölümündeki görüşmeleri temsil eden bildirimler gösterir.
- Referanslar, bu bildirimlerde yer alan ve uygulamanızın görüşmelerinde paylaşmanıza olanak tanıyan hedefleri paylaşır.
- 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 bildirimlerin, bildirim çekmecesinin ayrılmış ileti dizisi bölümünde gösterme.
- Messaging and People API'lerinin sağladığı çeşitli deneyimleri anlama
Gerekenler
- Git
- Android Studio
- GitHub hesabı
2. Hazırlanın
Başlangıç noktası JetChat uygulamasını temel alır. Başlangıç kodu, Mesajlaşma ve Kişiler API'lerini daha iyi sergilemek için JetChat uygulamasını genişletir.
Başlangıç kodunu alın
Bu codelab'in başlangıç kodunu almak için şu 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 ardından
Uygulamayı çalıştır'ı tıklayın. Emülatör bölmesi görünür ve uygulamayı görüntüler.
Genişletilmiş JetChat uygulamasını keşfedin
- Uygulamanın Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
- Uygulamadan ayrılın. Birkaç saniye sonra, sohbetteki birinden yanıt içeren bir push bildirimi alırsınız.
3. Görüşme bildirimleri oluşturun
Android 11'de, sohbetle ilgili bildirimlerin bildirim çekmecesinin belirli bir bölümünde (yalnızca sohbetlere yönelik) görünmesine olanak tanıyan API'ler kullanıma sunuldu.

Bildirim Notification.MessagingStyle sınıfına ait olmalı ve uzun süreli bir paylaşım kısayoluna başvurmalıdır. Bu bölümde, ileti dizisi bölümünde sohbetleri temsil eden bu bildirimleri göstermek için bu API koşullarını nasıl yerine getireceğinizi öğreneceksiniz.
NotificationCompat.MessagingStyle sınıfıyla ilgili bildirim almak için aşağıdaki adımları uygulayın:
- Android Studio'nun Proje sekmesinde
appsimgesini tıklayın >java>com.example.compose.jetchat>conversationve ardındanConversationFragmentsimgesini çift tıklayın. ConversationFragment.ktdosyasındaConversationFragmentsınıfını ve 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 mesajı, mesajın gönderildiği zaman ve gönderen kişi gibi mesajla alakalı ek bilgilerle 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 Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
- Uygulamadan ayrılın. Tekrar bir push bildirimi alıyorsunuz ancak bu bildirimin stili farklı. Mesaj için bir avatar ve farklı bir stil içerir. Ancak, bildirimlerinizin olması gereken yerde görünmesi için yapmanız gereken başka işlemler vardır.
4. Görüşmeler için paylaşım hedefleri oluşturma
Bildirimde bir paylaşım kısayoluna referans vermeniz veya hedefi paylaşmanız gerekir. Paylaşım hedefleri, shortcuts.xml dosyasında tanımlanır ve programatik olarak tanımlanmış kısayolların işlenmesine ilişkin 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.
Paylaşım hedefleri tanımlama
- Proje sekmesinde
resdizinini sağ tıklayın ve Yeni > Dizin'e gidin. - Metin kutusuna
xmlyazıpEnter(veya macOS'tereturn) tuşlarına basın. xmldizinini sağ tıklayın ve File'ı (Dosya) seçin.- Metin kutusuna
shortcuts.xmlyazıpEnter(veya macOS'tereturn) tuşlarına basın. shortcuts.xmldosyasında,text/plaintüründeki verilerin paylaşımını işleyen paylaşım hedefini tanımlayın:
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
manifestsöğesini ve ardındanAndroidManifest.xmlöğesini ç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şımda bulunulacak bir 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 şu adımları izleyin:
- Proje sekmesinde
appsimgesini tıklayın >java>com.example.compose.jetchat>conversation>utilve ardındanConversationUtilsimgesini ç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, görüşme için gerekli setPerson ve setLongLived yöntemlerini içerir. Kişi, kısayolla ilişkilendirilen kişidir ve uzun ömürlü seçeneğini true değerine ayarlamak bu kısayolun sistem tarafından önbelleğe alınmasını ve kullanıcı arayüzünün çeşitli yüzeylerinde gösterilmesini sağlar.
Bildirimdeki kısayola başvurun
Bildirimdeki paylaşım kısayoluna referans vermeniz gerekir. Ancak bildirimi aktarmadan ö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öğesinden oluşturulan kısayola başvuran birshortcutdeğişkeni oluşturun.notificationdeğişkeninincreateNotificationyönteminde,nulldeğerinishortcutdeğ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öntemindeNotificationCompat.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
notificationManager.notifyyönteminden öncekisimulateResponseAsANotificationişlevindepushDynamicShortcutyö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 Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
- Uygulamadan ayrılın. Yine bir push bildirimi alırsınız, ancak bu bildirimin stili sohbetle ilgili bir bildirim olarak daha belirgindir. Avatar simgesi daha belirgindir ve uygulama simgesini entegre eder. Gönderen, zaman ve metin de daha basit hale getirildi.
5. İsteğe bağlı: Baloncukları etkinleştirme
Baloncuklar, Android 9'da kullanıma sunuldu ve Android 11'deki görüşmeler bağlamında kullanılmak üzere iyileştirildi. Baloncuklar, görüşmelerin avatarı olan dairesel yer paylaşımlarıdır. Uygulama başlatıcıda görünür ve genişletilmiş bir baloncuk içinde görüşmelere kolayca yanıt vermenize olanak tanırlar. Uygulansa bile baloncuklar kullanıcının tercihine bağlı olarak isteğe bağlıdır.
Baloncukları etkinleştirmek için aşağıdaki adımları izleyin:
AndroidManifest.xmldosyasında,allowEmbeddedveresizeableActivityözelliklerini ekleyip her birini birtruedeğerine ayarlayın:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
ConversationUtil.ktdosyasınınConversationUtilsınıfında, baloncuk 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 baloncuk meta verilerini oluşturun ve bu meta verilere 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 Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
- Uygulamadan ayrılın. Birkaç saniye sonra sohbetten baloncuk biçiminde bir bildirim alırsınız.
- Balona dokunun. Görüşme balondan açılır.

6. İsteğe bağlı: Bağlantı paylaşma
Paylaşım hedefleri beyan ettiniz ve bildirimlerinizde bunlara referans verdiniz. Ayrıca, kişiniz, ACTION niyeti gönderildiğinde görülen aşağıdan yukarıya bir bileşen olan Sharesheet'te gösterilmesini de etkinleştirdiniz. Paylaşım hedefleri Sharesheet'in en üstünde görünür ve görüşmelerinizde zengin içerik paylaşmanıza olanak tanır.
Sharesheet'i çağırmak için şu adımları uygulayın:
- Cihazınızda Google Chrome'u açın, ardından istediğiniz web sayfasına (ör. developer.android.com) gidin.
- Gerekirse
Daha fazla ver'i tıklayın.
Paylaş'ı tıklayın. Ekranın alt kısmında Sharesheet görüntülenir.

- Mümkünse
JetChat'i tıklayın. URL, sohbette paylaşılır.
JetChat seçeneğini görmüyorsanız sistem paylaşım sayfasını çağırmak için
Diğer'i tıklayın, ardından ShareSheet'te yukarı doğru 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 veriler alma konusuna bakın.
7. Tebrikler
Tebrikler! Artık Mesajlaşma ve Kişiler API'lerini kullanarak bir Android uygulamasına sohbetle ilgili özellikleri nasıl ekleyeceğinizi biliyorsunuz. Mutlu mesajlar!