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

# Web SDK referansı

> Başlatma, kullanıcı yönetimi, push bildirimleri, slidedown istemleri ve hata ayıklama yöntemleriyle OneSignal Web SDK v16 için eksiksiz API referansı. Web push bildirimleri uygulamayı, kullanıcı aboneliklerini yönetmeyi ve e-posta/SMS özelliklerini entegre etmeyi öğrenin.

## Kurulum ve hata ayıklama

OneSignal çağrılarınızı `OneSignalDeferred.push(async function() { ... })` ile sarma ihtiyacını fark edebilirsiniz

`function()` içine istediğiniz kadar yöntem ekleyebilirsiniz.

OneSignal SDK, sayfanızda `defer` özniteliği ile yüklenir. Örneğin:

`<script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>`

Bu, OneSignal kodunun HTML belgesi tamamen ayrıştırıldıktan sonra çalışacağı anlamına gelir ve OneSignal SDK'nın siteyi bloke etmesini önler. Ancak bu, `OneSignalDeferred` değişkeninin var olmasına bağlı olan sayfa betikleri için bir sorun oluşturur. Bunu çözmek için, OneSignal'i sitenize eklediğinizde şununla başlamalıdır:

`window.OneSignalDeferred = window.OneSignalDeferred || [];`

Bu bir `OneSignalDeferred` değişkeni oluşturur ve OneSignal zaten yüklenmişse, yüklenen örneğe atanır. Aksi takdirde, OneSignal değişkeni boş bir diziye eşittir - `[]`.

Tüm dizilerin bir [`.push() fonksiyonu`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) vardır, bu noktada `OneSignalDeferred` değişkeni basitçe üzerine ittiğimiz fonksiyonların bir dizisidir. SDK sonunda yüklendiğinde, SDK [şu ana kadar itilen tüm fonksiyonları işler ve .push()'u yeniden tanımlar](https://github.com/OneSignal/OneSignal-Website-SDK/blob/03cd16cacb79ff6d37156878d4f59ebf31ad8044/src/OneSignal.js#L2050).

### `init()`

OneSignal SDK'yı başlatır. Bu, sitenizin her sayfasında `<head>` etiketinde bir kez çağrılmalıdır. `ONESIGNAL_APP_ID`, [Anahtarlar ve ID'ler](./keys-and-ids)'de bulunabilir.

<Note>
  OneSignal SDK'nın başlatılmasını geciktirmek istiyorsanız, [Gizlilik yöntemlerimizi](#privacy) kullanmanızı öneririz.
</Note>

<CodeGroup>
  ```javascript JavaScript theme={null}
  window.OneSignalDeferred = window.OneSignalDeferred || [];
  OneSignalDeferred.push(async function(OneSignal) {
    await OneSignal.init({
      appId: "ONESIGNAL_APP_ID",
    });
  });
  ```
</CodeGroup>

<Warning>
  Init seçenekleri yalnızca [Özel Kod Kurulumu](./web-push-custom-code-setup) ile çalışır. Aksi takdirde, bunlar OneSignal kontrol panelinde yapılandırılır.
</Warning>

|             Parametre            |   Tür   | Açıklama                                                                                                                                                                               |
| :------------------------------: | :-----: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|              `appId`             |  String | **Gerekli:** [Anahtarlar ve ID'ler](./keys-and-ids)'de bulunan OneSignal Uygulama ID'niz.                                                                                              |
|   `requiresUserPrivacyConsent`   | Boolean | Kullanıcı gizlilik onayı sağlayana kadar SDK başlatmayı geciktirir. Kurulumu tamamlamak için [`setConsentGiven()`](#setconsentgiven) çağrılmalıdır.                                    |
|          `safari_web_id`         |  String | Yüklenen Safari `.p12` sertifikanız için Safari Web ID'si. [Web Hızlı Başlangıç](./web-push-setup).                                                                                    |
|          `promptOptions`         |  Object | İzin istemlerini özelleştirin. [Aşağıdaki detaylar](#promptoptions-parameters).                                                                                                        |
|          `notifyButton`          |  Object | Abonelik Zilini etkinleştirin ve yapılandırın. [Aşağıdaki detaylar](#notifybutton-parameters).                                                                                         |
|       `welcomeNotification`      |  Object | Hoş geldin bildirimini özelleştirin veya devre dışı bırakın. [Aşağıdaki detaylar](#welcomenotification-parameters).                                                                    |
|       `persistNotification`      | Boolean | Chrome (yalnızca masaüstü) - `true`: bildirim tıklanana kadar kalır, `false`: kısa süre sonra kaybolur. Firefox/Safari bu ayarı yok sayar.                                             |
|            `webhooks`            |  Object | Olay callback'lerini yapılandırın. [Webhook'lara Bakın](./webhooks).                                                                                                                   |
|         `autoResubscribe`        | Boolean | **Önerilir:** Tarayıcı önbelleğini temizleyen veya OneSignal'e geçiş yapan kullanıcıları otomatik olarak yeniden abone eder. Kodda kullanılırsa kontrol paneli ayarını geçersiz kılar. |
|  `notificationClickHandlerMatch` |  String | `"exact"` (varsayılan): tam URL eşleşmesi olan sekmeye odaklanır. `"origin"`: aynı alan adına sahip herhangi bir sekmeye odaklanır.                                                    |
| `notificationClickHandlerAction` |  String | `"navigate"` (varsayılan): `launchURL`'ye gider. `"focus"`: mevcut sekmeye odaklanır (yalnızca `"origin"` eşleşmesi ile kullanılır).                                                   |
|       `serviceWorkerParam`       |  Object | Service worker'ın `scope`'unu ayarlayın. Uygulanabilirse diğer service worker'ın scope'undan farklı olmalıdır. Örnek:<br />`{ scope: "/myPath/myCustomScope/" }`                       |
|        `serviceWorkerPath`       |  String | OneSignal service worker dosyasının konumunu ayarlayın. Örnek:<br />`"myPath/OneSignalSDKWorker.js"`                                                                                   |

***

#### `promptOptions` parametreleri

Kullanıcı izin istemlerini yerelleştirmek veya özelleştirmek için `promptOptions` kullanın. Tüm alanlar isteğe bağlıdır.

|   Parametre  |        Tür       | Açıklama                                                                                                                                                                                                                                                                                                                                            |
| :----------: | :--------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|  `slidedown` |      Object      | Yapılandırma seçenekleriyle `prompts` dizisi içerir.                                                                                                                                                                                                                                                                                                |
|   `prompts`  | Array of Objects | İstem yapılandırmaları dizisi. Örnek:<br />`"slidedown": { "prompts": [{...}, {...}] }`                                                                                                                                                                                                                                                             |
|    `type`    |      String      | İstem türleri:<br /><ul><li>`push` – Slide İstemi (kategori yok)</li><li>`category` – 10'a kadar kategoriyle Slide İstemi</li><li>`email` – Yalnızca e-posta toplama</li><li>`sms` – Yalnızca telefon numarası toplama</li><li>`smsAndEmail` – Her ikisini de toplama</li></ul>[Web İzin İstemleri](./permission-requests)'ne bakın.                |
| `autoPrompt` |      Boolean     | <ul><li>`true`: `delay`'e göre göster.</li><li>`false`: istem yalnızca Slidedown API aracılığıyla manuel olarak gösterilir.</li></ul>                                                                                                                                                                                                               |
|    `delay`   |      Object      | Otomatik istemin ne zaman gösterileceğini kontrol eder:<br />`{ pageViews: 3, timeDelay: 20 }` = 3. sayfa görüntüleme ve 20s bekleme sonrası göster.                                                                                                                                                                                                |
|    `text`    |      Object      | Özel metin seçenekleri:<br /><ul><li>`actionMessage` (maks 90 karakter)</li><li>`acceptButton` (maks 15)</li><li>`cancelButton` (maks 15)</li><li>`emailLabel`, `smsLabel`, `confirmMessage`</li><li>`updateMessage`, `positiveUpdateButton`, `negativeUpdateButton` (kategorileri veya iletişim bilgilerini güncellemek için kullanılır)</li></ul> |
| `categories` | Array of Objects | Yalnızca `type: category` için. Her nesne şunları içerir:<br />`tag`: dahili anahtar<br />`label`: kullanıcı tarafından görülebilir ad<br />Örnek: `[ {tag: "local_news", label: "Local News"} ]`. [Veri Etiketleri](./add-user-data-tags)'ne bakın.                                                                                                |

***

#### `notifyButton` parametreleri

Sayfada gösterilen Abonelik Zili'ni (bildirim düğmesi) yapılandırın.

|      Parametre     |    Tür   | Açıklama                                                                                                                          |
| :----------------: | :------: | --------------------------------------------------------------------------------------------------------------------------------- |
|      `enable`      |  Boolean | Abonelik Zili'ni etkinleştirir. Varsayılan olarak devre dışı.                                                                     |
| `displayPredicate` | Function | Zili göstermek/gizlemek için `true` veya `false` döndüren özel fonksiyon (veya Promise). Gösterildiğinde bir kez değerlendirilir. |
|       `size`       |  String  | `'small'`, `'medium'` veya `'large'`. Abonelikten sonra `'small'`'a küçülür.                                                      |
|     `position`     |  String  | `'bottom-left'` veya `'bottom-right'`.                                                                                            |
|      `offset`      |  Object  | CSS piksel ofsetleri: `{ bottom: '50px', left: '10px' }`                                                                          |
|     `prenotify`    |  Boolean | `true` ise, "1 okunmamış" ikonu ve özel hover metni gösterir.                                                                     |
|    `showCredit`    |  Boolean | Popup'ta "Powered by OneSignal"'i gizlemek için `false` olarak ayarlayın.                                                         |
|       `text`       |  Object  | Zil UI'ı için özel metin.                                                                                                         |

***

#### `welcomeNotification` parametreleri

İlk kez abonelikten sonra gönderilen hoş geldin bildirimini özelleştirin.

| Parametre |   Tür   | Açıklama                                                                                              |
| :-------: | :-----: | ----------------------------------------------------------------------------------------------------- |
| `disable` | Boolean | Hoş geldin bildirimini devre dışı bırak.                                                              |
| `message` |  String | **Gerekli:** Bildirim mesajı. Boşsa varsayılan olarak `'Thanks for subscribing!'` olur.               |
|  `title`  |  String | Bildirim başlığı. Varsayılan olarak site başlığı. Kaldırmak için `' '` (boşluk) kullanın (önerilmez). |
|   `url`   |   URL   | Kullanıcı bildirime tıkladığında açılacak isteğe bağlı URL. Genellikle gerekli değildir.              |

***

**Örnek**:

<CodeGroup>
  ```javascript Özel Kod Kurulumu için örnek init theme={null}
  <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
  <script>
  window.OneSignalDeferred = window.OneSignalDeferred || [];
  OneSignalDeferred.push(async function(OneSignal) {
    await OneSignal.init({
      appId: "YOUR_APP_ID",
      safari_web_id: "YOUR_SAFARI_WEB_ID",
      notifyButton: {
        enable: true,
      },
      promptOptions: {
        slidedown: {
          prompts: [{
              type: "smsAndEmail",
              autoPrompt: false,
              text: {
                emailLabel: "Insert Email Address",
                smsLabel: "Insert Phone Number",
                acceptButton: "Submit",
                cancelButton: "No Thanks",
                actionMessage: "Receive the latest news, updates and offers as they happen.",
                updateMessage: "Update your push notification subscription preferences.",
                confirmMessage: "Thank You!",
                positiveUpdateButton: "Save Preferences",
                negativeUpdateButton: "Cancel",
              },
              delay: {
                pageViews: 1,
                timeDelay: 20
              },
            },
            {
              type: "category",
              autoPrompt: true,
              text: {
                actionMessage: "We'd like to show you notifications for the latest news and updates.",
                acceptButton: "Allow",
                cancelButton: "Cancel",

                /* CATEGORY SLIDEDOWN SPECIFIC TEXT */
                negativeUpdateButton: "Cancel",
                positiveUpdateButton: "Save Preferences",
                updateMessage: "Update your push notification subscription preferences.",
              },
              delay: {
                pageViews: 3,
                timeDelay: 20
              },
              categories: [{
                  tag: "politics",
                  label: "Politics"
                },
                {
                  tag: "local_news",
                  label: "Local News"
                },
                {
                  tag: "world_news",
                  label: "World News",
                },
                {
                  tag: "culture",
                  label: "Culture"
                },
              ]
            }
          ]
        }
      }
    });
  });
  </script>
  ```
</CodeGroup>

### `setLogLevel()`

Konsola ek loglar yazdırmak için loglama ayarlayın. Daha fazla ayrıntı için [Tarayıcı DevTools ile Hata Ayıklama](./troubleshooting-web-push#debugging-using-browser-developer-tools)'ya bakın.

```javascript JavaScript theme={null}
  OneSignal.Debug.setLogLevel('trace');
```

**Log seviyeleri**:

* `'trace'`
* `'debug'`
* `'info'`
* `'warn'`
* `'error'`

***

## Kullanıcı kimliği ve özellikleri

Kullanıcılarınız web sitenizde push bildirimlerine abone olduğunda, OneSignal otomatik olarak bir OneSignal ID (kullanıcı düzeyinde) ve bir Abonelik ID (cihaz düzeyinde) oluşturur. Benzersiz kullanıcı tanımlayıcınızla `login()` çağrısı yaparak birden fazla aboneliği (örneğin, cihazlar, e-postalar, telefon numaraları) tek bir kullanıcıyla ilişkilendirebilirsiniz.

<Note>
  Daha fazla ayrıntı için [Kullanıcılar](./users) ve [Takma Adlar](./aliases)'a bakın.
</Note>

### `login(external_id)`

Kullanıcı bağlamını sağlanan `external_id`'ye ayarlar. Bu `external_id` ile ilişkili tüm Aboneliklerin ve özelliklerin tek bir `onesignal_id` altında birleştirilmesini sağlar. Daha fazla ayrıntı için [Kullanıcılar](./users)'a bakın.

**Temel davranışlar:**

* `external_id` zaten varsa, SDK o kullanıcıya geçer. Giriş öncesi toplanan anonim veriler birleştirilmez ve atılır.
* `external_id` yoksa, yerel durum mevcut `onesignal_id` altında kaydedilir. Kullanıcı anonimken toplanan tüm veriler saklanır.
* SDK, ağ hatası veya sunucu hatası durumunda otomatik olarak yeniden dener.

<Note> [External ID](./users#external-id)'nin ayarlandığından ve aboneliğin kullanıcıya bağlandığından emin olmak için bu yöntemi kullanıcı siteyi her açtığında veya [Abonelik değişikliği dinleyicisi](#addeventlistener-push-subscription-changes) içinde çağırın. </Note>

<CodeGroup>
  ```javascript JavaScript theme={null}
  OneSignalDeferred.push(async function(OneSignal) {
     await OneSignal.login("external_id");
  });
  ```

  ```javascript Abonelik Değişikliği ile Giriş theme={null}
  //Push abonelik değişiklik olayıyla birleştirme örneği
  function pushSubscriptionChangeListener(event) {
    if (event.current.token) {
      console.log(`Push aboneliği bir token aldı!`);
      //burası OneSignal.login çağırmak ve kullanıcı ID'nizi geçirmek için iyi bir yer
      OneSignal.login("external_id");
    }
  }
  OneSignalDeferred.push(function(OneSignal) {
    OneSignal.User.PushSubscription.addEventListener("change", pushSubscriptionChangeListener);
  });
  ```
</CodeGroup>

### `logout()`

Mevcut kullanıcıyı abonelikten ayırır.

* Mevcut push aboneliğinden `external_id`'yi kaldırır.
* OneSignal ID'yi yeni bir anonim kullanıcıya sıfırlar.
* Yeni veriler (örneğin etiketler, Abonelikler, oturum verileri vb.) artık `login` yöntemiyle tanımlanana kadar yeni anonim kullanıcı üzerinde ayarlanır.

<Note>Aboneliği yeni bir anonim kullanıcıya ayarlamak istiyorsanız, kullanıcı uygulamanızdan çıkış yaptığında bunu kullanın. </Note>

```javascript JavaScript theme={null}
  OneSignalDeferred.push(async function(OneSignal) {
     await OneSignal.logout();
  });
```

### `OneSignal.User.onesignalId`

Tarayıcıda yerel olarak kaydedilen mevcut kullanıcının OneSignal ID'sini alın. Kullanıcı durumu başlatılmadan önce çağrılırsa `null` olabilir. Bunun yerine, kullanıcı durumu değişikliklerini dinlemek için [Kullanıcı Durumu `addObserver()`](#addeventlistener-user-state) kullanın.

```javascript JavaScript theme={null}
  OneSignal.User.onesignalId
```

### `OneSignal.User.externalId`

Tarayıcıda yerel olarak kaydedilen mevcut kullanıcının External ID'sini alın. `login` yöntemi aracılığıyla ayarlanmamışsa veya kullanıcı durumu başlatılmadan önce çağrılırsa `null` olabilir. Bunun yerine, kullanıcı durumu değişikliklerini dinlemek için [Kullanıcı Durumu `addObserver()`](#addeventlistener-user-state) kullanın.

```javascript JavaScript theme={null}
  OneSignal.User.externalId
```

### `addEventListener()` *Kullanıcı Durumu*

Kullanıcı bağlamındaki değişiklikleri dinleyin (örneğin, giriş, çıkış, ID atama).

```javascript JavaScript theme={null}
  OneSignalDeferred.push(function() {
    OneSignal.User.addEventListener('change', function (event) {
      console.log('change', { event });
    });
  });
```

### `addAlias()`, `addAliases()`, `removeAlias()`, `removeAliases()`

Takma adlar alternatif tanımlayıcılardır (kullanıcı adları veya CRM ID'leri gibi).

* Takma ad eklemeden önce `login()` ile `external_id` ayarlayın. `external_id` olmadan aboneliklere eklenen takma adlar birden fazla abonelik arasında senkronize olmaz.
* Ayrıntılar için [Takma Adlar](./aliases)'a bakın.

```javascript JavaScript theme={null}
  // Tek bir takma ad ekle
  OneSignal.User.addAlias("ALIAS_LABEL", "ALIAS_ID");

  // Birden fazla takma ad ekle
  OneSignal.User.addAliases({
    ALIAS_LABEL_01: "ALIAS_ID_01",
    ALIAS_LABEL_02: "ALIAS_ID_02",
    ALIAS_LABEL_03: "ALIAS_ID_03",
  });

  // Tek bir takma adı kaldır
  OneSignal.User.removeAlias("ALIAS_LABEL");

  // Birden fazla takma adı kaldır
  OneSignal.User.removeAliases(["ALIAS_LABEL_01", "ALIAS_LABEL_02", "ALIAS_LABEL_03"]);
```

### `getLanguage()`, `setLanguage()`

Kullanıcının otomatik algılanan dilini alın ve/veya geçersiz kılın. Mevcut dil kodlarının listesi için [Çok dilli mesajlaşma](./multi-language-messaging)'ya bakın.

```javascript JavaScript theme={null}
  // Şu anda giriş yapmış kullanıcının dilini al
  OneSignal.User.getLanguage()

  // Şu anda giriş yapmış kullanıcının dilini ayarla
  OneSignal.User.setLanguage('en')
```

***

## Özel olaylar

[Özel olay](./custom-events) aracılığıyla [Yolculukları Tetikleme](./journeys-settings#custom-events) ve [Wait Until adım aktivasyonu](./journeys-actions#wait-until).

<Note>
  Özel olaylar Web SDK `160500`+ gerektirir

  Özel olayların izlenmesi için bir kullanıcının giriş yapmış olması gerekir.
</Note>

Mevcut kullanıcı tarafından gerçekleştirilen özel bir olayı izleyin ve gönderin.

* `name` - **Gerekli.** Dize olarak olayın adı.
* `properties` - **İsteğe bağlı.** Olaya eklenecek anahtar-değer çiftleri. Properties sözlüğü veya haritası geçerli bir JSON Nesnesine serileştirilebilir olmalıdır. İç içe değerleri destekler.

SDK, tüketilmek üzere mevcut olacak ayrılmış `os_sdk` anahtarı altında uygulamaya özel verileri otomatik olarak properties yüküne ekler. Örneğin, olayları abonelik türüne göre hedeflemek için `os_sdk.type`'a erişirsiniz.

```json json theme={null}
{ 
  "os_sdk": {
    "device_os": "138",
    "type": "ChromePush",
    "device_model": "MacIntel",
    "sdk": "160500"
  }
}
```

### `trackEvent()`

```javascript JavaScript theme={null}
const properties = {
  "promo_code": "NEW50",
  "membership_details": {
     "vip": true,
     "products_viewed_count": 15,
  }
}
window.OneSignal.User.trackEvent('started_free_trial', properties);

// İlişkilendirilmiş ek özellikler olmadan bir olayı ada göre de izleyebilirsiniz
window.OneSignal.User.trackEvent('my_event_name');
```

***

## Veri etiketleri

Etiketler, olaylara veya kullanıcı özelliklerine göre kullanıcılar üzerinde ayarladığınız özel `key : value` dize verisi çiftleridir. Daha fazla ayrıntı için [Veri Etiketleri](./add-user-data-tags)'ne bakın.

### `addTag()`, `addTags()`

Mevcut kullanıcıya tek veya birden fazla etiket ayarlayın.

* Anahtar zaten varsa değerler değiştirilir.
* Planınızın etiket limitini aşmak, işlemlerin sessizce başarısız olmasına neden olur.

```javascript JavaScript theme={null}
  // Tek bir etiket ekle
  OneSignal.User.addTag('tag_key', 'tag_value');

  // Birden fazla etiket ekle
  OneSignal.User.addTags({
   KEY_01: "VALUE_01",
   KEY_02: "VALUE_02",
   KEY_03: "VALUE_03"
  });
```

### `removeTag()`, `removeTags()`

Mevcut kullanıcıdan tek veya birden fazla etiketi silin.

```javascript JavaScript theme={null}
  // Tek bir etiketi sil
  OneSignal.User.removeTag("KEY");

  OneSignal.User.removeTags(['KEY_01', 'KEY_02', 'KEY_03']);
```

### `getTags()`

Kullanıcının etiketlerinin yerel kopyasını döndürür. Etiketler, `login()` veya yeni uygulama oturumları sırasında sunucudan güncellenir.

```javascript JavaScript theme={null}
  const tags = OneSignal.User.getTags()
```

***

## Gizlilik

### `setConsentRequired()`

Veri toplama başlamadan önce kullanıcı onayını zorunlu kılar. **SDK'yı başlatmadan önce** çağrılmalıdır.

Bu yöntem, `init` yöntemine `requiresUserPrivacyConsent: true` eklemeyle aynıdır.

```javascript JavaScript theme={null}
  OneSignal.setConsentRequired(true);
```

### `setConsentGiven()`

Veri toplama için kullanıcı onayını verir veya geri alır. Onay olmadan, OneSignal'e hiçbir veri gönderilmez ve hiçbir abonelik oluşturulmaz.

* [`setConsentRequired()`](#setconsentrequired) veya `requiresUserPrivacyConsent` `true` olarak ayarlanırsa, SDK'mız `setConsentGiven` `true` ile çağrılana kadar tamamen etkinleştirilmez.
* `setConsentGiven` `true` olarak ayarlanır ve bir Abonelik oluşturulursa, daha sonra `false` olarak ayarlanırsa, o Abonelik artık güncelleme almaz. O Abonelik için mevcut veriler, `setConsentGiven` tekrar `true` olarak ayarlanana kadar değişmeden kalır.
* Kullanıcı ve/veya Abonelik verilerini silmek istiyorsanız, [Kullanıcıyı sil](/reference/delete-user) veya [Aboneliği sil](/reference/delete-subscription) API'lerimizi kullanın.

```javascript JavaScript theme={null}
  OneSignal.setConsentGiven(true);
```

***

## Abonelikler

Daha fazla ayrıntı için [Abonelikler](./subscriptions)'e bakın.

### `User.PushSubscription.id`

Tarayıcıda yerel olarak kaydedilen mevcut kullanıcının push Abonelik ID'sini alın. Çok erken çağrılırsa `null` döndürebilir. Değişikliklere tepki vermek için bu veriyi [abonelik gözlemleyicisi](#addeventlistener-push-subscription-changes) içinde almanız önerilir.

```javascript JavaScript theme={null}
  OneSignal.User.PushSubscription.id;
```

### `User.PushSubscription.token`

Mevcut push abonelik tokenını döndürür. Çok erken çağrılırsa `null` döndürebilir. Değişikliklere tepki vermek için bu veriyi [abonelik gözlemleyicisi](#addeventlistener-push-subscription-changes) içinde almanız önerilir.

```javascript JavaScript theme={null}
  OneSignal.User.PushSubscription.token;
```

### `addEventListener()` *push abonelik değişiklikleri*

Bu yöntemi şunlar gibi push abonelik değişikliklerine yanıt vermek için kullanın:

* Cihaz Google (FCM) veya Apple (APNs)'tan yeni bir push token alır
* OneSignal bir abonelik ID'si atar
* `optedIn` değeri değişir (örneğin `optIn()` veya `optOut()` çağrıldı)
* Kullanıcı sistem ayarlarında push iznini değiştirir, ardından uygulamayı açar

Bu olduğunda, SDK `onPushSubscriptionChange` olayını tetikler. Dinleyiciniz, tam olarak neyin değiştiğini algılayabilmeniz için `previous` ve `current` değerlerine sahip bir state nesnesi alır.

Güncellemeleri dinlemeyi durdurmak için ilişkili `removeObserver()` veya `removeEventListener()` yöntemini çağırın.

```javascript JavaScript theme={null}
  function pushSubscriptionChangeListener(event) {
    console.log("event.previous.id", event.previous.id);
    console.log("event.current.id", event.current.id);
    console.log("event.previous.token", event.previous.token);
    console.log("event.current.token", event.current.token);
    console.log("event.previous.optedIn", event.previous.optedIn);
    console.log("event.current.optedIn", event.current.optedIn);
  }

  OneSignalDeferred.push(function(OneSignal) {
    OneSignal.User.PushSubscription.addEventListener("change", pushSubscriptionChangeListener);
  });
```

### `optOut()`, `optIn()`, `optedIn`

Mevcut push Aboneliğinin abonelik durumunu (`subscribed` veya `unsubscribed`) kontrol edin. Sitenizde push abonelik durumunu kontrol etmek için bu yöntemleri kullanın. Yaygın kullanım senaryoları: 1) Çıkış yapan kullanıcılara push gönderilmesini engelleyin. 2) Sitenizde bir bildirim tercih merkezi uygulayın.

* `optOut()`: Mevcut push abonelik durumunu abonelikten çıkarılmış olarak ayarlar (kullanıcının geçerli bir push token'ı olsa bile).
* `optIn()`: Üç eylemden birini yapar:
  1. Aboneliğin geçerli bir push token'ı varsa, mevcut push abonelik durumunu `subscribed` olarak ayarlar.
  2. Aboneliğin geçerli bir push token'ı yoksa, push izin istemini görüntülemeye çalışır.
* `optedIn`: Mevcut push abonelik durumu abone ise `true`, aksi takdirde `false` döndürür. Push token geçerliyse ancak `optOut()` çağrıldıysa, bu `false` döndürür.

```javascript JavaScript theme={null}
  OneSignal.User.PushSubscription.optOut();

  OneSignal.User.PushSubscription.optIn();

  var optedIn = OneSignal.User.PushSubscription.optedIn;
```

### `addEmail()`, `removeEmail()`

Mevcut kullanıcıya/kullanıcıdan bir e-posta Aboneliği (e-posta adresi) ekler veya kaldırır. Doğru kullanıcı bağlamını ayarlamak için `login()`'den sonra `addEmail` çağırın. [Kimlik Doğrulama](./identity-verification) ile uyumludur.

```javascript JavaScript theme={null}
  OneSignal.User.addEmail("example@email.com");

  OneSignal.User.removeEmail("example@email.com");
```

### `addSms()`, `removeSms()`

Mevcut kullanıcıya/kullanıcıdan bir SMS Aboneliği (telefon numarası) ekler veya kaldırır. [E.164 formatı](https://www.twilio.com/docs/glossary/what-e164) gerektirir. Doğru kullanıcı bağlamını ayarlamak için `login()`'den sonra `addSms` çağırın. [Kimlik Doğrulama](./identity-verification) ile uyumludur.

```javascript JavaScript theme={null}
  OneSignal.User.addSms("+15558675309");

  OneSignal.User.removeSms("+15558675309");
```

***

## Slidedown istemleri

Sitelerinizde çeşitli slidedown istemleri görüntüleyin. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests)'ne bakın.

* Reddedilirse, gelecekteki çağrılar en az üç gün boyunca yok sayılır. Daha fazla reddetme, kullanıcıya tekrar sorulmadan önce geçmesi gereken süreyi uzatır.
* Geri çekilme davranışını geçersiz kılmak için yönteme `{force: true}` geçirin. Ancak, iyi bir kullanıcı deneyimi sağlamak için eylemi düğme tıklaması gibi UI başlatımlı bir olaya bağlayın.

<Warning>
  Bu, abonelik için gerekli Yerel Tarayıcı İsteminin yerini almaz. Yerel tarayıcı istemini kullanarak izinleri almanız gerekir.
</Warning>

### `promptPush()`

Push bildirimleri için normal slidedown istemini görüntüler.

* Kategoriler kullanıyorsanız, bunun yerine [`promptPushCategories()`](#promptpushcategories) çağırın.
* OneSignal tarafından ayarlanan geri çekilme mantığına tabidir. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests#auto-prompt-%26-display-settings)'ne bakın.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptPush();
  // Test sırasında geri çekilme mantığını atlamak için {force: true} geçirin
  //OneSignal.Slidedown.promptPush({force: true});
```

### `promptPushCategories()`

Kategori slidedown istemini görüntüler, kullanıcıların etiketlerini güncellemelerine izin verir. Kullanıcı henüz izin vermediyse yerel bildirim izin istemini de tetikler.

* Kategoriler kullanmıyorsanız, bunun yerine [`promptPush()`](#promptpush) çağırın.
* OneSignal tarafından ayarlanan geri çekilme mantığına tabidir. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests#auto-prompt-%26-display-settings)'ne bakın.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptPushCategories();
  // Test sırasında geri çekilme mantığını atlamak için {force: true} geçirin
  //OneSignal.Slidedown.promptPushCategories({force: true});
```

### `promptSms()`

SMS abonelik istemini görüntüler.

* OneSignal tarafından ayarlanan geri çekilme mantığına tabidir. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests#auto-prompt-%26-display-settings)'ne bakın.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptSms();
  // Test sırasında geri çekilme mantığını atlamak için {force: true} geçirin
  //OneSignal.Slidedown.promptSms({force: true});
```

### `promptEmail()`

E-posta abonelik istemini görüntüler.

* OneSignal tarafından ayarlanan geri çekilme mantığına tabidir. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests#auto-prompt-%26-display-settings)'ne bakın.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptEmail();
  // Test sırasında geri çekilme mantığını atlamak için {force: true} geçirin
  //OneSignal.Slidedown.promptEmail({force: true});
```

### `promptSmsAndEmail()`

SMS ve e-posta abonelik istemlerini aynı anda görüntüler.

* OneSignal tarafından ayarlanan geri çekilme mantığına tabidir. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests#auto-prompt-%26-display-settings)'ne bakın.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptSmsAndEmail();
  // Test sırasında geri çekilme mantığını atlamak için {force: true} geçirin
  //OneSignal.Slidedown.promptSmsAndEmail({force: true});
```

### `addEventListener()` *Slidedown*

Slidedown istem gösterildi olayını algılamak için bir callback ekleyin.

```javascript JavaScript theme={null}
  OneSignalDeferred.push(function(OneSignal) {

    OneSignal.Slidedown.addEventListener('slidedownShown', function (event) {
      console.log('slidedownShown', { event });
    });

  });
```

***

## Push bildirimleri

### `requestPermission()`

Yerel tarayıcı istemi aracılığıyla push bildirimleri izni ister. Tarayıcı tarafından ayarlanan geri çekilme mantığına tabidir. Daha fazla ayrıntı için [Web izin istemleri](./permission-requests#native-permission-prompt)'ne bakın.

```javascript JavaScript theme={null}
  OneSignal.Notifications.requestPermission();
```

### `isPushSupported()`

Mevcut tarayıcı web push'u destekliyorsa `true` döndürür.

```javascript JavaScript theme={null}
  const isSupported = OneSignal.Notifications.isPushSupported();
```

### `OneSignal.Notifications.permission`

Sitenin bildirimleri görüntüleme için mevcut iznini gösteren bir boolean döndürür.

* `true`: Kullanıcı bildirimleri görüntüleme iznini vermiştir.
* `false`: Kullanıcı bildirimleri görüntüleme iznini reddetmiş veya henüz vermemiştir.

Bu sadece sitenin iznidir, OneSignal'in `optOut` durumunu veya Abonelik ID ve Push Token varlığını hesaba katmaz, bunlar için `OneSignal.User.PushSubscription`'a bakın.

İzindeki değişiklikleri dinlemek için [`permissionChange`](#permissionchange) olayını kullanın.

```javascript JavaScript theme={null}
  let permission = OneSignal.Notifications.permission;
```

### `addEventListener()` *bildirimler*

Bir bildirim olayına olay işleyicilerinizi ekleyerek bildirim yaşam döngüsüne bağlanabilirsiniz. `addEventListener` çağrısı, bildirim olayları için rastgele sayıda olay işleyicisi eklemenizi sağlar.

Olayları dinlemeyi durdurmak için ilişkili `removeEventListener()` yöntemini çağırın.

```javascript JavaScript theme={null}
  function eventListener(event) {
    console.log(`${event}`);
  }

  OneSignal.Notifications.addEventListener("event", eventListener);

  OneSignal.Notifications.removeEventListener("event", eventListener);
```

#### `permissionChange`

Bu olay, kullanıcı İzin Ver veya Engelle'ye tıkladığında veya tarayıcının yerel izin isteğini kapattığında gerçekleşir.

```javascript JavaScript theme={null}
  function permissionChangeListener(permission) {
    if (permission) {
      console.log(`izin kabul edildi!`);
    }
  }

  OneSignal.Notifications.addEventListener("permissionChange", permissionChangeListener);
```

#### `permissionPromptDisplay`

Bu olay, tarayıcının yerel izin isteği gösterildiğinde gerçekleşir.

```javascript JavaScript theme={null}
  function promptListener() {
    console.log(`izin istemi görüntülendi olayı: ${event}`);
  }

  OneSignal.Notifications.addEventListener("permissionPromptDisplay", promptListener);
```

#### `click`

Bu olay, bildirimin gövdesi/başlığı veya eylem düğmeleri tıklandığında tetiklenir.

```javascript JavaScript theme={null}
  function clickEventListener(event) {
    console.log(`tıklama olayı: ${event}`);
  }

  OneSignal.Notifications.addEventListener("click", clickEventListener);
```

#### `foregroundWillDisplay`

Bu olay, bir bildirim görüntülenmeden önce gerçekleşir. Bu olay sayfanızda tetiklenir. Sitenizde birden fazla tarayıcı sekmesi açıksa, bu olay OneSignal'in aktif olduğu *tüm* sayfalarda tetiklenir.

```javascript JavaScript theme={null}
  function foregroundWillDisplayListener(event) {
    console.log(`bildirim görüntülenecek: ${notification}`);
  }

  OneSignal.Notifications.addEventListener("foregroundWillDisplay", foregroundWillDisplayListener);
```

#### `dismiss`

Bu olay şu durumlarda gerçekleşir:

* Bir kullanıcı bildirim gövdesine veya eylem düğmelerine tıklamadan bildirimi kasıtlı olarak kapatır
* Android'de Chrome'da, bir kullanıcı tüm web push bildirimlerini kapatır (bu olay gösterdiğimiz her web push bildirimi için tetiklenir)
* Bir bildirim kendi kendine sona erer ve kaybolur

<Info>
  Bu olay, bir kullanıcı bildirim gövdesine veya eylem düğmelerinden birine tıklarsa *gerçekleşmez*. Bu bir bildirim `click` olayı olarak kabul edilir.
</Info>

```javascript JavaScript theme={null}
  function notificationDismissedListener(event) {
    console.log(`kapatma olayı: ${event}`);
  }

  OneSignal.Notifications.addEventListener("dismiss", notificationDismissedListener);
```

### `setDefaultUrl()`

Bildirimler için varsayılan URL'yi ayarlar.

Varsayılan bir URL ayarlamadıysanız, bildiriminiz varsayılan olarak sitenizin kök dizinine açılır.

```javascript JavaScript theme={null}
  OneSignal.Notifications.setDefaultUrl("https://onesignal.com");
```

Bildirimler için varsayılan URL'yi ayarlamak için, bildirime tıklandığında başlatılmasını istediğiniz geçerli bir URL sağlayın. Bu varsayılan URL, bir bildirim oluştururken başka bir URL belirtilmemişse kullanılır. Bir bildirim oluştururken bir URL belirtirseniz, varsayılan URL geçersiz kılınır.

Safari durumunda, varsayılan bildirim ikonu URL'si Safari ayarlarınızda belirttiğiniz Site URL'sine ayarlanır, çünkü bu işlev mevcut değildir.

### `setDefaultTitle()`

Bildirimlerde görüntülenecek varsayılan başlığı ayarlar.

```javascript JavaScript theme={null}
  OneSignal.Notifications.setDefaultTitle("Powered by OneSignal!");
```

Bir başlıkla bir bildirim oluşturulursa, belirtilen başlık her zaman bu varsayılan başlığı geçersiz kılar.

Bir bildirimin başlığı varsayılan olarak kullanıcının en son ziyaret ettiği sayfanın başlığıdır. Sayfa başlıklarınız sayfalar arasında değişiyorsa, bu tutarsızlık istenmeyen olabilir. Bir bildirim başlığı belirtilmediği sürece, bildirimler genelinde sayfa başlıklarını standartlaştırmak için bunu çağırın.

***

## Sonuçlar

### `sendOutcome()`

OneSignal kontrol panelinde görüntülenebilecek bir sonucu tetikler. Bir sonuç adı (`string`, gerekli) ve bir değer (`number`, isteğe bağlı) kabul eder. `sendOutcome` yöntemi aynı sonuç adıyla her çağrıldığında, sonuç sayısı artacak ve sonuç değeri geçilen miktarla artacaktır (dahil edilmişse). Daha fazla ayrıntı için [Özel Sonuçlar](./custom-outcomes)'a bakın.

```javascript JavaScript theme={null}
  OneSignal.Session.sendOutcome('outcome name', 19.84);
```

### `sendUniqueOutcome()`

OneSignal kontrol panelinde görüntülenebilecek bir sonucu tetikler. Yalnızca sonuç adını (`string`, gerekli) kabul eder. `sendUniqueOutcome`, o sonucun sayısını kullanıcı başına yalnızca bir kez artırır. Daha fazla ayrıntı için [Özel Sonuçlar](./custom-outcomes)'a bakın.

```javascript JavaScript theme={null}
  OneSignal.Session.sendUniqueOutcome('outcome name');
```

***
