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 kayan balonlar, kullanıcılar tarafından genişletilerek uygulama içeriğinin gösterilmesi ve bu içerikle etkileşimde bulunulması için kullanılabilir. Kullanıcılar, balonları kullanmadıkları zaman 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 şeklinde 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 haline getirilen bildirimler "seçilmiş" olur.
- Uygulamanızdan gelen tüm bildirim baloncuklarına izin verin.
BubbleMetadataile gönderilen tüm bildirimler baloncuk olarak görünür.
Bildirim Balonu API'si
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 birini karşılamıyorsa sistem, bunu 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) etkinlik birden fazla örnek başlatabilmelidir. 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.
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 kabarcık meta verilerinin ya da 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. Bir bildirimi iptal ettiğinizde balon ekranınızdan kaldırılır. Bir balonu açtığınızda, 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ı, yeni bir sohbet başlatmak için düğmeye dokunmak gibi bir işlem yaptığında kullanmanızı öneririz. Bu durumda, balon oluşturulduğunda gönderilen ilk bildirimi de devre dışı bırakmak mantıklı 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 genişletilmiş durumda otomatik olarak gösterilecek şekilde nasıl yapılandırılacağı açıklanmaktadır:
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.
Mesaj balonları ne zaman gösterilir?
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 veya tam ekran olarak yeni bir görevde 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.
Bir 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 etkinliğin başlatılması baloncuk görev yığınını artırır ve kullanıcı deneyimini, özellikle gezinme konusunda zorlaştırabilir.
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 bildirimi istiyorsa) 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, yalnızca gerektiğinde geri tuşuna basma işlemlerini yakalar. İş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 kapatmak için
BubbleMetadatauygulaması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. Notification.Builder.setOnlyAlertOnce()'ıBubbleMetadatagüncellemesiyle birlikte gelen sesi veya titreşimi bastırmak içintrueolarak ayarlayın.
Örnek uygulama
SociaLite örnek uygulaması, balonları kullanan bir sohbet uygulamasıdır. Bu uygulama, gösterim amacıyla chatbot'ları kullanır. Gerçek dünya uygulamalarında, insanlardan gelen mesajlar için baloncukları kullanın.