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

# Onaylanmış teslimat

> Onaylanmış Teslimat, OneSignal aracılığıyla gönderilen bir push bildirimini cihazın aldığı zamanı izler. iOS, Android, Huawei ve Web için gereksinimleri, platform sınırlamalarını ve sorun gidermeyi kapsar.

## Genel Bakış

Onaylanmış Teslimat, bir cihazın OneSignal aracılığıyla gönderilen bir push bildirimini gerçekten **aldığını** izler. Cihazdaki OneSignal SDK bir push aldığında, bildirim kimliğini ve cihazın [Abonelik Kimliği](./subscriptions)'ni içeren bir onay olayını OneSignal'a geri gönderir. Bu, hangi aboneliklerin hangi bildirimleri aldığını tam olarak görmenizi sağlar.

OneSignal Dashboard'unuzda Onaylanmış Teslimat, [Mesaj Raporu](./push-notification-message-reports)'nda **Onaylandı** (veya **Alındı**) olarak görünür. Tüm teslimat ve etkileşim metrikleri için [Metrik Sözlüğü](./analytics-metrics-glossary)'ne bakın.

<Frame caption="Onaylanmış Teslimatlar Akışı">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=17ce8f50b8e92e0d368abe42865709c3" alt="Onaylanmış Teslimatlar Akışı" width="800" height="667" data-path="images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png" />
</Frame>

<Note>
  Onaylanmış Teslimat, "Teslim Edildi"den farklıdır. Platform push hizmetleri (APNs, FCM, ADM, HMS), bir bildirimin servis tarafından kabul edilip edilmediğini raporlar — cihazın gerçekten alıp almadığını değil. Onaylanmış Teslimat, cihaz tarafındaki onaylama işlemidir.
</Note>

***

## Gereksinimler

