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

# VoIP push bildirimleri

> PushKit token kaydı ve VoIP sertifikası kullanarak OneSignal ile iOS'ta VoIP push bildirimleri gönderin; arama tarzı davranış için Android alternatifleri de sunulmaktadır.

VoIP push bildirimleri, uygulamanızın arka planda veya sonlandırılmış olsa bile gelen arama uyarılarını almasını sağlar. Apple, VoIP pushlerini standart push bildirimlerinden farklı şekilde işler — bunlar ayrı bir sertifika türü, ayrı bir token (PushKit aracılığıyla) ve farklı teslimat kuralları kullanır.

OneSignal VoIP pushlerini **göndermeyi** destekler, ancak OneSignal SDK'sı VoIP token kaydını **gerçekleştirmez**. Şunlardan siz sorumlusunuz:

* Apple PushKit kullanarak uygulamanızda VoIP tokenlarını kaydetme
* VoIP Services Certificate ile ayrı bir OneSignal uygulaması oluşturma
* OneSignal REST API aracılığıyla tokenları kaydetme ve push gönderme

### Platform farkları

| Platform    | VoIP push destekleniyor mu? | Nasıl çalışır                                                           |
| ----------- | --------------------------- | ----------------------------------------------------------------------- |
| **iOS**     | Yes                         | Apple PushKit ve bir VoIP APNs sertifikası kullanır                     |
| **Android** | No                          | Arama tarzı davranışı simüle etmek için yalnızca veri pushleri kullanır |

Platformlar arası bir arama uygulaması oluşturuyorsanız, her platform için farklı yaklaşımlar kullanacaksınız.

***

## iOS: VoIP push bildirimleri gönderme

iOS'ta VoIP bildirimleri Apple PushKit kullanır ve standart push bildirimlerinden farklı özel teslimat kurallarına sahiptir. Apple VoIP pushlerini farklı şekilde ele aldığından, OneSignal'ın VoIP için ayrı bir uygulama yapılandırması gerekir.

<Warning>
  **Başlamadan önce** — en sık yapılan VoIP kurulum hataları şunlardır:

  1. **VoIP için ayrı bir OneSignal uygulaması oluşturmamak.** Apple VoIP için farklı bir sertifika türü gerektirdiğinden, OneSignal'ın VoIP pushlerini gönderebilmesi için ayrı bir uygulamaya ihtiyacı vardır. Mevcut push uygulamanız her ikisi için kullanılamaz.
  2. **Yanlış sertifika yüklemek.** Standart APNs push sertifikanız değil, bir **VoIP Services Certificate (.p12)** gerekir. Yanlış sertifika kullanılması sessiz teslimat hatalarına neden olur.
  3. **Sandbox'ta `test_type` alanını unutmak.** Geliştirme derlemesiyle test ederken, token kaydederken `"test_type": 1` eklemeniz gerekir. Bu alan olmadan API çağrısı başarılı olur ancak pushler hiçbir zaman ulaşmaz.
</Warning>

