Baloncuklar, kullanıcıların görüşmeleri görmesini ve görüşmelere katılmasını kolaylaştırır.
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:
- Normalde yaptığınız gibi bir bildirim oluşturun.
BubbleMetadata
nesnesi oluşturmak içinBubbleMetadata.Builder(PendingIntent, Icon)
veyaBubbleMetadata.Builder(String)
çağrılarını yapın.- Bildirime meta veri eklemek için
setBubbleMetadata()
değerini 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.
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:
- Bildirim
MessagingStyle
kullanıyor ve birPerson
eklenmiş. - Bildirim
Service.startForeground
çağrısına gönderildi,category
CATEGORY_CALL
vePerson
eklendi. - Bildirim gönderildiğinde uygulama ön plandadı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ılarkensuper.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:
- Bildirimi engellemek için
BubbleMetadata
öğesini 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üncellemesine eşlik eden sesi veya titreşimi engellemek içinNotification.Builder.setOnlyAlertOnce()
değerinitrue
olarak ayarlayı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.