Mesajlaşma ve Kişiler API'lerini kullanarak Android uygulamalarına sohbetle ilgili özellikler ekleyin

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:

  1. 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
  1. Projeyi Android Studio'da açın ve a1bbb9d97659a043.png 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

  1. Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
  2. 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.

Durum çubuğundan aşağı kaydırdığınızda görünen bildirim çekmecesi

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:

  1. Android Studio'nun Project (Proje) sekmesinde app > java > com.example.compose.jetchat > conversation'ı tıklayın ve ardından ConversationFragment'ı çift tıklayın.
  2. ConversationFragment.kt dosyasında ConversationFragment sınıfını, ardından bildirimin oluşturulduğu createNotification işlevinin Notification kod bloğunu bulun.
  3. setContentText yöntemini, bildirimin stilini NotificationCompat.MessagingStyle sınıfına ayarlayan bir setStyle yöntemiyle değiştirin. Bu yardımcı sınıf, setContextText yö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

  1. Uygulamayı çalıştırın.
  2. Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
  3. 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

  1. Proje sekmesinde, res dizinini sağ tıklayın ve Yeni > Dizin'i seçin.
  2. Metin kutusuna xml yazıp Enter tuşuna (macOS'te return) basın.
  3. xml dizinini sağ tıklayın ve Dosya'yı seçin.
  4. Metin kutusuna shortcuts.xml yazıp Enter tuşuna (macOS'te return) basın.
  5. shortcuts.xml dosyasında, text/plain tü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>
  1. Proje sekmesinde manifests simgesini tıklayın ve ardından AndroidManifest.xml simgesini çift tıklayın.
  2. AndroidManifest.xml dosyasında shortcuts.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>
  1. AndroidManifest.xml dosyasının activity 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şı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:

  1. Proje sekmesinde app > java > com.example.compose.jetchat > conversation > util'ı tıklayın ve ardından ConversationUtil'ı çift tıklayın.
  2. ConversationUtil.kt dosyasına bir generateShortcut 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, 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:

  1. ConversationFragment.kt dosyasında ConversationFragment sınıfını bulun.
  2. notification değişkenine yapılan çağrıdan önce, ConversationUtil.generateShortcut'den oluşturulan kısayola referans veren bir shortcut değişkeni oluşturun.
  3. notification değişkeninin createNotification yönteminde null değerini parametre olarak shortcut 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)
       ...
   }
}
  1. createNotification yöntemine NotificationCompat.Builder#setShortcutInfo yöntemini ekleyin ve ardından shortcut 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 simulateResponseAsANotification işlevinde, notificationManager.notify yönteminden önce pushDynamicShortcut 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

  1. Uygulamayı çalıştırın.
  2. Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
  3. 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:

  1. AndroidManifest.xml dosyasında allowEmbedded ve resizeableActivity özelliklerini ekleyin, ardından her birini true değerine ayarlayın:

AndroidManifest.xml

<activity
  ...
  android:allowEmbedded="true"
  android:resizeableActivity="true"
  ...
</activity>
  1. ConversationUtil.kt dosyasının ConversationUtil sı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()
    }
  1. ConversationFragment.kt dosyası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

  1. Uygulamayı çalıştırın.
  2. Uygulamanın Message #composers (Mesaj #oluşturucular) metin kutusuna bir mesaj girip Gönder'e dokunun.
  3. Uygulamadan uzaklaşın. Birkaç saniye sonra, sohbetten balon şeklinde bir bildirim alırsınız.
  4. Balona dokunun. Görüşme, baloncuğun içinden açılır.

Sohbet balonu

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:

  1. Cihazınızda Google Chrome'u açın ve ardından developer.android.com gibi istediğiniz bir web sayfasına gidin.
  2. Gerekirse 2fdbaccda71bc5f0.png Diğer'i tıklayın.
  3. 771b0be21764f6b6.png Paylaş'ı tıklayın. Paylaşım sayfası ekranın alt kısmında görünür.

Paylaşım sayfası

  1. Mümkünse 468248e6b8a84bb3.png JetChat'i tıklayın. URL, sohbette paylaşılır.
  2. 468248e6b8a84bb3.png JetChat'i görmüyorsanız sistem paylaşım sayfasını çağırmak için 145399af71577431.png Diğer'i tıklayın, ardından paylaşım sayfasında yukarı kaydırıp 468248e6b8a84bb3.png 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!

Daha fazla bilgi