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
app
simgesini tıklayın >java
>com.example.compose.jetchat
>conversation
ve ardındanConversationFragment
simgesini çift tıklayın. ConversationFragment.kt
dosyasındaConversationFragment
sınıfını ve ardından bildirimin oluşturulduğucreateNotification
işlevininNotification
kod bloğunu bulun.setContentText
yöntemini, bildirimin stiliniNotificationCompat.MessagingStyle
sınıfına ayarlayan birsetStyle
yöntemiyle değiştirin. Bu yardımcı sınıf,setContextText
yö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
res
dizinini sağ tıklayın ve Yeni > Dizin'e gidin. - Metin kutusuna
xml
yazıpEnter
(veya macOS'tereturn
) tuşlarına basın. xml
dizinini sağ tıklayın ve File'ı (Dosya) seçin.- Metin kutusuna
shortcuts.xml
yazıpEnter
(veya macOS'tereturn
) tuşlarına basın. shortcuts.xml
dosyasında,text/plain
tü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.xml
dosyasındashortcuts.xml
dosyası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.xml
dosyasınınactivity
bileş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
app
simgesini tıklayın >java
>com.example.compose.jetchat
>conversation
>util
ve ardındanConversationUtil
simgesini çift tıklayın. ConversationUtil.kt
dosyasına birgenerateShortcut
iş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.kt
dosyasındaConversationFragment
sınıfını bulun.notification
değişkenine yapılan çağrıdan önce,ConversationUtil.generateShortcut
öğesinden oluşturulan kısayola başvuran birshortcut
değişkeni oluşturun.notification
değişkeninincreateNotification
yönteminde,null
değerinishortcut
değ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)
...
}
}
createNotification
yöntemindeNotificationCompat.Builder#setShortcutInfo
yöntemini ekleyin ve ardındanshortcut
değ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.notify
yönteminden öncekisimulateResponseAsANotification
işlevindepushDynamicShortcut
yö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.xml
dosyasında,allowEmbedded
veresizeableActivity
özelliklerini ekleyip her birini birtrue
değerine ayarlayın:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
ConversationUtil.kt
dosyasınınConversationUtil
sı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.kt
dosyası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!