<Steps>
  <Step title="PushKit kullanarak bir VoIP token kaydetme">
    VoIP bildirimleri için kaydolmak ve bir VoIP token almak üzere Apple'ın PushKit framework'ünü kullanın.

    * Uygulamanızda PushKit'i uygulayın
    * Apple token'ı yenilerken VoIP tokenını saklayın ve güncelleyin
    * Apple'ın VoIP politikalarını yakından takip edin

    <Accordion title="Örnek: PushKit delegate uygulaması">
      ```swift theme={null}
      import PushKit

      class AppDelegate: NSObject, PKPushRegistryDelegate {
          func registerForVoIPPushes() {
              let registry = PKPushRegistry(queue: .main)
              registry.delegate = self
              registry.desiredPushTypes = [.voIP]
          }

          func pushRegistry(_ registry: PKPushRegistry, didUpdatePushCredentials credentials: PKPushCredentials, for type: PKPushType) {
              let token = credentials.token.map { String(format: "%02x", $0) }.joined()
              // Bu tokenı OneSignal'a iletin — bkz. Adım 4
          }
      }
      ```

      <Note>Bu standart Apple PushKit kodudur. OneSignal bir PushKit SDK'sı sunmaz — tokenı kendiniz kaydedip 4. Adımda OneSignal'a iletirsiniz.</Note>
    </Accordion>

    Apple kaynakları:

    * [PushKit belgeleri](https://developer.apple.com/documentation/pushkit)
    * [VoIP pushlerine yanıt verme](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit)
    * [Apple'ın VoIP en iyi uygulamaları](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html)
  </Step>

  <Step title="VoIP için ayrı bir OneSignal uygulaması oluşturma">
    Apple VoIP pushleri, standart push bildirimlerinden farklı bir sertifika türü gerektirir. Tek bir OneSignal uygulaması yalnızca bir sertifika türü kullanabildiğinden, **iki ayrı OneSignal uygulaması** oluşturmanız gerekir:

    * **Ana Push Uygulaması**: Standart push bildirimleri için APNs sertifikanızı kullanır
    * **VoIP Push Uygulaması**: Yalnızca VoIP bildirimleri için VoIP Services Certificate kullanır

    Her iki uygulama da aynı iOS bundle ID'sini kullanmalı ve aynı yerel iOS uygulamasıyla ilişkilendirilmelidir. OneSignal SDK'sını iki kez başlatmanıza **gerek yoktur** — VoIP uygulaması yalnızca API aracılığıyla VoIP pushlerini göndermek için sunucu tarafında kullanılır.

    <Note>Bundle ID (ör. `com.yourcompany.appname`), Xcode'da hedef uygulamanızın **General** sekmesinde bulunur.</Note>
  </Step>

  <Step title="VoIP Services Certificate yükleme">
    VoIP OneSignal uygulamanıza bir **VoIP Services Certificate (.p12)** yükleyin. Bu, normal bildirimler için kullandığınız standart APNs push sertifikasından farklı bir sertifika türüdür.

    Oluşturmak için:

    1. [Apple Developer Portal](https://developer.apple.com/account/resources/certificates/add) adresine gidin
    2. **VoIP Services Certificate** seçeneğini belirleyin
    3. Sertifikayı oluşturmak ve indirmek için yönergeleri izleyin
    4. Keychain Access'te açıp `.p12` dosyası olarak dışa aktarın
    5. `.p12` dosyasını VoIP OneSignal uygulamanızın iOS ayarlarına yükleyin

    <Warning>
      Standart APNs push sertifikanızı VoIP uygulamasına **yüklemeyin**. Yanlış sertifika türü kullanırsanız, API push isteğinizi kabul eder ancak Apple reddeder ve bildirim hiçbir zaman ulaşmaz.
    </Warning>

    <Frame caption="Keychain Access'te VoIP sertifikası">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=5d19f1262fdf67d5185ed8d8b4743493" alt="macOS Keychain Access'te gösterilen VoIP Services Certificate" width="1868" height="1624" data-path="images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png" />
    </Frame>

    <Frame caption="OneSignal kontrol panelinde yüklenen VoIP sertifikası">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=6ee92a10fc3473c644880fa7517eb46b" alt="OneSignal kontrol paneline yüklenen VoIP Services Certificate" width="466" height="130" data-path="images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png" />
    </Frame>
  </Step>

  <Step title="VoIP tokenını OneSignal'a kaydetme">
    VoIP tokenını VoIP OneSignal uygulamanıza kaydetmek için [Create User](/reference/create-user) API'sini kullanın.

    <Warning>
      **Sandbox/geliştirme derlemeleri `"test_type": 1` gerektirir.** Bu alanı atlarsanız, API çağrısı başarılı olur ve hata döndürmez, ancak Apple tokenı üretim olarak değerlendirir ve gönderilen her pushu sessizce reddeder.
    </Warning>

    ```curl theme={null}
    curl --request POST \
         --url https://api.onesignal.com/apps/YOUR_VOIP_APP_ID/users \
         --header 'accept: application/json' \
         --header 'content-type: application/json' \
         --data '
    {
      "subscriptions": [
        {
          "type": "iOSPush",
          "token": "YOUR_VOIP_TOKEN",
          "test_type": 1
        }
      ]
    }
    '
    ```

    <Note>Geçerli bir VoIP token, 64 karakterli küçük harfli bir onaltılık dizedir (ör. `a1b2c3d4e5f6...`). PushKit iOS Simülatör'de çalışmaz — geçerli bir token elde etmek için gerçek bir cihaz kullanmanız gerekir.</Note>

    Tokenı daha sonra güncellemek için [Update Subscription](/reference/update-subscription) API'sini kullanın.
  </Step>

  <Step title="VoIP bildirimleri gönderme">
    [Create Notification](/reference/create-message) API'sini aşağıdaki parametrelerle kullanın:

    * `"apns_push_type_override": "voip"` — Apple'a bunun bir VoIP pushu olduğunu bildirir
    * `app_id` — VoIP uygulama kimliğiniz
    * `include_subscription_ids` — kaydettiğiniz VoIP abonelik kimliği
    * `contents` veya `content_available` alanlarından biri zorunludur

    ```curl theme={null}
    curl --include \
         --request POST \
         --header "Content-Type: application/json; charset=utf-8" \
         --header "Authorization: key YOUR_REST_API_KEY" \
         --data-binary '{
      "app_id": "YOUR_VOIP_APP_ID",
      "content_available": true,
      "data": {
        "your_custom_data": "your_custom_value"
      },
      "apns_push_type_override": "voip",
      "include_subscription_ids": ["YOUR_VOIP_SUBSCRIPTION_ID"]
    }' \
    https://api.onesignal.com/notifications
    ```
  </Step>

  <Step title="VoIP kurulumunuzu doğrulama">
    iOS VoIP entegrasyonunuz şu durumlarda doğru çalışıyordur:

    1. VoIP token, **VoIP uygulamanızda** bir iOS push aboneliği olarak görünür
    2. Bir VoIP push, uygulamanızda [`pushRegistry(_:didReceiveIncomingPushWith:for:completion:)`](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit) metodunu tetikler
    3. Uygulama sonlandırılmış veya arka planda olsa bile uyanır
  </Step>
</Steps>

***

## Android: VoIP tarzı davranışı simüle etme

Android, VoIP push bildirimlerini desteklemez. Apple PushKit'e eşdeğer bir özellik yoktur.

Bunun yerine, Android arama uygulamaları şunları kullanarak VoIP davranışını simüle eder:

* Yalnızca veri push bildirimleri
* Ön plan servisleri
* Özel arama tarzı kullanıcı arayüzü

Bunu başarmak için OneSignal'ın normal Android push desteğini yerel Android API'leriyle birlikte kullanabilirsiniz.

**Önerilen yaklaşım:**

* Yalnızca veri bildirimleri gönderin
* Bunları uygulamanızda şu şekilde işleyin:
  * Bir ön plan servisi başlatın
  * Bir arama kullanıcı arayüzü aktivitesi başlatın
  * Özel bir gelen arama bildirimi görüntüleyin

Bildirim işlemeyi engellemek ve tam olarak kontrol etmek istiyorsanız, Android'in [Notification Service Extension](./service-extensions#notification-service-extension) özelliğini kullanın.

**Yararlı kaynaklar:**

* [Android arama uygulaması kılavuzu](https://developer.android.com/guide/topics/connectivity/telecom/selfManaged)
* [Gelen arama kullanıcı arayüzü örneği](https://medium.com/@dcostalloyd90/show-incoming-voip-call-notification-and-open-activity-for-android-os-10-5aada2d4c1e4)

<Info>Android kurulumu **OneSignal'a özgü değildir**. OneSignal yalnızca push yükünü iletir; uygulamanız arama davranışını işler.</Info>

***

## SSS

### Onaylanmış teslimatlar VoIP ile çalışır mı?

Hayır. [Confirmed Deliveries](./confirmed-delivery), VoIP pushlerinde **takip edilmez**. Onaylanmış Teslimatlar, VoIP bildirimleri için tetiklenmeyen Notification Service Extension'a dayanır.

Bunun yerine, alındı bilgisini yerel iOS PushKit olayı aracılığıyla takip edin:

```swift theme={null}
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
```

Bu olay, ana uygulama hedefinizin bir parçasıdır ve ayrı bir uzantı gerektirmez. Ayrıntılar için [Apple'ın VoIP belgelerine](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit#3377587) bakın.

### VoIP bildirimlerini OneSignal kontrol panelinden gönderebilir miyim?

Hayır. VoIP bildirimleri, `"apns_push_type_override": "voip"` parametresiyle [Create Notification](/reference/create-message) API'si aracılığıyla gönderilmelidir. Kontrol paneli bu parametreyi desteklemez.

### VoIP pushum neden sessizce başarısız oluyor?

VoIP pushleri, OneSignal API'sinden herhangi bir hata almadan başarısız olabilir. Bu kontrol listesini takip edin:

1. **Sandbox/geliştirme derlemesi mi kullanıyorsunuz?** Create User API'si aracılığıyla token kaydederken `"test_type": 1` eklemeniz gerekir. Bu alan olmadan token üretim olarak kaydedilir, Apple pushu reddeder ve sessizce başarısız olur.
2. **Doğru sertifikayı yüklediniz mi?** VoIP OneSignal uygulaması, standart bir APNs push sertifikası değil, **VoIP Services Certificate (.p12)** kullanmalıdır. Her ikisi de Keychain Access'te benzer görünür — sertifika adının "VoIP Services" ile başladığını doğrulayın.
3. **Doğru OneSignal uygulamasına mı gönderiyorsunuz?** Gönderme isteğinizdeki `app_id`, ana push uygulamanız değil **VoIP uygulamanız** olmalıdır. `REST API Key` de VoIP uygulamasından alınmış olmalıdır.
4. **VoIP token geçerli mi?** Tokenlar, uygulama yeniden yüklendiğinde veya cihaz sıfırlandığında sona erer. Token'ın 64 karakterli küçük harfli bir onaltılık dize olduğunu ve yakın zamanda kaydedildiğini doğrulayın.
5. **Uygulamanız `reportNewIncomingVoIPPushPayload` çağırıyor mu?** iOS 13'ten itibaren Apple, VoIP pushu alan ancak CallKit'e bir arama bildirmeyen uygulamaları **sonlandırır**. Bu bir Apple gereksinimi olup OneSignal'a özgü bir kısıtlama değildir.

***

## İlgili sayfalar

<Columns cols={2}>
  <Card title="Create message API" icon="code" href="/reference/create-message">
    REST API kullanarak push bildirimlerini programatik olarak gönderin.
  </Card>

  <Card title="Onaylanmış teslimatlar" icon="circle-check" href="./confirmed-delivery">
    Desteklenen platformlarda push bildirim teslimat onayını takip edin.
  </Card>

  <Card title="Servis uzantıları" icon="puzzle-piece" href="./service-extensions">
    Notification Service Extension ile bildirim işlemeyi özelleştirin.
  </Card>

  <Card title="Create User API" icon="user-plus" href="/reference/create-user">
    OneSignal API ile kullanıcıları ve abonelikleri kaydedin.
  </Card>
</Columns>
