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şlevselliğini ve bilgilerini gösterebilir 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 aracılığıyla oluşturulduğundan 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, basit 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 işlevin 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, 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.

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.
  • İş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ı içinde görünür. Bu, bir baloncuğun görev yığını olabileceği anlamına gelir. Balonunuzda çok fazla işlev veya gezinme varsa işler karmaşık hale gelebilir.
  • 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ığı basit bir sohbet uygulamasıdır. Gösterim amacıyla bu uygulamada Chatbot'lar kullanılmaktadır. Gerçek dünyadaki uygulamalarda baloncuklar botlar tarafından değil, yalnızca insanlar tarafından mesajlar için kullanılmalıdır.