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

# OneSignal service worker

> OneSignalSDKWorker.js dosyasını ayarlayın ve yapılandırın, böylece web siteniz OneSignal aracılığıyla web push bildirimleri alabilsin ve görüntüleyebilsin.

OneSignal service worker (`OneSignalSDKWorker.js`), web push bildirimleri için gerekli olan ve sunucunuzda barındırılan bir JavaScript dosyasıdır. Kullanıcı sayfanızda olmasa bile sitenizin bildirimleri alıp görüntülemesini sağlar.

<Frame caption="OneSignal service worker'ın push bildirimlerini işleme şekli">
  <img src="https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?fit=max&auto=format&n=MUgio66t0sYhGEvj&q=85&s=e0b50cfe6ccc36c1b2b6d36219b6e3ad" alt="Diagram showing the OneSignal service worker receiving a push event and displaying a notification" width="2016" height="949" data-path="images/docs/67882a5-onesignsal-service-worker.jpg" />
</Frame>

<Note>
  WordPress eklentimizi kullanıyorsanız service worker otomatik olarak eklenir. Bu kılavuzu atlayın ve [WordPress kurulumuna](./wordpress) dönün.
</Note>

## Service worker kurulumu

OneSignal push bildirimleri için özel bir `OneSignalSDKWorker.js` dosyası oluşturun. Sitenizde zaten bir service worker varsa ve tek bir dosya kullanmak istiyorsanız bunun yerine [Birden fazla service worker birleştirme](#combining-multiple-service-workers) bölümüne bakın.

<Steps>
  <Step title="OneSignalSDKWorker.js'yi indirin veya oluşturun">
    [Web SDK kurulumu](./web-sdk-setup) sırasında OneSignal panosundan dosyayı indirin veya [GitHub'dan indirin](https://github.com/OneSignal/OneSignal-Website-SDK/files/11480764/OneSignalSDK-v16-ServiceWorker.zip).

    Alternatif olarak, aşağıdaki tek kod satırıyla `OneSignalSDKWorker.js` adında bir dosya oluşturun:

    ```javascript theme={null}
    importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
    ```

    <Note>
      Gerekirse dosyayı yeniden adlandırabilirsiniz (örn. `onesignalsdkworker.js`). Bunu yaparsanız, bu kılavuzdaki `OneSignalSDKWorker.js` ifadesini dosya adınızla değiştirmeniz yeterlidir.
    </Note>
  </Step>

  <Step title="Web sunucunuza yükleyin">
    `OneSignalSDKWorker.js` dosyasını sunucunuza yerleştirerek HTTPS üzerinden kamuya açık şekilde erişilebilir hale getirin. Dosyaya erişim için kimlik doğrulama veya giriş yapılmaması gerekir.

    **Önerilen:** Dosyayı hiçbir zaman sayfa sunmayacak olan özel bir alt dizinde barındırın (örn. `/push/onesignal/`). Bu, sitenizdeki diğer service worker'larla (örn. bir PWA veya AMP service worker'ı) çakışmayı önler ve URL yolunu kararlı tutar.

    * Örnek: `https://yoursite.com/push/onesignal/OneSignalSDKWorker.js`

    **Alternatif:** OneSignal Web SDK, varsayılan olarak dosyayı site kökünüzde (`https://yoursite.com/OneSignalSDKWorker.js`) arar. Dosyayı kök dizinine yükleyebilirsiniz, ancak kök kapsamına ihtiyaç duyan diğer service worker'larla çakışabilir. Örneğin, PWA kullanıyorsanız `OneSignalSDKWorker.js` dosyasını bir alt dizine yerleştirin.

    <Warning>
      **Kalıcı** bir URL yolu seçin. Bir tarayıcı belirli bir URL'de service worker kaydettikten sonra, o URL'yi değiştirmek için [geçiş](#migration-guide) yapılması gerekir.
    </Warning>
  </Step>

  <Step title="Dosyanın erişilebilir olduğunu doğrulayın">
    Tarayıcınızda dosya URL'sine gidin (örn. `https://yoursite.com/push/onesignal/OneSignalSDKWorker.js`).

    1. Adım'daki `importScripts` satırını görmelisiniz:

    <Frame caption="Tarayıcıda beklenen service worker dosyası içeriği">
      <img src="https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?fit=max&auto=format&n=eSOC1PsvyAo3Gten&q=85&s=3add122d37c9f12a39f1d7e3d40eeaba" alt="Browser displaying the single importScripts line inside OneSignalSDKWorker.js" width="1678" height="322" data-path="images/push/service-worker-code-example.png" />
    </Frame>

    404 hatası, boş sayfa veya giriş istemi görüyorsanız dosya doğru şekilde yüklenmemiş veya kimlik doğrulamanın arkasındadır.
  </Step>

  <Step title="SDK yolunu yapılandırın (yalnızca alt dizin)">
    Dosyayı site kökünüze yerleştirdiyseniz ek yapılandırma gerekmez — sonraki adıma atlayın.

    Dosyayı bir alt dizine yerleştirdiyseniz SDK'ya dosyanın nerede olduğunu bildirin:

    #### Tipik site kurulumu

    1. OneSignal panosunda **Ayarlar > Push & In-App > Web Ayarları**'na gidin.
    2. **Gelişmiş Push Ayarları** altında **Service worker yollarını ve dosya adlarını özelleştir** seçeneğini etkinleştirin.

    <Frame caption="Panodaki service worker yolu yapılandırması">
      <img src="https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?fit=max&auto=format&n=npQH4TNAoIbyiAie&q=85&s=0bc69998eea5273d287af408c6e925b3" alt="OneSignal dashboard fields for service worker path, filename, and registration scope" width="1840" height="794" data-path="images/dashboard/service-worker-configuration-typical-site-setup.png" />
    </Frame>

    | Alan                                  | Açıklama                                                                                                                                                        | Örnek                   |
    | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
    | **Path to service worker files**      | `OneSignalSDKWorker.js`'nin barındırıldığı dizin.                                                                                                               | `/push/onesignal/`      |
    | **Service worker filename**           | `.js` dosyasının adı.                                                                                                                                           | `OneSignalSDKWorker.js` |
    | **Service worker registration scope** | Service worker'ın kontrol ettiği URL yolu. Dosyanın barındırıldığı dizinde veya altında olmalıdır. Kullanıcıya yönelik sayfaların sunulmadığı bir yol kullanın. | `/push/onesignal/`      |

    #### Özel kod kurulumu

    [`OneSignal.init()`](./web-push-custom-code-setup) çağrınıza `serviceWorkerPath` ve `serviceWorkerParam` parametrelerini ekleyin:

    ```html theme={null}
    <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
    <script>
      window.OneSignalDeferred = window.OneSignalDeferred || [];
      window.OneSignalDeferred.push(async function(OneSignal) {
        await OneSignal.init({
          appId: "YOUR_APP_ID",
          serviceWorkerPath: "push/onesignal/OneSignalSDKWorker.js",
          serviceWorkerParam: { scope: "/push/onesignal/" },
        });
      });
    </script>
    ```

    | Parametre                  | Açıklama                                                                                                                                                        | Örnek                                    |
    | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
    | `serviceWorkerPath`        | Site kökünden `.js` dosyasına göreli yol (baştaki eğik çizgi olmadan).                                                                                          | `"push/onesignal/OneSignalSDKWorker.js"` |
    | `serviceWorkerParam.scope` | Service worker'ın kontrol ettiği URL yolu. Dosyanın barındırıldığı dizinde veya altında olmalıdır. Kullanıcıya yönelik sayfaların sunulmadığı bir yol kullanın. | `"/push/onesignal/"`                     |
  </Step>

  <Step title="Service worker gereksinimlerini inceleyin">
    `OneSignalSDKWorker.js` dosyası aşağıdaki gereksinimlerin tamamını karşılamalıdır. Herhangi biri karşılanmazsa push bildirimleri çalışmaz.

    | Gereksinim                   | Ayrıntılar                                                                                                                                                                                                                                                  |
    | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | **Kamuya açık erişilebilir** | Tarayıcıda dosya URL'sine gidin ve JavaScript kodunu gördüğünüzü doğrulayın.                                                                                                                                                                                |
    | **Doğru içerik türü**        | Sunucu `Content-Type: application/javascript; charset=utf-8` döndürmelidir.                                                                                                                                                                                 |
    | **Aynı köken**               | Dosya, sitenizle aynı etki alanında barındırılmalıdır. CDN'lere ve alt etki alanlarına izin verilmez. Bkz. [MDN: Worker'ınızı kaydetme](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Registering_your_worker). |
    | **HTTPS**                    | Service worker'lar güvenli bir bağlam gerektirir. Geliştirme sırasında `localhost` tek istisnadır.                                                                                                                                                          |

    <Check>
      Service worker kurulumu tamamlandı.
    </Check>

    <Card title="Web SDK kurulumu" icon="browsers" href="./web-sdk-setup">
      Sonraki adımlar için Web SDK kurulum kılavuzuna devam edin.
    </Card>
  </Step>
</Steps>

***

## Birden fazla service worker birleştirme

Sitenizdeki her service worker dosyası bir **kapsama** — hangi sayfaları kontrol ettiğini belirleyen bir URL yoluna — kaydedilir. Belirli bir kapsamda yalnızca bir service worker etkin olabilir. Halihazırda bir service worker'ınız varsa (örn. bir PWA veya önbellek worker'ı) ve OneSignal'ın aynı dosyayı paylaşmasını istiyorsanız bunları birleştirebilirsiniz.

