Baloncuklar, kullanıcıların görüşmeleri görmesini ve görüşmelere katılmasını kolaylaştırır.
Balonlar, bildirim sistemine yerleştirilmiştir. Diğer uygulama içeriklerinin üzerinde yüzer ve kullanıcıyı her yere takip eder. Kullanıcılar, uygulama içeriğini görüntülemek ve bu içerikle etkileşim kurmak için baloncukları genişletebilir, kullanmadıklarında ise daraltabilir.
Cihaz kilitliyken veya her zaman açık ekran etkin durumdayken mesaj balonları normal bildirimler gibi görünür.
Baloncuklar, devre dışı bırakılabilen bir özelliktir. Bir uygulama ilk mesaj balonunu gösterdiğinde izin iletişim kutusunda iki seçenek sunulur:
- Uygulamanızdaki tüm baloncukları engelleme. Bildirimler engellenmez ancak hiçbir zaman baloncuk olarak görünmez.
- Uygulamanızdaki tüm baloncuklara izin verin.
BubbleMetaData
ile gönderilen tüm bildirimler baloncuk olarak görünür.
Bubble API
Bildirim API'si kullanılarak oluşturulan balonlar için bildiriminizi normal şekilde gönderin. Bildiriminizin balon olarak gösterilmesini istiyorsanız bildirime ek veriler ekleyin.
Bir balonun genişletilmiş görünümü, seçtiğiniz bir etkinlikten oluşturulur. Etkinliği, balon olarak düzgün şekilde görünecek şekilde yapılandırın. Etkinlik yeniden boyutlandırılabilir ve yerleştirilmiş olmalıdır. Bu koşullardan birini karşılamıyorsa 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ürde birden fazla balon gösteriyorsa (ör. farklı kişilerle birden fazla sohbet görüşmesi), etkinliğin birden fazla örnek başlatabilmesi gerekir. Android 10 ve önceki sürümlerin yüklü olduğu cihazlarda, documentLaunchMode
ayarını açıkça "always"
olarak ayarlamadığınız sürece bildirimler balon 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ız gerekmez.
Mesaj balonu göndermek için aşağıdaki adımları uygulayın:
- Normalde yaptığınız gibi bir bildirim oluşturun.
BubbleMetadata.Builder(PendingIntent, Icon)
veyaBubbleMetadata.Builder(String)
çağrısı yaparakBubbleMetadata
nesnesi oluşturun.- Meta verileri bildirime eklemek için
setBubbleMetadata()
kullanın. - Android 11 veya sonraki sürümler hedefleniyorsa balon meta verilerinin ya da bildirim referanslarının paylaşım kısayolunu içerdiğinden emin olun.
- Uygulamanızı, baloncuk olarak gösterilen bildirimleri iptal etmeyecek şekilde değiştirin.
Bildirim etkinliğinin kabarcık olarak başlatılıp başlatılmadığını kontrol etmek için
Activity#isLaunchedFromBubble()
işlevini çağırın. Bir bildirimi iptal ettiğinizde balon ekranınızdan kaldırılır. Bir balon açıldığında, onunla 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);
Baloncuk gönderildiğinde uygulamanız ön plandaysa önem düzeyi yoksayılır ve kullanıcı, uygulamanızdan gelen baloncukları veya bildirimleri engellemediği sürece baloncuk her zaman gösterilir.
Genişletilmiş balon oluşturma
Sohbet balonunuzu, otomatik olarak genişletilmiş durumda gösterecek şekilde yapılandırabilirsiniz. Bu özelliği yalnızca kullanıcı, yeni bir sohbet başlatmak için düğmeye dokunmak gibi bir balona neden olan bir işlem yaparsa kullanmanızı öneririz. Bu durumda, balon oluşturulduğunda gönderilen ilk bildirimi de devre dışı bırakmak mantıklıdır.
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ö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();
Bubble içerik 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 uygulama önceden ön plan işlemi değilse ön plan işlemi haline gelir.
Balon daraltıldığında veya kapatıldığında etkinlik silinir. Bu durum, uygulamanın başka ön plan bileşenleri çalıştırıp çalıştırmadığı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ının kesintiye uğramasını en aza indirmek için sohbet balonları yalnızca belirli durumlarda görünür.
Android 11 veya sonraki sürümleri hedefleyen uygulamalarda, sohbet şartlarını karşılamayan bildirimler balon olarak gösterilmez. Android 10 veya daha eski bir sürümü hedefleyen uygulamalarda bildirimler yalnızca aşağıdaki koşullardan biri ya da daha fazlası karşılandığında balon olarak gösterilir:
- Bildirimde
MessagingStyle
kullanılıyor vePerson
eklenmiş. - Bildirim,
Service.startForeground
numarasına yapılan bir aramadan geliyor,category
CATEGORY_CALL
vePerson
eklenmiş. - Bildirim gönderildiğinde uygulama ön plandadır.
Bu koşullardan hiçbiri karşılanmazsa bildirim, balon yerine gösterilir.
Balonlardan etkinlik başlatma
Bir balon yeni bir etkinlik başlattığında bu etkinlik aynı görevde ve aynı balonlu pencerede başlatılır veya yeni bir görevde tam ekran olarak başlatılır ve kendisini başlatan balon daraltı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 unutmayın. Bu nedenle, balon içinde başlatılan etkinlikler söz konusu görüşmeyle ilgili olmalıdır. Ayrıca, baloncuk içinde bir etkinlik başlatmak baloncuk görev yığınını artırır ve kullanıcı deneyimini, özellikle gezinme konusunda karmaşık hale getirebilir.
En iyi uygulamalar
- Yalnızca önemli durumlarda (ör. devam eden bir iletişimin parçasıysa veya kullanıcı içerik için açıkça balon isteğinde bulunursa) bildirimi balon olarak gönderin. Balonlar ekran alanını kullanır ve diğer uygulama içeriklerini kapatır.
- Balon bildiriminizin normal bildirim olarak da çalıştığından emin olun. Kullanıcı balonu devre dışı bıraktığında balon bildirimi normal bildirim olarak gösterilir.
- Balon etkinliğinde
onBackPressed
geçersiz kılınırkensuper.onBackPressed
işlevini çağırın. Aksi takdirde, sohbet balonunuz düzgün çalışmayabilir.
Daraltılmış bir baloncuk güncellenmiş bir mesaj aldığında, okunmamış mesaj olduğunu belirtmek için baloncukta bir rozet simgesi gösterilir. Kullanıcı mesajı ilişkili uygulamada açtığında şu adımları uygulayın:
- Bildirimi kapatmak için
BubbleMetadata
uygulamasını güncelleyin.BubbleMetadata.Builder.setSuppressNotification()
numaralı telefonu arayın. Bu işlem, kullanıcının iletiyle etkileşimde bulunduğunu gösteren rozet simgesini kaldırır. BubbleMetadata
güncellemesine eşlik eden sesi veya titreşimi bastırmak içinNotification.Builder.setOnlyAlertOnce()
'ıtrue
olarak ayarlayın.
Örnek uygulama
SociaLite örnek uygulaması, balonları kullanan bir sohbet uygulamasıdır. Bu uygulama, gösterim amacıyla sohbet botlarını kullanır. Gerçek hayattaki uygulamalarda, insan mesajları için mesaj balonlarını kullanın.