Balonlar, kullanıcıların görüşmeleri görmesini ve bunlara katılmasını kolaylaştırır.
Baloncuklar bildirim sisteminde yerleşik olarak bulunur. Bunlar, diğer uygulama içeriğinin üzerinde kayan ve kullanıcıyı gittikleri her yerde takip eder. Kullanıcılar, uygulama işlevselliğini ve bilgilerini görmek için baloncukları genişletebilir ve kullanmadıkları zaman daraltabilirler.
Cihaz kilitliyken veya her zaman açık ekran modu etkin olduğunda her zaman olduğu gibi baloncuklar görünür.
Baloncuklar, devre dışı bırakma özelliğidir. Bir uygulama ilk balonunu sunduğunda, izin iletişim kutusu iki seçenek sunar:
- Uygulamanızdaki 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
Baloncuklar, bildirim API'si aracılığıyla oluşturulduğundan, bildiriminizi normal bir şekilde gönderin. Bildiriminizin balon olarak görüntülenmesini istiyorsanız ekstra veri ekleyin.
Balonun genişletilmiş görünümü, seçtiğiniz bir etkinlikten oluşturulur. Etkinliği baloncuk 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 birine uymadığı takdirde bunun yerine bildirim olarak gösterilir.
Aşağıdaki kod, basit bir balonun nasıl uygulanacağını gösterir:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
Uygulamanız, farklı kişilerle yapılan birden fazla sohbet görüşmesi gibi aynı türde birden fazla baloncuk gösteriyorsa etkinliğin birden fazla örneği başlatabilmesi gerekir. Android 10 ve önceki sürümleri çalıştıran cihazlarda documentLaunchMode
özelliğini "always"
olarak açıkça ayarlamadığınız sürece bildirimler baloncuk olarak gösterilmez. Sistem, tüm ileti dizilerinin documentLaunchMode
değerini "always"
olarak ayarladığından Android 11'den itibaren bu değeri açıkça ayarlamanıza gerek yoktur.
Balon göndermek için şu adımları uygulayın:
- Normalde yaptığınız gibi bir bildirim oluşturun.
BubbleMetadata
nesnesi oluşturmak içinBubbleMetadata.Builder(PendingIntent, Icon)
veyaBubbleMetadata.Builder(String)
yöntemini çağırın.- Meta verileri bildirime eklemek için
setBubbleMetadata()
aracını kullanın. - Android 11 veya sonraki bir sürümü hedefliyorsanız balon meta verilerinin veya bildirimin bir paylaşım kısayoluna başvurduğundan 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 balon gönderildiğinde uygulamanız ön plandaysa kullanıcı, uygulamanızdan gelen baloncukları veya bildirimleri engellemediği sürece, önem göz ardı edilir ve baloncuğunuz her zaman gösterilir.
Genişletilmiş balon oluşturma
Balonunuzu otomatik olarak genişletilmiş durumda sunacak şekilde yapılandırabilirsiniz. Bu işlevi 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, balon oluşturulduğunda gönderilen ilk bildirimi gizlemek de 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 balonu otomatik olarak genişletilmiş durumda sunulacak şekilde nasıl yapılandıracağınız 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 ve uygulama henüz değilse ön plan sürecine dönüşür.
Balon daraltıldığında veya kapatıldığında etkinlik silinir. Bu, uygulamanın çalışan başka ön plan bileşenleri olup olmamasına bağlı olarak sürecin ö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 kesintileri azaltmak için baloncuklar yalnızca belirli durumlarda görünür.
Bir uygulama Android 11 veya sonraki bir sürümü hedefliyorsa görüşme şartları karşılamadığı sürece bildirim baloncuk olarak görünmez. Bir uygulama Android 10 veya altını hedefliyorsa yalnızca aşağıdaki koşullardan biri veya daha fazlası karşılandığında bildirim balon olarak görünür:
- Bildirim
MessagingStyle
kullanır vePerson
eklenmiştir. - Bildirim,
Service.startForeground
çağrısından geliyor,category
değeriCATEGORY_CALL
vePerson
eklenmiş. - Bildirim gönderilirken uygulama ön plandadır.
Bu koşullardan hiçbiri karşılanmazsa bildirim bir balon yerine gösterilir.
En iyi uygulamalar
- Yalnızca önemli olduğunda (örneğin, devam eden bir iletişimin parçası olduğunda veya kullanıcı açıkça içerik için baloncuk talep ettiğinde) baloncuk olarak bildirim gönderin. Baloncuklar ekran alanını kullanır ve diğer uygulama içeriklerini kapsar.
- 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 bildirimi gösterilir.
- İşlevlerin olabildiğince spesifik ve hafif olmasına dikkat edin. Balondan başlatılan işlemler (ör. etkinlikler ve iletişim kutuları) balon kapsayıcısının içinde görünür. Bu, bir baloncuğun bir 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
değerini geçersiz kılarkensuper.onBackPressed
öğesini çağırın. Aksi takdirde baloncuğunuz düzgün çalışmayabilir.
Daraltılmış bir baloncuk güncellenmiş bir mesaj aldığında, balonda okunmamış bir mesajı belirten bir rozet simgesi görünür. Kullanıcı mesajı ilişkili uygulamada açtığında şu adımları uygulayın:
- Bildirimi gizlemek için
BubbleMetadata
öğesini güncelleyin.BubbleMetadata.Builder.setSuppressNotification()
numaralı telefonu arayın. Bu işlem, rozet simgesini kaldırarak kullanıcının mesajla etkileşime girdiğini gösterir. BubbleMetadata
güncellemesine eşlik eden sesi veya titreşimi azaltmak içinNotification.Builder.setOnlyAlertOnce()
değerinitrue
olarak ayarlayın.
Örnek uygulama
Kişiler örnek uygulaması, baloncuklar kullanan basit bir sohbet uygulamasıdır. Bu uygulama, gösterim amacıyla chatbot'lar kullanmaktadır. Gerçek dünyadaki uygulamalarda, baloncuklar botlar tarafından değil, yalnızca insanlar tarafından gönderilen mesajlar için kullanılmalıdır.