* Yalnızca **ücretli planlar**da mevcuttur. [Planları karşılaştırın](https://onesignal.com/pricing).
* [Web SDK Kurulumu](./web-sdk-setup) ve/veya [Mobil SDK Kurulumu](./mobile-sdk-setup)'nu tamamlayın.
  * Onaylanmış Teslimat yalnızca cihazda OneSignal SDK yüklüyse çalışır.
  * Yalnızca API aracılığıyla oluşturulan abonelikler için **desteklenmez**.

### Platforma özgü sınırlamalar

**iOS**

* Hem **Bildirim Hizmeti Uzantısı** hem de **App Group** kurulumu gerektirir.
* APNs, çevrimdışıyken **uygulama başına yalnızca bir mesaj** tutar. Çevrimdışıyken birden fazla push gönderilirse, yalnızca en son teslim edilir.

**Huawei**

* Yalnızca `data` [Huawei mesaj türü](/reference/push-notification#body-huawei-msg-type) için desteklenir.
* `message` türü için Huawei, alındı verilerini yalnızca kendi gösterge panelinde sağlar.

**Web**

* Safari, Onaylanmış Teslimat'ı **desteklemez**.

***

## Onaylanmış Teslimat Sorun Giderme

Push bildirimi hiç almıyorsanız önce [Bildirimler görüntülenmiyor](./notifications-show-successful-but-are-not-being-shown)'a bakın.

### iOS

iOS'ta Onaylanmış Teslimat için iki şeyin birlikte çalışması gerekir:

1. Push geldiğinde OneSignal kodunu çalıştıran bir **Bildirim Hizmeti Uzantısı** (NSE)
2. Veri alışverişi yapabilmeleri için ana uygulama hedefi ile NSE hedefi arasında paylaşılan bir **App Group**

Herhangi biri eksik veya yanlış yapılandırılmışsa, cihaz push'u alır ancak OneSignal'a hiçbir zaman raporlamaz.

**iOS kurulumunuzu doğrulayın**

<Steps>
  <Step title="NSE hedefinin mevcut olduğunu ve doğru koda sahip olduğunu doğrulayın">
    Xcode'da, proje hedefleriniz altında **OneSignalNotificationServiceExtension** hedefinin listelendiğini kontrol edin. Mevcut değilse, [iOS SDK Kurulumu'nun 2. Adımı](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse)'nı izleyin.

    NSE'nin `NotificationService.swift` (veya `.m`) dosyasını açın. `didReceive(_:withContentHandler:)` içinde `OneSignalExtension.didReceiveNotificationExtensionRequest`'i çağırması gerekir. Dosya hâlâ Apple'ın varsayılan şablon kodunu içeriyorsa, [OneSignal NSE kodu](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse) ile değiştirin.
  </Step>

  <Step title="NSE'nin OneSignalExtension paketine sahip olduğunu doğrulayın">
    **NSE hedefi > General > Frameworks and Libraries** (veya **Build Phases > Link Binary With Libraries**)'i seçin. `OneSignalExtension`'ın listelendiğini doğrulayın. Ana uygulama hedefi `OneSignalFramework` kullanır, ancak NSE hedefi `OneSignalExtension` kullanmalıdır — bunlar farklı paketlerdir.
  </Step>

  <Step title="App Group'un her iki hedefte de doğru yapılandırıldığını doğrulayın">
    OneSignal SDK, ana uygulamanız ile NSE arasında veri paylaşmak için bir App Group kullanır. Bunu yapılandırmanın iki yolu vardır — kurulumunuza uyan birini seçin.

    1. **Ana uygulama hedefiniz > Signing & Capabilities > App Groups**'u seçin.
    2. App Group'u onaylayın.

    App Group'unuz `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal` ise — `YOUR_MAIN_APP_BUNDLE_ID`, ana uygulama hedefinizin **General > Identity** altında bulunan Bundle Identifier'ıdır — Varsayılan App Group sekmesini izleyin. Aksi takdirde Özel App Group sekmesini izleyin.

    <Tabs>
      <Tab title="Varsayılan App Group - group.YOUR_MAIN_APP_BUNDLE_ID.onesignal">
        1. **NSE hedefi > Signing & Capabilities > App Groups**'u seçin.
        2. **Aynı** App Group'un listelendiğini onaylayın. Eksikse, **+ Capability > App Groups** aracılığıyla ekleyin ve aynı grubu seçin.

        Yaygın bir hata, ana uygulama bundle identifier'ı yerine NSE'nin bundle identifier'ını kullanmaktır:

        * **Doğru:** `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`
        * **Yanlış:** `group.YOUR_MAIN_APP_BUNDLE_ID.OneSignalNotificationServiceExtension.onesignal`

        Ana uygulama hedefiniz ve NSE hedefiniz aynı App Group identifier'ına sahip olmalıdır.
      </Tab>

      <Tab title="Özel App Group">
        App Group identifier'ınız `group.YOUR_MAIN_APP_BUNDLE_ID.onesignal` formatını izlemiyorsa bu seçeneği kullanın.

        1. **Ana uygulama hedefiniz > Signing & Capabilities > App Groups**'u seçin.
        2. Özel App Group'unuzun listelendiğini onaylayın.
        3. Ana uygulama hedefinizin `Info.plist`'ini seçin ve aşağıdaki anahtarı ekleyin:

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        `group.your-custom-group-name`'i gerçek App Group adınızla değiştirin.

        4. **NSE hedefi > Signing & Capabilities > App Groups**'u seçin.
        5. **Aynı** özel App Group'un listelendiğini onaylayın. Eksikse, **+ Capability > App Groups** aracılığıyla ekleyin ve aynı grubu seçin.
        6. NSE hedefinizin `Info.plist`'ini seçin ve aşağıdaki anahtarı ekleyin:

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        `group.your-custom-group-name`'i gerçek App Group adınızla değiştirin.

        Ana uygulama hedefiniz ve NSE hedefiniz aynı App Group identifier'ına sahip olmalıdır.
      </Tab>
    </Tabs>

    <Warning>
      Build ayarları için `.xcconfig` dosyaları kullanıyorsanız, App Group'un bu dosyalarda geçersiz kılınmadığını veya atlanmadığını doğrulayın.
    </Warning>
  </Step>

  <Step title="Minimum dağıtım hedeflerinin eşleştiğini onaylayın">
    **NSE hedefi > General > Minimum Deployments**'ı seçin. Bu değer, ana uygulama hedefinizin minimum dağıtımıyla eşleşmelidir. Uyumsuzluk, NSE'nin belirli işletim sistemi sürümlerinde çalışmamasına neden olabilir.
  </Step>

  <Step title="&#x22;Copy only when installing&#x22; seçeneğinin işaretini kaldırın">
    **Ana uygulama hedefiniz > Build Phases > Embed App Extensions**'ı seçin. **"Copy only when installing" işaretinin kaldırıldığından** emin olun. İşaretliyse, NSE geliştirme build'lerine dahil edilmez, dolayısıyla test sırasında hiçbir zaman çalışmaz.
  </Step>

  <Step title="Info.plist'teki NSExtension değerlerini doğrulayın">
    **NSE hedefi > Info** sekmesini seçin ve `NSExtension` anahtarını genişletin. Şunları içerdiğini onaylayın:

    ```xml theme={null}
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.service</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).NotificationService</string>
    ```

    NSE'niz Objective-C ile yazılmışsa, `$(PRODUCT_MODULE_NAME).NotificationService` yerine `NotificationService` kullanın.
  </Step>

  <Step title="mutable-content'in ayarlandığını doğrulayın">
    OneSignal, push payload'ına otomatik olarak `mutable-content: 1` ayarlar; bu iOS'a NSE'yi çağırmasını söyler. [REST API](/reference/push-notification) aracılığıyla push gönderiyorsanız, açıkça `mutable_content: false` ayarlamadığınızı doğrulayın. `mutable-content` olmadan iOS NSE'yi çalıştırmaz ve Onaylanmış Teslimat tetiklenemez.
  </Step>

  <Step title="NSE'nin çalıştığını test edin">
    OneSignal çağrısından önce `didReceive` içine geçici olarak bu satırı ekleyin:

    ```swift theme={null}
    bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
    ```

    Kendinize bir test push gönderin. Bildirim gövdesi `[Modified]` ile başlıyorsa, NSE doğru çalışıyor demektir. Başlamıyorsa, yukarıdaki adımları tekrar gözden geçirin — NSE çağrılmıyor. Test ettikten sonra bu satırı kaldırın.

    Xcode Console günlükleriyle gelişmiş NSE hata ayıklaması için [iOS Bildirim Hizmeti Uzantısı hata ayıklama](./service-extensions#debugging-the-ios-notification-service-extension)'ya bakın.
  </Step>
</Steps>

### Android

* Bildirimler görüntülenmiyorsa: [Mobil push sorun giderme](./notifications-show-successful-but-are-not-being-shown)'ye bakın.
* Bildirimler gösteriliyor ancak Onaylanmış Teslimat eksikse: özel bir Android Hizmet Uzantısı bunu engelliyor olabilir. [Android Hizmet Uzantısı kılavuzu](./service-extensions#android-service-extension)'na bakın.

### Web

* Safari desteklenmez.
* Diğer tarayıcılar için **v16 SDK**'ya geçişin tamamlandığından emin olun:
  * Doğru SDK başlatma:
    ```html theme={null}
    <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
    ```
  * Doğru Service Worker referansı:
    ```html theme={null}
    importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
    ```

***

## SSS

### Neden Onaylanmış Teslimat sayılarım düşük veya eksik?

En yaygın nedenler kurulum sorunları (özellikle iOS), etkin olmayan cihazlar ve platform sınırlamalarıdır.

1. **iOS yanlış yapılandırması:** Bildirim Hizmeti Uzantısı veya App Group eksik ya da hatalı. Yukarıdaki [iOS'ta Onaylanmış Teslimat sorun giderme](#ios)'ye bakın.
2. **Etkin olmayan veya terk edilmiş cihazlar:** Çevrimdışı olan veya artık kullanılmayan cihazlar push almaz veya Onaylanmış Teslimat olayları göndermez. Aşağıdaki [Etkin olmayan cihazları nasıl yönetirim?](#etkin-olmayan-cihazları-nasıl-yönetirim)'e bakın.
3. **Platform sınırlamaları:** Huawei `message` türü ve Safari, Onaylanmış Teslimat'ı desteklemez.
4. **Android zorla kapatma:** Bazı cihaz üreticileri, uygulamayı kaydırarak kapatmayı zorla kapatma olarak değerlendirerek SDK olaylarını durdurur. [Mobil push gösterilmiyor kılavuzu](./notifications-show-successful-but-are-not-being-shown)'na bakın.

### Etkin olmayan cihazları nasıl yönetirim?

Çevrimdışı olan veya terk edilmiş cihazlar push bildirimleri almaz veya Onaylanmış Teslimat olayları göndermez. Bu, kullanıcılar cihazlarını değiştirdiğinde veya terk ettiğinde yaygındır.

Etkin olmayan kullanıcıları yeniden etkileşime geçirmek için:

* Teslimati onaylamayan kullanıcılara yeniden göndermek için **Kitle Etkinliği**'ni kullanın.
* **Son Oturum**'a dayalı [Segmentler](./segmentation) oluşturun (örn., 90+ gün etkin değil).
  * Onları geri kazanmak için bir [Yeniden Etkileşim Journey](./journeys-examples#re-engagement-campaign)'i ile birleştirin.
  * Ulaşılamayan cihazları temizlemek için düzenli olarak etkin olmayan kullanıcıları hedefleyin.

OneSignal'ın abonelik durumunu nasıl güncellediği hakkında daha fazla ayrıntı için [Push Abonelik durumları ne zaman güncellenir?](./subscriptions#when-do-push-subscription-statuses-update)'e bakın.

### Neden Onaylandı gösteriyor ama cihazımda görünmüyor?

Onaylanmış Teslimat olayı, cihazın push payload'ını aldığı anlamına gelir. Nadir durumlarda bildirim görüntülenmeyebilir.

Olası nedenler:

* **Kaçırılan bildirim:** Bunu dışlamak için [Test Aboneliklerini Bul ve ayarla](./test-users) aracılığıyla kendinize test push gönderin.
* **iOS Odak Modu:** "Rahatsız Etmeyin", "Uyku" veya diğer [Odak modları](./ios-focus-modes-and-interruption-levels) bildirimleri geciktirir veya gruplandırır. Gruplanmış bir bildirimi görmeden kapatmış olabilirsiniz.
* **Görüntülemeyi engelleyen uygulama kodu:**
  * [Ön plan yaşam döngüsü dinleyicisi](./mobile-sdk-reference#addforegroundlifecyclelistener-push) veya [Bildirim Hizmeti Uzantısı](./service-extensions)'ndaki `event.preventDefault()` bildirimin görüntülenmesini durdurur.
  * [`removeDeliveredNotifications(withIdentifiers:)`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removedeliverednotifications\(withidentifiers:\)) veya [`removeAllDeliveredNotifications()`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removealldeliverednotifications\(\)) çağrıları bildirimleri geldikten sonra kaldırır.
* **Push yük ayarları:**
  * `priority`'nin yüksek olarak ayarlandığından emin olun. [Push önceliği](./push#priority)'ne bakın.
  * [`collapse_id`](./push#collapse_id), aynı kimliği kullanarak eski push'ları yenileriyle değiştirir.

***

<Info>
  Need help?

  Chat with our Support team or email `support@onesignal.com`

  Please include:

  * Details of the issue you're experiencing and steps to reproduce if available
  * Your OneSignal App ID
  * The External ID or Subscription ID if applicable
  * The URL to the message you tested in the OneSignal Dashboard if applicable
  * Any relevant [logs or error messages](/docs/en/capturing-a-debug-log)

  We're happy to help!
</Info>
