Görüşmeler için bildirim balonlarını kullanma

Bildirim balonları, kullanıcıların görüşmeleri görmesini ve görüşmelere katılmasını kolaylaştırır.

Şekil 1. Sohbet balonu.

Diğer uygulama içeriklerinin üzerinde yüzerler ve kullanıcılar baloncukları genişleterek uygulama içeriğini görebilir ve etkileşimde bulunabilir, kullanmadıkları zamanlarda ise daraltabilirler.

Cihaz kilitliyken veya her zaman açık ekran etkinken baloncuklar normal bildirimler gibi görünür.

Bildirim balonları kullanıcı tarafından etkinleştirilir. Bunun için, baloncukları destekleyen bildirimlerdeki baloncuk düğmesine dokunmaları yeterlidir. Bu sayede, ilgili sohbet her zaman baloncuk olarak gösterilir. Kullanıcılar, ayarlarda baloncuk olarak gösterdikleri sohbetleri düzenleyebilir veya uygulamanın genel ayarlarını değiştirebilir.

Kullanıcılar aşağıdakileri yapabilir:

  • Uygulamanızdaki tüm bildirim balonlarını engeller. Bildirimler engellenmez ancak hiçbir zaman balon olarak görünmez.
  • Uygulamanızdan seçilen bildirim balonlarına izin verin. Balon düğmesi kullanılarak balon haline getirilen bildirimler "seçilir".
  • Uygulamanızdan gelen tüm bildirim balonlarına izin verin. BubbleMetadata ile gönderilen tüm bildirimler balon olarak görünür.

Bildirim Balonu API'si

Bildirim balonları, Notification API kullanılarak oluşturulur. Bildiriminizin baloncuk olarak görünmesini istiyorsanız bildirime ek veri ekleyin.

Balonun genişletilmiş görünümü, seçtiğiniz bir etkinlikten oluşturulur. Etkinliği, baloncuk olarak düzgün şekilde görünecek şekilde yapılandırın. Etkinlik yeniden boyutlandırılabilir ve yerleştirilmiş olmalıdır. Bu koşullardan herhangi birini karşılamıyorsa sistem bunu bildirim olarak gösterir.

Aşağıdaki kodda, baloncukların nasıl uygulanacağı gösterilmektedir:

<activity
  android:name=".bubbles.BubbleActivity"
  android:theme="@style/AppTheme.NoActionBar"
  android:label="@string/title_activity_bubble"
  android:allowEmbedded="true"
  android:resizeableActivity="true"
/>

Uygulamanız aynı türden birden fazla baloncuk gösteriyorsa (ör. farklı kişilerle birden fazla sohbet görüşmesi) etkinliğin birden fazla örnek başlatabilmesi gerekir. Android 10 ve önceki sürümleri çalıştıran cihazlarda, documentLaunchMode değerini açıkça "always" olarak ayarlamadığınız sürece bildirimler baloncuk olarak gösterilmez. Android 11'den itibaren, sistem tüm görüşmelerin documentLaunchMode değerini otomatik olarak "always" şeklinde ayarladığından bu değeri açıkça ayarlamanız gerekmez.

Bildirim balonu göndermek için aşağıdaki adımları uygulayın:

  1. Normalde yaptığınız gibi bir bildirim oluşturun.
  2. BubbleMetadata nesnesi oluşturmak için BubbleMetadata.Builder(PendingIntent, Icon) veya BubbleMetadata.Builder(String) yöntemini çağırın.
  3. Meta verileri bildirime eklemek için setBubbleMetadata() kullanın.
  4. Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsanız baloncuk meta verilerinin ya da bildirimin bir paylaşım kısayoluna referans verdiğinden emin olun.
  5. Uygulamanızı, baloncuk olarak görünen bildirimleri iptal etmeyecek şekilde değiştirin. Bir bildirimi iptal ettiğinizde baloncuk ekrandan kaldırılır. Bir baloncuk açıldığında, onunla ilişkili bildirim otomatik olarak gizlenir.

Bu adımlar aşağıdaki örnekte gösterilmiştir:

// Create a bubble intent.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent =
    PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* flags */)
val category = "com.example.category.IMG_SHARE_TARGET"

val chatPartner = Person.Builder()
    .setName("Chat partner")
    .setImportant(true)
    .build()

// Create a sharing shortcut.
val shortcutId = generateShortcutId()
val shortcut =
    ShortcutInfoCompat.Builder(context, shortcutId)
        .setCategories(setOf(category))
        .setIntent(Intent(Intent.ACTION_DEFAULT))
        .setLongLived(true)
        .setShortLabel("Chat partner name")
        .build()
// Publish the shortcut, otherwise the bubble metadata will not apply.
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

// Create a bubble metadata.
val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent,
    IconCompat.createWithResource(context, R.drawable.ic_logo))
    .setDesiredHeight(600)
    .build()

// Create a notification, referencing the sharing shortcut.
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.chat)
    .setBubbleMetadata(bubbleData)
    .setShortcutId(shortcutId)
    .addPerson(chatPartner)

