Ana içeriğe atla
OneSignal’ın Android Canlı Bildirimleri, tek bir bildirime gerçek zamanlı güncellemeler göndermenizi sağlayarak karmaşayı azaltır ve etkileşimi artırır. Bu bildirimler kalıcı kalır ve içeriklerini dinamik olarak günceller—spor skorları, indirme ilerlemesi veya etkinlik takibi için idealdir. Canlı Bildirimler almak için Android kullanıcılarının push bildirimlerini etkinleştirmiş olması gerekir.

Gereksinimler

  • Uygulamanız OneSignal SDK’nın en son sürümünü kullanmalıdır.
  • Android kullanıcılarının push bildirim izinlerini etkinleştirmiş olması gerekir.

Canlı bildirimler ve standart push karşılaştırması

Her seferinde yeni bir bildirim gönderen normal push bildirimlerinin aksine, Canlı Bildirimler zaman içinde güncellenen tek bir bildirim kullanır. Güncellemeler, aynı collapse_id kullanılarak Create Message API aracılığıyla gönderilir.

Yapılandırma

1. Bildirim Hizmeti Uzantısı uygulayın

INotificationServiceExtension arayüzünü uygulayan bir NotificationServiceExtension sınıfı oluşturun. Bu sınıf, gelen bildirimleri yakalar ve bunları değiştirebilir veya geçersiz kılabilir.
Daha fazla ayrıntı için Android Bildirim Hizmeti Uzantısı bölümüne bakın.
NotificationServiceExtention.kt
package com.onesignal.sample.android

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import com.onesignal.notifications.INotificationReceivedEvent
import com.onesignal.notifications.INotificationServiceExtension
import org.json.JSONObject
import java.util.logging.Logger

class NotificationServiceExtension : INotificationServiceExtension {
  override fun onNotificationReceived(event: INotificationReceivedEvent) {
        val context = event.context
        val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager
            ?: run {
                logger.warning("NotificationManager not available.")
                return
            }

        notificationManager.let {
            if (!notificationChannelsCreated) {
                createNotificationChannels(notificationManager)
            }
        }

        // Use `additional_data`to submit the Live Notification payload.
    		val additionalData = event.notification.additionalData
        val liveNotificationPayload = additionalData?.optJSONObject("live_notification")
        if (liveNotificationPayload == null) {
            logger.info("No live notification payload found. Showing original notification.")
            return
        }

        event.preventDefault()
        handleLiveNotification(event, liveNotificationPayload, notificationManager, context)
    }
}

2. Uzantıyı Android Manifest’e ekleyin

  <meta-data android:name="com.onesignal.NotificationServiceExtension"
              android:value="com.onesignal.sample.android.NotificationServiceExtension" />

3. Canlı Bildirim türleri oluşturun

Canlı Bildirim Türü, hangi Canlı Bildirimin başlatılacağını belirtir.

Anahtarları tanımlayın

Canlı Bildirimler, güncellemelerin nasıl yönlendirileceğini belirleyen bir key ile referans alınır.
NotificationServiceExtention.kt
private const val PROGRESS_LIVE_NOTIFICATION = "progress"

Bildirim kanalları oluşturun

Kanallar, bildirimlerin nasıl davranacağını tanımlar (ses, titreşim, görünüm). Canlı Bildirim türleriniz için kanallar oluşturmalısınız. Önerilerimiz:
  • İlerleme bildirimleri için Düşük Önem
  • Rozetleri devre dışı bırakın
  • Ses ve titreşimi minimumda tutun
Daha fazla bilgi için Android Bildirim Kanalı Kategorileri bölümüne bakın.

Canlı Bildirimi tasarlayın

Canlı Bildirim tasarlarken, her güncelleme türü için bir bildirim tasarımı oluşturma esnekliğine sahipsiniz. Oluşturduğunuz her tasarıma belirli bir tür atanmalıdır, bu da Canlı Bildirimin çeşitli sunumlarına olanak tanır.
NotificationServiceExtention.kt
private fun updateProgressNotification(
        liveNotificationUpdates: JSONObject,
        context: Context,
        notificationManager: NotificationManager
    ) {
        val currentProgress = liveNotificationUpdates.optInt("current_progress", 0)

        val builder = NotificationCompat.Builder(context, PROGRESS_CHANNEL_ID)
            .setContentTitle("Progress Live Notifications")
            .setContentText("It's working...")
            .setSmallIcon(android.R.drawable.ic_media_play)
            .setLargeIcon(BitmapFactory.decodeResource(context.resources, android.R.drawable.ic_dialog_info))
            .setOngoing(true)
            .setOnlyAlertOnce(true)
            .setProgress(100, currentProgress, false)
            .setAutoCancel(false) // Prevent auto-dismissal of notification until you set the end event

        notificationManager.notify(keyMap[PROGRESS_LIVE_NOTIFICATION]!!, builder.build())
        logger.info("Updated progress notification with progress: $currentProgress")
    }
Tasarım hususları:
  • Küçük simge ve vurgu rengi
  • Büyük simge
  • Büyük resim
  • Eylem düğmeleri
Gelişmiş tasarım seçenekleri için Android özel bildirim düzeni bölümüne bakın.

4. Canlı Bildirim yükünü çıkarın

Canlı Bildirimler, yapılandırılmış içeriği iletmek için additional_data alanını kullanır.
NotificationServiceExtention.kt
val additionalData = event.notification.additionalData
val liveNotificationPayload = additionalData?.optJSONObject("live_notification")

