Bildirim balonları, kullanıcıların görüşmeleri görmesini ve görüşmelere katılmasını kolaylaştırır.
Diğer uygulama içeriklerinin üzerinde yüzerler. Kullanıcılar, uygulama içeriğini görmek ve bu içerikle etkileşimde bulunmak 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.
Bildirim balonları kullanıcı tarafından etkinleştirilmiş olmalıdır. Bunu, balonları destekleyen bildirimlerdeki balon düğmesine dokunarak yapabilirler. Bu sayede söz konusu sohbet her zaman balon olarak gösterilir. Kullanıcılar, ayarlarda hangi sohbetlerin balon olarak gösterileceğini ayarlayabilir veya uygulamanın genel ayarlarını değiştirebilir.
Kullanıcılar şunları yapabilir:
- Uygulamanızdan gelen tüm bildirim baloncuklarını engeller. Bildirimler engellenmez ancak hiçbir zaman baloncuk olarak görünmez.
- Uygulamanızdan gelen belirli bildirim balonlarına izin verin. Balon düğmesi kullanılarak balon şeklinde gösterilen bildirimler "seçilmiş"tir.
- Uygulamanızdan gelen tüm bildirim baloncuklarına izin verin.
BubbleMetadataile gönderilen tüm bildirimler baloncuk olarak görünür.
The Notification Bubble API
Bildirim balonları, bildirim API'si kullanılarak oluşturulur. Bildiriminizin balon olarak görünmesini istiyorsanız bildirime ek veriler ekleyin.
Seçtiğiniz bir etkinlikten balonun genişletilmiş görünümü 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 biri karşılanmıyorsa sistem, mesajı bildirim olarak gösterir.
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 değerini 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.
Bildirim balonu göndermek için aşağıdaki adımları uygulayın:
- Normalde yaptığınız gibi bir bildirim oluşturun.
BubbleMetadatanesnesi 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'i (API düzeyi 30) veya sonraki sürümleri hedefliyorsanız balon meta verilerinin ya da bildirimlerin bir paylaşım kısayoluna referans verdiğinden emin olun.
- Uygulamanızı, baloncuk olarak görünen bildirimleri iptal etmeyecek şekilde değiştirin. 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:
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* 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 = ShortcutInfoCompat.Builder(context, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel("Chat partner name") .build() // Publish the shortcut, otherwise the bubble metadata will not apply. ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) // Create a bubble metadata. val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent, IconCompat.createWithResource(context, R.drawable.ic_logo)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.chat) .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ş baloncuk oluşturma
Sohbet balonunuzu, otomatik olarak genişletilmiş durumda gösterecek şekilde yapılandırabilirsiniz. Bu özelliği yalnızca kullanıcının yeni bir sohbet başlatmak için düğmeye dokunmak gibi bir balona neden olan bir işlem yapması durumunda 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:
val bubbleMetadata = NotificationCompat.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 işlem yaşam döngüsünden geçer. Bu da uygulama önceden ön plan işlemi değilse ön plan işlemi haline gelmesine neden olur.
Balon daraltıldığında veya kapatıldığında etkinlik yok edilir. 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'i (API düzeyi 30) veya sonraki sürümleri hedefleyen uygulamalarda, sohbet şartlarını karşılamayan bildirimler balon olarak gösterilmez. Android 10'u (API düzeyi 29) veya daha eski bir sürümü hedefleyen uygulamalarda bildirim yalnızca aşağıdaki koşullardan biri veya daha fazlası karşılandığında balon olarak görünür:
- Bildirimde
MessagingStylekullanılıyor vePersoneklenmiş. - Bildirim,
Service.startForegroundnumarasına yapılan bir aramadan geliyor,CATEGORY_CALLcategoryvePersoneklenmiş. - 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 ya da tam ekran olarak yeni bir görevde başlatılır ve 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 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 kullanıcı deneyimini (özellikle gezinme konusunda) zorlaştırabilir.
En iyi uygulamalar
- Yalnızca önemliyse (ö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.
BackHandlercomposable'ını kullanın veenabledparametresini kullanıcı arayüzü durumunuza bağlayın. Böylece, geri tuşuna basma işlemleri yalnızca gerektiğinde engellenir. İşleyici kendini devre dışı bıraktığında, baloncuk çöker.
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 bastırmak için
BubbleMetadataöğesini güncelleyin.BubbleMetadata.Builder.setSuppressNotification()işlevini çağırın. Bu işlem, kullanıcının mesajla etkileşimde bulunduğunu gösteren rozet simgesini kaldırır. Notification.Builder.setOnlyAlertOnce()'ıBubbleMetadatagüncellemesiyle birlikte gelen sesi veya titreşimi bastırmak içintrueolarak ayarlayın.
Örnek uygulama
SociaLite örnek uygulaması, baloncukları kullanan bir sohbet uygulamasıdır. Bu uygulama, gösterim amacıyla chatbot'ları kullanır. Gerçek dünya uygulamalarında, insan mesajları için baloncukları kullanın.