<Warning>
  Service worker'ları ayrı kapsamlara sahip ayrı dosyalarda tutmak bakımı daha basittir ve çakışmaları önler. Yalnızca kurulumunuzun tek bir service worker dosyası gerektirmesi durumunda birleştirin.
</Warning>

Birleştirmek için, OneSignal `importScripts` satırını **mevcut** service worker dosyanıza ekleyin:

```javascript theme={null}
importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
importScripts("https://yoursite.com/your-other-service-worker.js");
```

Birleştirdikten sonra, mevcut service worker dosyanızı gösterecek şekilde OneSignal yapılandırmasını güncelleyin. Birleştirilmiş dosyanızın yolunu ve dosya adını kullanarak [4. Adım: SDK yolunu yapılandırın](#step-4-configure-the-sdk-path-subdirectory-only) bölümünü takip edin.

***

## Geçiş kılavuzu

Bu bölüm, service worker dosya yolunu, dosya adını veya kapsamı değiştirmesi gereken mevcut OneSignal müşterileri içindir. Mevcut yapılandırmanızı değiştirmek için özel bir nedeniniz olmadıkça bu adımları uygulamayın.

<Accordion title="Service worker'ınızı ne zaman ve nasıl geçirirsiniz">
  **Geçiş nedenleri:**

  * Kök kapsama sahip OneSignal service worker, bir Progressive Web App (PWA) ile çakışıyor
  * Service worker, AMP veya başka bir önbellek service worker'ı ile çakışıyor
  * Güvenlik politikaları kök kapsamda üçüncü taraf service worker koduna izin vermiyor

  **Seçenek 1: Yalnızca kapsamı değiştirin (önerilen)**

  Yalnızca kapsamı değiştirmek en güvenli geçiştir. Dosya mevcut URL'sinde kalır, bu nedenle mevcut aboneler kesintisiz bildirim almaya devam eder.

  **Dosyanız yalnızca OneSignal kodu içeriyorsa**

  `OneSignalSDKWorker.js` dosyasının yalnızca şunu içerdiğini doğrulayın:

  ```javascript theme={null}
  importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
  ```

  [4. Adım: SDK yolunu yapılandırın](#step-4-configure-the-sdk-path-subdirectory-only) bölümünde açıklandığı gibi panoyu veya `serviceWorkerParam`'ı kullanarak kapsamı güncelleyin. Başka değişiklik gerekmez.

  <Warning>
    `OneSignalSDKWorker.js` bugün etki alanı kökünüzde barındırılmıyorsa, `Service-Worker-Allowed` başlığıyla mevcut URL'de en az bir yıl boyunca barındırmaya devam etmelisiniz. Dosyanın yanlışlıkla silinmemesi için arka uç kodunuza veya iç belgelerinize bir yorum ekleyin.
  </Warning>

  **Dosyanız OneSignal + başka kod içeriyorsa**

  Service worker'ınız ek `importScripts` çağrıları içerebilir (örn. [Birden fazla service worker birleştirme](#combining-multiple-service-workers) kılavuzunu takip etmiş olmanız durumunda). Mevcut kurulumunuz hâlâ çalışıyorsa **olduğu gibi bırakın** — birleştirilmiş bir service worker'ı ayırmak iki aşamalı bir dağıtım gerektirir.

  Ayırmanız gerekiyorsa:

  <Steps>
    <Step title="Mevcut dosyaya bir saklama yorumu ekleyin">
      Mevcut service worker'ınızdaki OneSignal `importScripts` satırının üzerine ekleyin:

      ```javascript theme={null}
      // KEEP until YYYY-MM-DD: Required for push delivery to subscribers who have not revisited.
      importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
      ```

      Tarihi en az **bir yıl** sonrası olarak ayarlayın.
    </Step>

    <Step title="Yeni bir özel OneSignal service worker oluşturun">
      Bir alt dizinde (örn. `/push/onesignal/`) yalnızca şunu içeren `OneSignalSDKWorker.js` dosyasını oluşturun:

      ```javascript theme={null}
      importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
      ```
    </Step>

    <Step title="OneSignal yapılandırmasını güncelleyin">
      [4. Adım: SDK yolunu yapılandırın](#step-4-configure-the-sdk-path-subdirectory-only) bölümünde açıklandığı gibi panoyu veya `OneSignal.init()`'i kullanarak yeni yolu ve kapsamı ayarlayın.
    </Step>

    <Step title="Abonelerin geçişini bekleyin">
      Yeni ve geri dönen ziyaretçiler otomatik olarak yeni service worker'a kaydolur. Mevcut abonelerin çoğunluğunun sitenizi tekrar ziyaret etmesi için en az bir yıl bekleyin.
    </Step>

    <Step title="Temizlik">
      Seçtiğiniz saklama süresinden daha eski [etkin olmayan kullanıcıları silin](./delete-users), ardından orijinal service worker dosyasından OneSignal `importScripts` satırını kaldırın.
    </Step>
  </Steps>

  **Seçenek 2: Dosya adını veya konumunu değiştirin**

  Dosya adını veya dizini değiştirmek daha karmaşıktır çünkü tarayıcılar service worker'ı başlangıçta kaydedildiği URL'den alır. Sitenizi tekrar ziyaret etmemiş aboneler hâlâ eski URL'yi referans alır.

  <Warning>
    Orijinal dosyayı eski URL'sinde en az bir yıl boyunca barındırmaya devam etmelisiniz. Kaldırılması, tarayıcı service worker'ı güncellemeye çalıştığında 404 hatalarına neden olur ve etkilenen aboneler bildirim almayı bırakır.
  </Warning>

  **Dosyanız yalnızca OneSignal kodu içeriyorsa**

  <Steps>
    <Step title="Eski dosyaya bir saklama yorumu ekleyin">
      ```javascript theme={null}
      // KEEP until YYYY-MM-DD: Required for push delivery to subscribers still on the old service worker URL.
      importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
      ```
    </Step>

    <Step title="Yeni konumda yeni dosyayı oluşturun">
      `OneSignalSDKWorker.js`'yi (veya seçtiğiniz dosya adını) yeni dizine şunu içerecek şekilde yerleştirin:

      ```javascript theme={null}
      importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
      ```
    </Step>

    <Step title="OneSignal yapılandırmasını güncelleyin">
      [4. Adım: SDK yolunu yapılandırın](#step-4-configure-the-sdk-path-subdirectory-only) bölümünde açıklandığı gibi yeni yolu, dosya adını ve kapsamı ayarlayın.
    </Step>

    <Step title="Abonelerin geçişini bekleyin">
      Yeni ve geri dönen ziyaretçiler otomatik olarak yeni dosyaya kaydolur. En az bir yıl bekleyin.
    </Step>

    <Step title="Temizlik">
      Saklama sürenizden daha eski [etkin olmayan kullanıcıları silin](./delete-users), ardından eski dosyayı kaldırın.
    </Step>
  </Steps>

  **Dosyanız OneSignal + başka kod içeriyorsa**

  Yukarıdaki **Seçenek 1: Yalnızca kapsamı değiştirin** adımlarını takip edin. Süreç aynıdır.
</Accordion>

***

## Sık karşılaşılan sorunlar

### Service worker'ım neden 404 döndürüyor?

Dosya, SDK'nın beklediği URL'de değil. Erişilebilir olduğunu doğrulamak için tarayıcınızda tam dosya URL'sine gidin. Dosyayı bir alt dizine yerleştirdiyseniz, `serviceWorkerPath` (özel kod) veya pano yol ayarının dizin ve dosya adı dahil gerçek dosya konumuyla eşleştiğini doğrulayın.

### Service worker dosyasını taşıdıktan sonra bildirimler neden gösterilmiyor?

Mevcut aboneler hâlâ eski service worker URL'sini referans alıyor. Tarayıcı, her push geldiğinde kayıtlı URL'yi alır (en fazla 24 saat önbelleğe alınmış). Eski URL 404 döndürürse o aboneler bildirim almaz. Aboneler sitenizi tekrar ziyaret ederek doğal olarak geçiş yapana kadar eski dosyayı en az bir yıl boyunca barındırmaya devam edin. [Geçiş kılavuzu](#migration-guide) ve [Web push bildirimleri gösterilmiyor](./notifications-not-shown-web-push) kılavuzuna bakın.

### Service worker'ı bir CDN veya alt etki alanında barındırabilir miyim?

Hayır. Tarayıcılar, service worker'ların onları kaydeden sayfayla aynı kökenden sunulmasını gerektirir. Dosya birincil etki alanınızda olmalıdır — CDN, alt etki alanı veya farklı bir etki alanında olamaz.

### PWA'ım neden OneSignal service worker ile çakışıyor?

Her ikisi de muhtemelen kök kapsamda (`/`) kayıtlıdır ve belirli bir kapsamda yalnızca bir service worker kaydedilebilir. PWA'nızın kök kapsamın kontrolünü koruyabilmesi için OneSignal service worker'ı bir alt dizin kapsamına (örn. `/push/onesignal/`) taşıyın ya da [Birden fazla service worker birleştirme](#combining-multiple-service-workers) bölümünde açıklandığı gibi service worker'ları birleştirin.

### OneSignalSDKWorker.js dosyasını yeniden adlandırabilir miyim?

Evet. Sunucunuz belirli bir adlandırma kuralı gerektiriyorsa (örn. tümü küçük harf), dosyayı `onesignalsdkworker.js` gibi bir adla yeniden adlandırabilirsiniz. Bunu yaparsanız OneSignal yapılandırmanızda dosya adını güncelleyin — panodaki **Service worker filename** alanında veya `OneSignal.init()` çağrınızdaki `serviceWorkerPath` parametresinde. Ayrıntılar için [4. Adım'a](#step-4-configure-the-sdk-path-subdirectory-only) bakın.

### Sunucum service worker dosyası için hangi içerik türünü döndürmelidir?

Sunucu `Content-Type: application/javascript; charset=utf-8` döndürmelidir. Bazı sunucu veya CDN yapılandırmaları yanlış bir MIME türü döndürebilir; bu, tarayıcının service worker kaydını reddetmesine neden olur.