Canlı Bildirim Şeması

ÖzellikGerekliAçıklama
keyEvetDoğru bildirim kullanıcı arayüzünü yüklemek için kullanılır.
eventEvetCanlı Bildirim üzerinde gerçekleştirilecek eylem.
event_attributesHayırCanlı Bildirimi başlatmak için kullanılan statik veriler; bildirimin ihtiyaç duyduğu verileri tanımlayan kendi tanımlı şemanız.
event_updatesHayırCanlı Bildirimin dinamik içeriği. Uygulamanızın Canlı Bildirimi içinde tanımlanan ContentState arayüzüne uygun olmalıdır.
Example Live Notification Payload
  {
      "key": "celtics-vs-lakers",
      "event": "start",
      "event_attributes": {
          "homeTeam": "Celtics",
          "awayTeam": "Lakers",
          "game": "Finals Game 1"
      },
      "event_updates": {
          "quarter": 1,
          "homeScore": 0,
          "awayScore": 0,
      }
  }

5. Canlı Bildirim olaylarını işleyin

Her Canlı Bildirim aşağıdaki olaylara yanıt vermelidir:
OlayAçıklamaGerekli alanlar
startStatik ve dinamik verilerle bir Canlı Bildirim başlatır.event_attributes, event_updates
updateCanlı Bildirimi yeni dinamik verilerle günceller.event_updates
endCanlı Bildirimi sonlandırır ve kaldırır.Hiçbiri
NotificationServiceExtention.kt
val liveNotificationEvent = liveNotificationPayload.optString("event", "")

Canlı Bildirim başlatma

Canlı Bildirim başlatmaya hazır olduğunuzda:
  • Canlı Bildirim için statik verileri başlatmak üzere event_attributes ayarlayın. Bu veriler Canlı Bildirimin ömrü boyunca değişmeyecektir.
  • Canlı Bildirim için dinamik verileri başlatmak üzere event_updates verilerini ayarlayın. Bu, Canlı Bildirimin ömrü boyunca değişebilecek ve değişecek olan verilerdir.
  • Her güncellemenin bir öncekini geçersiz kılmasını sağlamak için bir collapse_id kullanın. Bu ID, sonraki güncellemelerin aynı bildirime yansıtılmasını sağlamak için Canlı Bildirime özgü olmalıdır.
curl
  curl -X "POST" "https://api.onesignal.com/notifications" \
       -H 'Authorization: key YOUR_REST_API_KEY' \
       -H 'Content-Type: application/json; charset=utf-8' \
       -d $'{
    "app_id": "YOUR_APP_ID",
    "isAndroid": true,
    "collapse_id": "THE_UNIQUE_ID_FOR_THIS_LIVE_NOTIFICATION",
    "data": {
      "live_notification": {
        "key": "progress",
        "event": "start",
        "event_attributes": {},
        "event_updates": {
          "current_progress": 0
        }
      }
    },
    "headings": {
      "en": "Start"
    },
    "contents": {
      "en": "Starting Live Notification"
    },
    "include_aliases": {
      "external_id": ["EID1", "EID2"]
    },
    "target_channel": "push"
  }'

Canlı Bildirim güncelleme

Canlı Bildirimi, önce başlatıldığı sürece istediğiniz kadar güncelleyebilirsiniz.
  • Canlı Bildirim için dinamik verileri başlatmak üzere event_updates verilerini ayarlayın. Bu, Canlı Bildirimin ömrü boyunca değişebilecek ve değişecek olan verilerdir ve Canlı Bildirimin içeriğini neyle güncelleyeceğinizi bildirir.
Örnek cURL isteği
curl
  curl -X "POST" "https://api.onesignal.com/notifications" \
       -H 'Authorization: key YOUR_REST_API_KEY' \
       -H 'Content-Type: application/json; charset=utf-8' \
       -d $'{
    "app_id": "YOUR_APP_ID",
    "isAndroid": true,
    "collapse_id": "THE_UNIQUE_ID_FOR_THIS_LIVE_NOTIFICATION",
    "data": {
      "live_notification": {
        "key": "progress",
        "event": "update",
  			"event_attributes": {},
        "event_updates": {
          "current_progress": 80
        }
      }
    },
    "headings": {
      "en": "Update"
    },
    "contents": {
      "en": "Updating Live Notification"
    },
    "include_aliases": {
      "external_id": ["EID1", "EID2"]
    },
    "target_channel": "push"
  }'

Canlı Bildirim sonlandırma

Örnek cURL isteği
curl
  curl -X "POST" "https://api.onesignal.com/notifications" \
       -H 'Authorization: key YOUR_REST_API_KEY' \
       -H 'Content-Type: application/json; charset=utf-8' \
       -d $'{
    "app_id": "YOUR_APP_ID",
    "isAndroid": true,
    "collapse_id": "THE_UNIQUE_ID_FOR_THIS_LIVE_NOTIFICATION",
    "data": {
      "live_notification": {
        "key": "progress",
        "event": "dismiss"
      }
    },
    "headings": {
      "en": "Dismissing"
    },
    "contents": {
      "en": "Dismissing Live Notification"
    },
    "include_aliases": {
      "external_id": ["EID1", "EID2"]
    },
    "target_channel": "push"
  }'

Başarıyla bir Canlı Bildirim oluşturdunuz!İlgili dokümanlar: