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 (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:

  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 ardından a1bbb9d97659a043.png 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

  1. Uygulamanın Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
  2. 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'in kullanıma sunduğu API'ler, sohbetle ilgili bildirimlerin bildirim çekmecesinin belirli bir bölümünde (yalnızca sohbetlere yönelik) gösterilmesini sağlıyor.

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

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:

  1. Android Studio'nun Proje sekmesinde app simgesini tıklayın > java > com.example.compose.jetchat > conversation ve ardından ConversationFragment simgesini çift tıklayın.
  2. ConversationFragment.kt dosyasında ConversationFragment sınıfını ve 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 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

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

  1. Proje sekmesinde res dizinini sağ tıklayın ve Yeni > Dizin'e gidin.
  2. Metin kutusuna xml yazıp Enter (veya macOS'te return) tuşlarına basın.
  3. xml dizinini sağ tıklayın ve File'ı (Dosya) seçin.
  4. Metin kutusuna shortcuts.xml yazıp Enter (veya macOS'te return) tuşlarına basın.
  5. 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>
  1. Proje sekmesinde manifests öğesini ve ardından AndroidManifest.xml öğesini ç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şı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:

  1. Proje sekmesinde app simgesini tıklayın > java > com.example.compose.jetchat > conversation > util ve ardından ConversationUtil simgesini ç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, 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:

  1. ConversationFragment.kt dosyasında ConversationFragment sınıfını bulun.
  2. notification değişkenine yapılan çağrıdan önce, ConversationUtil.generateShortcut öğesinden oluşturulan kısayola başvuran bir shortcut değişkeni oluşturun.
  3. notification değişkeninin createNotification yönteminde, null değerini 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önteminde 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 notificationManager.notify yönteminden önceki simulateResponseAsANotification işlevinde 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 Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
  3. 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:

  1. AndroidManifest.xml dosyasında, allowEmbedded ve resizeableActivity özelliklerini ekleyip her birini bir 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ı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()
    }
  1. 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

  1. Uygulamayı çalıştırın.
  2. Uygulamanın Mesaj #composers metin kutusuna bir mesaj girin ve Gönder'e dokunun.
  3. Uygulamadan ayrılın. Birkaç saniye sonra sohbetten baloncuk biçiminde bir bildirim alırsınız.
  4. Balona dokunun. Görüşme balondan açılır.

Görüşme balonu

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:

  1. Cihazınızda Google Chrome'u açın, ardından istediğiniz web sayfasına (ör. developer.android.com) gidin.
  2. Gerekirse 2fdbaccda71bc5f0.png Daha fazla ver'i tıklayın.
  3. 771b0be21764f6b6.png Paylaş'ı tıklayın. Ekranın alt kısmında Sharesheet görüntülenir.

Paylaşım Sayfası

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

Daha fazla bilgi