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şlevselliğini ve bilgilerini gösterebilir 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 aracılığıyla oluşturulduğundan 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, basit 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 işlevin yalnızca kullanıcı, yeni bir sohbet başlatmak için bir düğmeye dokunmak gibi baloncukla sonuçlanan bir işlem gerçekleştirdiğinde 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.
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.
- İşlevlerin olabildiğince spesifik ve hafif olmasını sağlayın. Bir balondan başlatılan işlemler (ör. etkinlikler ve iletişim kutuları) balon kapsayıcı içinde görünür. Bu, bir baloncuğun görev yığını olabileceği anlamına gelir. Balonunuzda çok fazla işlev veya gezinme varsa işler karmaşık hale gelebilir.
- 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ığı basit bir sohbet uygulamasıdır. Gösterim amacıyla bu uygulamada Chatbot'lar kullanılmaktadır. Gerçek dünyadaki uygulamalarda baloncuklar botlar tarafından değil, yalnızca insanlar tarafından mesajlar için kullanılmalıdır.