Ana içeriğe atla
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ı

PlatformVoIP push destekleniyor mu?Nasıl çalışır
iOSYesApple PushKit ve bir VoIP APNs sertifikası kullanır
AndroidNoArama 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.
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.
1

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
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
    }
}
Bu standart Apple PushKit kodudur. OneSignal bir PushKit SDK’sı sunmaz — tokenı kendiniz kaydedip 4. Adımda OneSignal’a iletirsiniz.
Apple kaynakları:
2

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.
Bundle ID (ör. com.yourcompany.appname), Xcode’da hedef uygulamanızın General sekmesinde bulunur.
3

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 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
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.
macOS Keychain Access'te gösterilen VoIP Services Certificate
OneSignal kontrol paneline yüklenen VoIP Services Certificate
4

VoIP tokenını OneSignal'a kaydetme

VoIP tokenını VoIP OneSignal uygulamanıza kaydetmek için Create User API’sini kullanın.
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.
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
    }
  ]
}
'
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.
Tokenı daha sonra güncellemek için Update Subscription API’sini kullanın.
5

VoIP bildirimleri gönderme

Create Notification 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 --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
6

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:) metodunu tetikler
  3. Uygulama sonlandırılmış veya arka planda olsa bile uyanır

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 özelliğini kullanın. Yararlı kaynaklar:
Android kurulumu OneSignal’a özgü değildir. OneSignal yalnızca push yükünü iletir; uygulamanız arama davranışını işler.

SSS

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

Hayır. Confirmed Deliveries, 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:
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 bakın.

VoIP bildirimlerini OneSignal kontrol panelinden gönderebilir miyim?

Hayır. VoIP bildirimleri, "apns_push_type_override": "voip" parametresiyle Create Notification 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

Create message API

REST API kullanarak push bildirimlerini programatik olarak gönderin.

Onaylanmış teslimatlar

Desteklenen platformlarda push bildirim teslimat onayını takip edin.

Servis uzantıları

Notification Service Extension ile bildirim işlemeyi özelleştirin.

Create User API

OneSignal API ile kullanıcıları ve abonelikleri kaydedin.