Baloncuklar, kullanıcıların sohbetleri görmesini ve sohbetlere katılmasını kolaylaştırır.
Baloncuklar, bildirim sisteminde yerleşik olarak bulunur. Diğer uygulama içeriklerinin üzerinde yüzer ve kullanıcıyı gittiği her yerde takip eder. Kullanıcılar, uygulama içeriğini görmek ve onunla etkileşime geçmek için baloncukları genişletebilir, kullanmadıklarında ise daraltabilir.
Cihaz kilitliyken veya her zaman açık ekran etkinken bildirimler normal şekilde baloncuk şeklinde görünür.
Balonlar, devre dışı bırakılabilen bir özelliktir. Bir uygulama ilk balonunu gösterdiğinde izin iletişim kutusunda iki seçenek sunulur:
- 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.
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ştirilebilir olmalıdır. Bu koşullardan herhangi birine uymuyorsa bildirim olarak gösterilir.
Aşağıdaki kodda, balonun 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 balon (ör. farklı kişilerle birden fazla sohbet görüşmesi) gösteriyorsa etkinlik birden fazla örnek başlatabilmelidir. 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. Android 11'den itibaren sistem tüm görüşmelerin documentLaunchMode
değerini otomatik olarak "always"
olarak ayarladığından bu değeri açıkça ayarlamanıza gerek yoktur.
Balon göndermek için aşağıdaki adımları uygulayın:
- Normalde yaptığınız gibi bir bildirim oluşturun.
BubbleMetadata
nesnesi oluşturmak içinBubbleMetadata.Builder(PendingIntent, Icon)
veyaBubbleMetadata.Builder(String)
işlevini çağırın.- Meta verileri bildirime eklemek için
setBubbleMetadata()
simgesini kullanın. - 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.
- Uygulamanızı, baloncuk olarak görünen bildirimleri iptal etmeyecek şekilde değiştirin.
Bildirim etkinliğinin baloncuk olarak başlatılıp başlatılmadığını kontrol etmek için
Activity#isLaunchedFromBubble()
numaralı telefonu arayın. Bir bildirimi iptal ettiğinizde baloncuk ekrandan kaldırılır. Bir balonu açtığınızda, balonla ilişkili bildirim otomatik olarak gizlenir.
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ş balon oluşturma
Balonunuzu otomatik olarak genişletilmiş durumda sunacak şekilde yapılandırabilirsiniz. Bu özelliği yalnızca kullanıcı bir balonla sonuçlanan bir işlem yaptığında (ör. yeni bir sohbet başlatmak için bir düğmeye dokunma) 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 gösterilmesi için 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();
Baloncuk içerik yaşam döngüsü
Bir balon genişletildiğinde içerik etkinliği normal işlem yaşam döngüsünü tamamlar. Bu da, henüz ön planda değilse uygulamanın ön plan işlemi haline gelmesine neden olur.
Balon daraltıldığında veya kapatıldığında etkinlik yok edilir. Bu durum, uygulamanın çalışan başka ön plan bileşenlerine sahip 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ıların kesintilerini azaltmak için baloncuklar yalnızca belirli durumlarda görünür.
Bir uygulama Android 11 veya sonraki sürümleri hedefliyorsa ileti dizisi şartlarını karşılamadığı sürece bildirim baloncuk olarak görünmez. Bir uygulama Android 10 veya daha eski bir sürümü hedefliyorsa bildirim yalnızca aşağıdaki koşullardan biri veya daha fazlası karşılanırsa baloncuk olarak görünür:
- Bildirimde
MessagingStyle
kullanılıyor vePerson
eklenmiş. - Bildirim,
Service.startForeground
numaralı telefondan gelen bir aramayla ilgilidir.CATEGORY_CALL
değerine sahipcategory
vePerson
eklenmiştir. - Bildirim gönderildiğinde uygulama ön plandadır.
Bu koşulların hiçbiri karşılanmazsa baloncuk yerine bildirim gösterilir.
Baloncuklardan etkinlik başlatma
Bir balon yeni bir etkinlik başlattığında yeni etkinlik, aynı görev ve aynı balonlu pencerede ya da yeni bir görevde tam ekran olarak açılır ve başlatan balonu daraltır.
Balonla 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 balon küçültülür.
Balonların belirli bir sohbeti temsil ettiğini unutmayın. Bu nedenle, balon içinde başlatılan etkinlikler bu sohbetle ilgili olmalıdır. Ayrıca, balon 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 olduğunda (ör. devam eden bir iletişimin parçası olduğunda veya kullanıcı içerik için açıkça balon isteğinde bulunduğunda) balon olarak gönderin. Balonlar 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ılarkensuper.onBackPressed
yöntemini çağırın. Aksi takdirde, baloncuğunuz doğru şekilde çalışmayabilir.
Daraltılmış bir balona güncellenmiş bir mesaj geldiğinde, balonda okunmamış mesajı belirten bir rozet simgesi gösterilir. Kullanıcı mesajı ilişkili uygulamada açtığında aşağıdaki adımları uygulayın:
- Bildirimi engellemek için
BubbleMetadata
'yi güncelleyin.BubbleMetadata.Builder.setSuppressNotification()
numaralı telefonu arayın. Bu işlem, kullanıcının iletiyle etkileşimde bulunduğunu belirtmek için rozet simgesini kaldırır. BubbleMetadata
güncellemesini takip eden sesi veya titreşimi engellemek içinNotification.Builder.setOnlyAlertOnce()
'itrue
olarak ayarlayın.
Örnek uygulama
Kişiler örnek uygulaması, baloncukların kullanıldığı bir sohbet uygulamasıdır. Bu uygulamada, gösterim amacıyla chatbot'lar kullanılmaktadır. Gerçek hayattaki uygulamalarda, gerçek kişiler tarafından gönderilen mesajlar için baloncukları kullanın.