Bir baloncuk gönderildiğinde uygulamanız ön plandaysa önem düzeyi yok sayılır ve kullanıcı uygulamanızdan gelen baloncukları veya bildirimleri engellemediği sürece baloncuğunuz her zaman gösterilir.

Genişletilmiş baloncuk oluşturma

Baloncuğunuzu otomatik olarak genişletilmiş durumda sunulacak şekilde yapılandırabilirsiniz. Bu özelliği yalnızca kullanıcı, yeni bir sohbet başlatmak için bir düğmeye dokunmak gibi baloncukla sonuçlanan bir işlem gerçekleştirdiğinde kullanmanızı öneririz. Bu durumda, baloncuk oluşturulduğunda gönderilen ilk bildirimi de gizlemek mantıklı olur.

Bu davranışları etkinleştiren işaretleri ayarlamak için kullanabileceğiniz yöntemler vardır: setAutoExpandBubble() ve setSuppressNotification().

Aşağıdaki örnekte, bir balonun otomatik olarak genişletilmiş durumda sunulacak şekilde nasıl yapılandırılacağı gösterilmektedir:

val bubbleMetadata = NotificationCompat.BubbleMetadata.Builder()
    .setDesiredHeight(600)
    .setIntent(bubbleIntent)
    .setAutoExpandBubble(true)
    .setSuppressNotification(true)
    .build()

Baloncuk içeriği yaşam döngüsü

Bir baloncuk genişletildiğinde içerik etkinliği normal işlem yaşam döngüsünden geçer. Bu da uygulamanın ön plan işlemi haline gelmesine neden olur (henüz değilse).

Baloncuk daraltıldığında veya kapatıldığında etkinlik yok edilir. Bu durum, uygulamanın ön planda çalışan başka bileşenleri olup olmadığına bağlı olarak işlemin önbelleğe alınmasına ve daha sonra sonlandırılmasına neden olabilir.

Baloncuklar ne zaman görünür?

Kullanıcının kesintiye uğramasını azaltmak için baloncuklar yalnızca belirli durumlarda görünür.

Bir uygulama Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsa görüşme şartlarını karşılamadığı sürece bildirimler baloncuk olarak görünmez. Bir uygulama Android 10 (API düzeyi 29) veya daha önceki bir sürümü hedefliyorsa bildirim yalnızca aşağıdaki koşullardan biri veya daha fazlası karşılandığında baloncuk olarak görünür:

Bu koşullardan hiçbiri karşılanmazsa baloncuk yerine bildirim gösterilir.

Baloncuklardan etkinlik başlatma

Bir baloncuk yeni bir etkinlik başlattığında yeni etkinlik aynı görev ve aynı baloncuklu pencerede ya da tam ekranda yeni bir görevde başlatılır ve etkinliği başlatan baloncuk daraltılır.

Baloncukla aynı görevde yeni bir etkinlik başlatmak için: 1. Intent'leri başlatırken etkinlik bağlamını kullanın, activity.startActivity(intent) ve 1. Intent'te FLAG_ACTIVITY_NEW_TASK işaretini ayarlamayın.

Aksi takdirde yeni etkinlik yeni bir görevde başlatılır ve baloncuk daraltılır.

Baloncuklar belirli bir görüşmeyi temsil eder. Bu nedenle, baloncuk içinde başlatılan etkinlikler söz konusu görüşmeyle ilgili olmalıdır. Ayrıca, baloncuk içinde bir etkinlik başlatmak baloncuğun görev yığınını artırır ve özellikle gezinme konusunda kullanıcı deneyimini karmaşıklaştırabilir.

En iyi uygulamalar

  • Bildirimleri yalnızca önemliyse baloncuk olarak gönderin. Örneğin, devam eden bir iletişimin parçasıysa veya kullanıcı içerik için açıkça baloncuk istiyorsa. Baloncuklar ekranda yer kaplar ve diğer uygulama içeriklerini kapatır.
  • Baloncuk bildiriminizin normal bir bildirim olarak da çalıştığından emin olun. Kullanıcı balonu devre dışı bıraktığında balon bildirimi normal bildirim olarak gösterilir.
  • BackHandler composable'ını kullanın ve enabled parametresini kullanıcı arayüzü durumunuza bağlayın. Böylece yalnızca gerektiğinde geri basma işlemlerini yakalar. İşleyiciniz kendini devre dışı bıraktığında baloncuk daralır.

Daraltılmış bir balona güncellenmiş bir mesaj geldiğinde balon, okunmamış bir mesaj olduğunu belirtmek için rozet simgesi gösterir. Kullanıcı, ilişkili uygulamada mesajı açtığında aşağıdaki adımları uygulayın:

Örnek uygulama

SociaLite örnek uygulaması, baloncukları kullanan bir konuşma uygulamasıdır. Bu uygulama, tanıtım amacıyla chatbot'ları kullanır. Gerçek dünyadaki uygulamalarda, insanların gönderdiği mesajlar için baloncuklar kullanın.