> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Android canlı bildirimleri

> OneSignal Canlı Bildirimler kullanarak Android cihazlarda dinamik, gerçek zamanlı bildirimler oluşturun ve güncelleyin. Android için iOS Canlı Etkinliklerini simüle ederek, tek bir bildirim içinde sürekli güncellenen içerik sunun.

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](./mobile-sdk-setup)'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](/reference/create-message) 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.

<Info>
  Daha fazla ayrıntı için [Android Bildirim Hizmeti Uzantısı](./service-extensions#android-notification-service-extension) bölümüne bakın.
</Info>

```kotlin NotificationServiceExtention.kt theme={null}
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

<CodeGroup>
  ```xml AndroidManifest.xml theme={null}
    <meta-data android:name="com.onesignal.NotificationServiceExtension"
                android:value="com.onesignal.sample.android.NotificationServiceExtension" />
  ```

  ```xml Example AndroidManifest.xml theme={null}
  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools">

      <application
          android:allowBackup="true"
          android:dataExtractionRules="@xml/data_extraction_rules"
          android:fullBackupContent="@xml/backup_rules"
          android:icon="@mipmap/ic_launcher"
          android:name=".MainApplication"
          android:label="@string/app_name"
          android:roundIcon="@mipmap/ic_launcher_round"
          android:supportsRtl="true"
          android:theme="@style/Theme.OneSignalAndroidSample"
          tools:targetApi="31">
          <meta-data android:name="com.onesignal.NotificationServiceExtension"
              android:value="com.onesignal.sample.android.NotificationServiceExtension" />
          <activity
              android:name=".MainActivity"
              android:exported="true">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />

                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      </application>

  </manifest>
  ```
</CodeGroup>

### 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.

```kotlin NotificationServiceExtention.kt theme={null}
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](./android-notification-categories) 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.

```kotlin NotificationServiceExtention.kt theme={null}
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

<Info>
  Gelişmiş tasarım seçenekleri için [Android özel bildirim düzeni](https://developer.android.com/develop/ui/views/notifications/custom-notification) bölümüne bakın.
</Info>

### 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.

```kotlin NotificationServiceExtention.kt theme={null}
val additionalData = event.notification.additionalData
val liveNotificationPayload = additionalData?.optJSONObject("live_notification")
```

#### Canlı Bildirim Şeması

| Özellik            | Gerekli | Açıklama                                                                                                                        |
| ------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `key`              | Evet    | Doğru bildirim kullanıcı arayüzünü yüklemek için kullanılır.                                                                    |
| `event`            | Evet    | Canlı Bildirim üzerinde gerçekleştirilecek eylem.                                                                               |
| `event_attributes` | Hayır   | Canlı Bildirimi başlatmak için kullanılan statik veriler; bildirimin ihtiyaç duyduğu verileri tanımlayan kendi tanımlı şemanız. |
| `event_updates`    | Hayır   | Canlı Bildirimin dinamik içeriği. Uygulamanızın Canlı Bildirimi içinde tanımlanan ContentState arayüzüne uygun olmalıdır.       |

```json Example Live Notification Payload theme={null}
  {
      "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:

| Olay     | Açıklama                                                 | Gerekli alanlar                     |
| -------- | -------------------------------------------------------- | ----------------------------------- |
| `start`  | Statik ve dinamik verilerle bir Canlı Bildirim başlatır. | `event_attributes`, `event_updates` |
| `update` | Canlı Bildirimi yeni dinamik verilerle günceller.        | `event_updates`                     |
| `end`    | Canlı Bildirimi sonlandırır ve kaldırır.                 | Hiçbiri                             |

```kotlin NotificationServiceExtention.kt theme={null}
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`](./push#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 theme={null}
  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 theme={null}
  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 theme={null}
  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"
  }'
```

***

<Check>
  Başarıyla bir Canlı Bildirim oluşturdunuz!

  İlgili dokümanlar:

  * [Android Bildirim Hizmeti Uzantısı](./service-extensions#android-notification-service-extension)
  * [Android SDK Kurulumu](./mobile-sdk-setup)
  * [Create Message API](/reference/create-message)
</Check>

***
