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

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

Şekil 1. Sohbet balonu.

Baloncuklar bildirim sisteminde yerleşik olarak bulunur. Bunlar, diğer uygulama içeriğinin üzerinde kayan ve kullanıcıyı nereye giderse gitsin takip eder. Kullanıcılar uygulama işlevselliğini ve bilgilerini görmek için balonları genişletebilir ve kullanmadıkları zaman daraltabilirler.

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

Baloncuklar, kapsam dışında kalma seçeneğidir. Bir uygulama ilk balonunu sunduğunda, izin iletişim kutusu iki seçenek sunar:

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

Balon API'si

Baloncuklar, bildirim API'sı aracılığıyla oluşturulduğundan, bildiriminizi normal bir şekilde gönderin. Bildiriminizin balon olarak görüntülenmesini istiyorsanız içine fazladan veri ekleyin.

Balonun genişletilmiş görünümü, seçtiğiniz bir etkinlikten oluşturulur. Etkinliği bir 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 biri yoksa bildirim olarak görüntülenir.

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

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

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

Balon 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() aracını kullanın.
  4. Android 11 veya sonraki bir sürümü hedefliyorsanız balon meta verilerinin ya da bildirimlerin bir paylaşım kısayolunu referans aldığından emin olun.

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

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önderilirken uygulamanız ön plandaysa, kullanıcı uygulamanızdan gelen baloncukları veya bildirimleri engellemediği sürece, önemi yok sayılır ve baloncuğunuz her zaman gösterilir.

Genişletilmiş balon oluşturma

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

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

Aşağıdaki örnekte, bir balonun otomatik olarak genişletilmiş durumda gösterilecek ş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();

İçeriğin yaşam döngüsünü baloncuk olarak göster

Bir balon genişletildiğinde, içerik etkinliği normal süreç yaşam döngüsünden geçer ve bu durumda, uygulama henüz değilse ön plan işlemi haline gelir.

Balon daraltıldığında veya kapatıldığında etkinlik silinir. Bu, uygulamanın çalışan başka ön plan bileşenleri olup olmamasına bağlı olarak sürecin ö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 kesintileri 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 balon olarak görünmez. Bir uygulama Android 10 veya önceki sürümleri hedefliyorsa, bildirim yalnızca aşağıdaki koşullardan biri veya daha fazlası karşılanırsa balon olarak görünür:

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

En iyi uygulamalar

  • Yalnızca önemli olduğunda (örneğin, devam eden bir iletişimin parçası olduğunda veya kullanıcı içerik için açıkça baloncuk istediğinde) bildirim baloncuğu olarak gönderin. Baloncuklar ekran alanını kullanır ve diğer uygulama içeriklerini kapsar.
  • Baloncuk bildiriminizin aynı zamanda normal bir bildirim olarak da çalıştığından emin olun. Kullanıcı balonu devre dışı bıraktığında normal bildirim olarak bir balon bildirimi gösterilir.
  • İşlevlerin olabildiğince spesifik ve hafif olmasını sağlayın. Bir balondan başlatılan işlemler (ör. etkinlikler ve iletişim kutuları), balon kapsayıcısının içinde görünür. Bu, bir balonda görev yığını olabileceği anlamına gelir. Balonunuzun içinde çok fazla işlev veya gezinme varsa işler karmaşıklaşabilir.
  • Balon etkinliğinde onBackPressed geçersiz kılınırken super.onBackPressed çağrısı yapın. Aksi takdirde baloncuğunuz düzgün çalışmayabilir.

Daraltılmış bir baloncuğa güncel bir mesaj geldiğinde, balonda okunmamış bir mesajı belirten rozet simgesi gösterilir. Kullanıcı, mesajı ilişkilendirilen uygulamada açtığında şu adımları uygulayın:

Örnek uygulama

Kişiler örnek uygulaması, baloncuklar kullanan basit bir sohbet uygulamasıdır. Bu uygulama, örnek verme amacıyla chatbot'lar kullanmaktadır. Gerçek dünyadaki uygulamalarda, balonlar botlar tarafından değil, yalnızca insanlar tarafından gönderilen mesajlar için kullanılmalıdır.