Kullanıcıların görüşmelere katılmasına izin vermek için baloncukları kullanın

Baloncuklar, kullanıcıların görüşmeleri görmesini ve görüşmelere katılmasını kolaylaştırır.

Şekil 1. Sohbet balonu.

Balonlar, bildirim sistemine yerleştirilmiştir. Diğer uygulama içeriklerinin üzerinde yüzer ve kullanıcıyı gittiği her yerde takip eder. Kullanıcılar, uygulama içeriğini görmek ve onunla etkileşime geçmek için baloncukları genişletebilir, kullanmadıklarında ise daraltabilir.

Cihaz kilitliyken veya her zaman açık ekran etkinken bildirimler normal şekilde baloncuk şeklinde görünür.

Baloncuklar, devre dışı bırakılan bir özelliktir. Bir uygulama ilk balonunu gösterdiğinde izin iletişim kutusunda iki seçenek sunulur:

  • 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

Balonlar, bildirim API'si kullanılarak oluşturulur. Bu nedenle bildiriminizi normal. Bildiriminizin baloncuk olarak gösterilmesini 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 şekilde gösterilecek şekilde yapılandırın. Etkinlik, resizeable ve yerleştirilmiş. Herhangi bir yerine bildirim olarak görüntülenir.

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ızda aynı türde birden fazla baloncuk gösteriliyorsa (ör. birden fazla sohbet mesajı) farklı kişilerle sohbet ediyorsanız, etkinlik başlatılabilmelidir. sağlayabilir. Android 10 ve önceki sürümleri çalıştıran cihazlarda açıkça belirtmediğiniz sürece bildirimler baloncuk olarak gösterilmez documentLaunchMode - "always". 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ıza gerek yoktur.

Balon göndermek için aşağıdaki adımları uygulayın:

  1. Normalde yaptığınız gibi bir bildirim oluşturun.
  2. BubbleMetadata nesnesi oluşturmak için BubbleMetadata.Builder(PendingIntent, Icon) veya BubbleMetadata.Builder(String) işlevini çağırın.
  3. Meta verileri bildirime eklemek için setBubbleMetadata() simgesini kullanın.
  4. Android 11 veya sonraki bir sürümü hedefliyorsanız baloncuğun Meta veri veya bildirim bir paylaşım kısayoluna referans veriyor.
  5. Uygulamanızı, baloncuk olarak görünen bildirimleri iptal etmeyecek şekilde değiştirin. Bildirim etkinliğinin baloncuk olarak başlatılıp başlatılmadığını kontrol etmek için şu numarayı arayın: Activity#isLaunchedFromBubble(). Bir bildirimi iptal ettiğinizde baloncuk ekrandan kaldırılır. Bir balonu açtığınızda, balonla 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);

Bir baloncuk gönderildiğinde uygulamanız ön plandaysa önem düzeyi yoksayılır Kullanıcı baloncukları veya bildirimleri engellemediği sürece baloncuğunuz her zaman gösterilir. kaldırın.

Genişletilmiş baloncuk oluştur

Balonunuzu otomatik olarak genişletilmiş durumda sunacak şekilde yapılandırabilirsiniz. Biz bu özelliği yalnızca kullanıcının yalnızca yeni bir sohbet başlatmak için düğmeye dokunma gibi bir baloncuk belirir. Bu durumda, bir balon oluşturulduğunda gönderilen ilk bildirimi de engellemek 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 otomatik olarak genişletilmiş durumda gösterilmesi için 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();

Baloncuk içerik yaşam döngüsü

Bir balon genişletildiğinde içerik etkinliği normal işlem yaşam döngüsünü tamamlar. Bu da, henüz ön planda değilse uygulamanın ön plan işlemi haline gelmesine neden olur.

Balon daraltıldığında veya kapatıldığında etkinlik yok edilir. Bu, uygulamanın çalışan başka ön plan bileşenlerine sahip 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ının kesintilerini azaltmak için baloncuklar yalnızca belirli koşullar.

Bir uygulama Android 11 veya sonraki sürümleri hedefliyorsa ileti dizisi şartlarını karşılamadığı sürece bildirim baloncuk olarak görünmez. Bir uygulama Android 10 veya daha eski sürümleri hedefliyorsa bildirim yalnızca aşağıdaki koşullardan biri veya daha fazlası karşılanırsa baloncuk olarak görünür:

Bu koşulların hiçbiri karşılanmazsa baloncuk yerine bildirim gösterilir.

Balonlardan etkinlik başlatma

Bir balon yeni bir etkinlik başlattığında yeni etkinlik, aynı görev ve aynı balonlu pencerede ya da yeni bir görevde tam ekran olarak açılır ve başlatan balonu daraltır.

Balonla aynı görevde yeni bir etkinlik başlatmak için: 1. Intent'leri 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 küçültülür.

Balonların 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 özellikle gezinme konusunda kullanıcı deneyimini karmaşık hale getirebilir.

En iyi uygulamalar

  • Bildirim baloncuğu olarak yalnızca önemli durumlarda (ör. sürekli bir iletişim parçası olarak veya kullanıcı açıkça içerik. Balonlar 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 balon bildirimi normal bildirim olarak gösterilir.
  • Geçersiz kılma işlemi sırasında super.onBackPressed öğesini ara Balonda onBackPressed etkinliği'ne dokunun. Aksi takdirde, balonunuz düzgün çalışmayabilir.

Daraltılmış bir baloncuk güncellenmiş bir mesaj aldığında balonda bir rozet gösterilir simgesini tıklayın. Kullanıcı mesajı aşağıdaki adımları uygulayın:

Örnek uygulama

İlgili içeriği oluşturmak için kullanılan Kişiler örnek uygulama, baloncuk kullanan bir sohbet uygulamasıdır. Bu demoda, bu uygulama chatbot kullanıyor. Gerçek dünyadaki uygulamalarda, Google'dan gelen mesajlar için baloncukları birlikte çalışır.