Kullanıcıların görüşmelere katılmasına izin vermek için baloncukları kullanın

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

Şekil 1. Sohbet balonu.

Baloncuklar, bildirim sisteminde yerleşik olarak bulunur. Bunlar, diğer uygulama içeriklerinin üzerine kayarak kullanıcıyı nereye giderlerse takip ederler. Kullanıcılar balonları genişleterek uygulama içeriğini gösterip onunla etkileşimde bulunabilir ve kullanmadıkları zaman daraltabilirler.

Cihaz kilitliyken veya her zaman açık ekran özelliği etkin olduğunda, bildirimlerde olduğu gibi baloncuklar görünür.

Baloncuklar, devre dışı bırakılan bir özelliktir. Bir uygulama ilk balonunu gösterdiğinde izin iletişim kutusu iki seçenek sunar:

  • Uygulamanızdan gelen tüm baloncukları engelleyin. Bildirimler engellenmez ancak hiçbir zaman baloncuk olarak görünmez.
  • Uygulamanızdan gelen tüm baloncuklara izin verin. BubbleMetaData ile gönderilen tüm bildirimler baloncuk olarak görünür.

Balon API'si

Balonlar, bildirim API'si kullanılarak oluşturulur. Bu nedenle bildiriminizi normal şekilde gönderin. Bildiriminizin baloncuk olarak görünmesini istiyorsanız ekstra veri ekleyin.

Bir balonun genişletilmiş görünümü, seçtiğiniz bir etkinlikten oluşturulur. Etkinliği balon olarak düzgün bir şekilde görüntülenecek şekilde yapılandırın. Etkinlik yeniden boyutlandırılabilir ve yerleştirilmiş olmalıdır. Bu gereksinimlerden herhangi biri karşılanmadığında, bunun yerine bildirim olarak gösterilir.

Aşağıdaki kod, bir balonun nasıl uygulanacağını göstermektedir:

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

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

Baloncuk göndermek için aşağıdaki adımları izleyin:

  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) çağrılarını yapın.
  3. Bildirime meta veri eklemek için setBubbleMetadata() değerini kullanın.
  4. Android 11 veya sonraki bir sürümü hedefliyorsanız baloncuk meta verilerinin veya bildirimin bir paylaşım kısayoluna referans verdiğinden emin olun.

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

Kotlin

// Create a bubble intent.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* 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 =
   ShortcutInfo.Builder(mContext, shortcutId)
       .setCategories(setOf(category))
       .setIntent(Intent(Intent.ACTION_DEFAULT))
       .setLongLived(true)
       .setShortLabel(chatPartner.name)
       .build()

// Create a bubble metadata.
val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent,
            Icon.createWithResource(context, R.drawable.icon))
    .setDesiredHeight(600)
    .build()

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

Java

// Create a bubble intent.
Intent target = new Intent(mContext, BubbleActivity.class);
PendingIntent bubbleIntent =
    PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);

private val CATEGORY_TEXT_SHARE_TARGET =
    "com.example.category.IMG_SHARE_TARGET"

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

// Create a sharing shortcut.
private String shortcutId = generateShortcutId();
ShortcutInfo shortcut =
   new ShortcutInfo.Builder(mContext, shortcutId)
       .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET))
       .setIntent(Intent(Intent.ACTION_DEFAULT))
       .setLongLived(true)
       .setShortLabel(chatPartner.getName())
       .build();

// Create a bubble metadata.
Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder(bubbleIntent,
            Icon.createWithResource(context, R.drawable.icon))
        .setDesiredHeight(600)
        .build();

// Create a notification, referencing the sharing shortcut.
Notification.Builder builder =
    new Notification.Builder(mContext, CHANNEL_ID)
        .setContentIntent(contentIntent)
        .setSmallIcon(smallIcon)
        .setBubbleMetadata(bubbleData)
        .setShortcutId(shortcutId)
        .addPerson(chatPartner);

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

Genişletilmiş baloncuk oluşturma

Balonunuzu, otomatik olarak genişletilmiş durumda gösterecek şekilde yapılandırabilirsiniz. Bu özelliğin yalnızca kullanıcı, yeni bir sohbet başlatmak için bir düğmeye dokunmak gibi baloncukla sonuçlanan bir işlem yaptığında kullanmanızı öneririz. Bu durumda, bir balon oluşturulduğunda gönderilen ilk bildirimi gizlemek de anlamlı 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 sunum yapacak şekilde nasıl yapılandırılacağı gösterilmektedir:

Kotlin

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

Java

Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder()
        .setDesiredHeight(600)
        .setIntent(bubbleIntent)
        .setAutoExpandBubble(true)
        .setSuppressNotification(true)
        .build();

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

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

Balon daraltıldığında veya kapatıldığında etkinlik kaldırılır. Bu, uygulamanın çalışan başka ön plan bileşenlerinin olup olmadığına bağlı olarak, işlemin önbelleğe alınmasına ve daha sonra sonlandırılmasına neden olabilir.

Baloncuklar göründüğünde

Kullanıcıların kesintilerini azaltmak için baloncuklar yalnızca belirli durumlarda görünür.

Android 11 veya sonraki sürümleri hedefleyen uygulamalar, görüşme gereksinimlerini karşılamadığı sürece baloncuk olarak görünmez. Bir uygulama Android 10 veya önceki sürümleri hedefliyorsa yalnızca aşağıdaki koşullardan en az biri karşılanırsa bildirim baloncuk olarak görünür:

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

Baloncuklardan etkinlik başlatma

Bir baloncuk yeni bir etkinlik başlattığında, yeni etkinlik aynı görev içinde ve aynı baloncuk pencerede veya yeni bir görevde, onu başlatan balon daraltılarak tam ekranda başlatılır.

Balonla aynı görevde yeni bir etkinlik başlatmak için: 1. Amaçları başlatırken etkinlik bağlamını kullanın, activity.startActivity(intent) ve 1. Niyette FLAG_ACTIVITY_NEW_TASK işaretini ayarlamayın.

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

Balonun belirli bir görüşmeyi temsil ettiğini, bu nedenle balon içinde başlatılan etkinliklerin bu görüşmeyle ilgili olması gerektiğini unutmayın. Buna ek olarak, baloncuk içinde bir etkinlik başlatmak, balonun görev yığınını artırır ve özellikle gezinme konusunda kullanıcı deneyimini karmaşık hale getirebilir.

En iyi uygulamalar

  • Bildirimi yalnızca önemli durumlarda (ör. devam eden bir iletişimin parçası olduğunda veya kullanıcı açıkça içerik için baloncuk istediğinde) balon olarak gönderin. Baloncuklar, ekran alanını kullanır ve diğer uygulama içeriklerini kapatır.
  • Balon bildiriminizin normal bir bildirim olarak da çalıştığından emin olun. Kullanıcı balonu devre dışı bıraktığında normal bildirim olarak bir balon bildirim gösterilir.
  • Balon etkinliğinde onBackPressed seçeneğini geçersiz kılarken super.onBackPressed yöntemini çağırın. Aksi takdirde, baloncuğunuz doğru şekilde çalışmayabilir.

Daraltılmış balon güncellenmiş bir mesaj aldığında, okunmayan mesajı belirten bir rozet simgesi gösterilir. Kullanıcı, mesajı ilişkilendirilmiş uygulamada açtığında şu adımları uygulayın:

Örnek uygulama

Kişiler örnek uygulaması, baloncukların kullanıldığı bir sohbet uygulamasıdır. Gösterirken bu uygulama Chatbot'ları kullanıyor. Gerçek dünyadaki uygulamalarda, insanlardan gelen mesajlar için baloncukları kullanın.