Device Token: nasıl çalışır, APNS tokenı alma ve güncelleme

Yazar: IT Sectr Yayınlanma: 2026-03-21 Okuma süresi: 11 dk

Device Token, APNS’nin push bildirimlerini yönlendirmek için her iOS cihazına atadığı benzersiz bir tanımlayıcıdır. Token, uygulama bildirim almak için kaydolduğunda sistem tarafından oluşturulur ve bu cihaza push göndermek için sunucuya gönderilmelidir. Apple Geliştirici Belgeleri, 2026’ya göre, Device Token uygulama yeniden yüklendiğinde, cihaz yedekten geri yüklendiğinde veya iOS güncellendiğinde değişebilir, bu nedenle sunucu teslimatı sağlamak için tokenları düzenli olarak güncellemelidir.

Kilit Noktalar

  • Benzersizlik — Device Token, belirli bir APNS ortamında (sandbox/production) her uygulama-cihaz çifti için benzersizdir.
  • Kalıcı olmama — token, uygulama yeniden yüklendiğinde, yedekten geri yüklendiğinde veya iOS güncellendiğinde değişebilir; sunucuda bir güncelleme mekanizması gereklidir.
  • Kayıt — uygulama, UNUserNotificationCenter aracılığıyla bildirim izni ister, ardından sistem AppDelegate’de Device Token’ı döndürür.
  • APNS Sandbox vs Production — geliştirme için ayrı bir sertifikayla APNS sandbox ortamı kullanılır; üretim tokenları farklıdır ve yalnızca üretim APNS tarafından kabul edilir.
  • Token biçimi — push bildirimleri gönderilirken sunucuya gönderilen ve apns-topic başlığında kullanılan 32 baytlık bir onaltılık dizedir.

Device Token Nedir

Device Token (cihaz tokenı), APNS’nin (Apple Push Notification Service) bir iOS cihazındaki her uygulama için oluşturduğu, onaltılık dize biçiminde benzersiz bir tanımlayıcıdır. Token, sunucunun belirli bir cihaza push bildirimi göndermesi için kullandığı anahtardır. Geçerli bir Device Token olmadan, sunucu push bildirimleri gönderemez — APNS, 400 BadRequest hatasıyla isteği reddeder.

Token Nasıl Oluşur

Device Token, uygulama yüklemeden sonra APNS ile ilk kez iletişime geçtiğinde iOS sistemi tarafından oluşturulur. Oluşturma süreci, uygulamanın paket kimliği (bundle ID) ve cihazın benzersiz tanımlayıcısı (UID) ile kriptografik bağlantı içerir, ardından APNS uygulamaya onaltılık biçimde (64 karakter) 32 baytlık bir token döndürür. Token kalıcı değildir — sistem belirli koşullar altında yeni bir token oluşturabilir.

Push Bildirimi Gönderiminde Tokenın Rolü

Sunucu bir push bildirimi gönderdiğinde, APNS’ye yapılan HTTP/2 isteğine Device Token’ı dahil eder. APNS tokenı doğrular: token başka bir ortama (üretim yerine sandbox) aitse, süresi dolmuşsa veya iptal edilmişse, Apple sunucusu 410 Gone veya 400 BadRequest hatası döndürür. Token doğrulaması başarılı olduktan sonra APNS, bildirimi cihaza göndermeye başlar.

Device Token ve Diğer Tanımlayıcılar Arasındaki Fark

Device Token, IDFA (Reklam Verenler İçin Tanımlayıcı), IDFV (Satıcı İçin Tanımlayıcı) veya UID (Benzersiz Cihaz Tanımlayıcısı) ile karıştırılmamalıdır. IDFA ve IDFV reklam ve analiz için kullanılır, UID bir donanım seri numarasıdır. Device Token yalnızca push bildirimleri için vardır ve APNS dışında kullanıcı veya cihaz hakkında bilgi ifşa etmez.

TanımlayıcıAmaçKalıcılık
Device TokenAPNS push bildirimi yönlendirmeDeğişebilir
IDFAReklam ve izlemeKullanıcı tarafından sıfırlanabilir
IDFVSatıcı tanımlaması (analiz)Aynı geliştiricinin uygulamaları için kalıcıdır
Bundle IDBenzersiz uygulama tanımlayıcısıKalıcıdır

Cihaz Tokenı Nasıl Alır ve Kaydeder

Device Token alma süreci, kullanıcıdan izin istemekten sunucuya token göndermeye kadar birkaç zorunlu adımdan oluşur. Her adım kritiktir — herhangi birini atlamak, cihaza push bildirimi gönderememeye neden olur.

Bildirim İzni İsteme

İlk adım, uygulamanın UNUserNotificationCenter.current().requestAuthorization aracılığıyla kullanıcıdan bildirim gönderme izni istemesidir. Kullanıcı kabul edebilir, reddedebilir veya isteğe bağlı seçenekleri (alert, badge, sound) seçebilir. Kullanıcının açık rızası olmadan, uygulama registerForRemoteNotifications’ı çağırsa bile sistem Device Token yayınlamaz. İzni aldıktan sonra uygulama UIApplication.shared.registerForRemoteNotifications() çağrısını yapar ve bu da APNS’ye kayıt sürecini başlatır.

APNS’den Token Alma

Kayıttan sonra APNS, AppDelegate aracılığıyla tokenı döndürür: application(_:didRegisterForRemoteNotificationsWithDeviceToken:). Başarılı bir çağrı, sunucuya iletmek için onaltılık dizeye dönüştürülmesi gereken tokenı içeren bir Data nesnesi içerir. Hata durumunda sistem, sorunun açıklamasıyla application(_:didFailToRegisterForRemoteNotificationsWithError:) çağrısını yapar: yanlış sertifika yapılandırması, ağ kullanılamazlığı veya yanlış proje yapılandırması.

Tokenı Sunucunuza Gönderme

Tokenı aldıktan sonra uygulama, veritabanında depolamak için onu hemen kendi sunucusuna göndermelidir. API isteği tokenı, cihaz tanımlayıcısını (eşleme için), ortamı (sandbox/production) ve isteğe bağlı olarak ek verileri (OS sürümü, cihaz modeli, dil) içerir. Sunucunun her zaman güncel bir tokena sahip olması için tokenın her uygulama başlatılışında yeniden gönderilmesi önerilir.

swift
// İzin isteme ve APNS’ye kayıt olma
func registerForPushNotifications() {
    UNUserNotificationCenter.current()
        .requestAuthorization(options: [.alert, .sound, .badge]) {
        [weak self] granted, error in
        guard granted else {
            print("İzin verilmedi")
            return
        }
        DispatchQueue.main.async {
            UIApplication.shared
                .registerForRemoteNotifications()
        }
    }
}

// APNS’den Device Token alma
func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
    let tokenString = deviceToken
        .map { String(format: "%02.2hhx", $0) }
        .joined()
    print("Device Token: \(tokenString)")

    // Tokenı sunucuya gönderme
    PushTokenService.shared
        .sendTokenToServer(tokenString) { success in
        if success {
            UserDefaults.standard.set(tokenString,
                forKey: "lastDeviceToken")
        }
    }
}

Sunucu Tarafında Token Yönetimi

Push sisteminin sunucu tarafı, Device Token’ı veritabanında kullanıcı ve ortamla ilişkilendirerek saklamalıdır. Bildirim gönderirken sunucu, URL’de tokenı ve yetkilendirme için bir JWT tokenı (veya sertifika) içeren APNS’ye bir istek oluşturur. Doğru token yönetimi, push bildirimi teslimat oranını kritik şekilde etkiler.

Token Veritabanı Yapısı

Sunucudaki token tablosu en az şunları içermelidir: Device Token (benzersiz), kullanıcı kimliği, ortam (sandbox/production), son güncelleme tarihi ve durum (etkin/etkin değil). Gönderim sırasında hızlı arama için token üzerinde ve bir kullanıcının tüm cihazlarının listesini almak için kullanıcı üzerinde dizin eklenmesi önerilir. Birçok uygulama, bir kullanıcının her biri kendi tokenına sahip birden fazla cihaza sahip olmasına izin verir.

APNS İsteklerinin Yetkilendirilmesi

Push bildirimi göndermek için sunucu, APNS’ye yapılan isteği iki şekilde yetkilendirmelidir. Sertifika tabanlı, Apple Developer Console’da oluşturulan bir SSL sertifikası kullanır. Token tabanlı, sertifikayı yenilemeye gerek kalmadan 30 güne kadar geçerli olan .p8 anahtarıyla bir JWT (JSON Web Token) kullanır. Token tabanlı yetkilendirme daha modern kabul edilir ve Apple tarafından yeni projeler için önerilir.

HTTP/2 APNS İsteği Oluşturma

APNS’ye yapılan istek, HTTP/2 POST yöntemini, /3/device/{device_token} yolunu içeren URL’yi, yetkilendirme başlıklarını ve yükle birlikte JSON gövdesini içerir. apns-topic başlığı uygulamanın paket kimliğini içermelidir. apns-priority teslimat önceliğini belirtir (5 — hemen, 10 — pil tasarruflu). apns-expiration, APNS’nin bildirimi göndermeye çalışacağı dönemden itibaren saniye cinsinden süreyi ayarlar.

js
// APNS HTTP/2 üzerinden Node.js’de push gönderme örneği
const http2 = require('http2');
const client = http2.connect('https://api.push.apple.com');

const deviceToken = 'abcdef0123456789...';
const payload = JSON.stringify({
    "aps": { "alert": "Hello!", "sound": "default" }
});

const req = client.request({
    ':method': 'POST',
    ':path': `/3/device/${deviceToken}`,
    'apns-topic': 'com.example.app',
    'apns-priority': '10',
    'apns-expiration': '0',
    'authorization': `bearer ${jwtToken}`
});
req.write(payload);
req.end();
req.on('response', (headers) => {
    if (headers[':status'] === '200') {
        console.log('Push başarıyla gönderildi');
    }
});

Toplu Gönderme ve Hız Sınırlama

Çok sayıda cihaza push bildirimi gönderirken, hız kontrolüyle toplu gönderme kullanın. APNS, bağlantı başına saniyede 1500 isteği aşmamanızı önerir. Sınır aşıldığında Apple sunucusu 429 Too Many Requests hatası döndürür. Büyük ölçekli kampanyalar için birden çok bağlantı kullanın ve yükü cihazlar arasında eşit olarak dağıtın.

Token Güncelleme ve Geçersiz Kılma

Device Token kalıcı değildir ve birkaç senaryoda değişebilir, bu da sunucuda bir güncelleme mekanizması gerektirir. Sunucu eski bir tokena push göndermeye devam ederse, APNS 410 Gone hatası döndürür ve tokenın belirtilen ortam için artık geçerli olmadığını belirtir.

Token Ne Zaman Değişir

Apple, Device Token’ın değiştiği birkaç senaryoyu belgeler: kullanıcı uygulamayı yeniden yükler, cihazı bir iCloud yedeğinden geri yükler, yeni bir iOS sürümü yükler veya ağ veya gizlilik ayarlarını sıfırlar. Her durumda, uygulama bir sonraki başlatılışında APNS’den yeni bir token alacaktır. Sunucu, veritabanındaki tokenı güncellemeli, eskisini kaldırıp yenisini kaydetmelidir.

APNS’den 410 Gone Hatasını Ele Alma

Sunucu eski bir tokena push gönderdiğinde, APNS apns-unless-timestamp başlığıyla HTTP 410 döndürür. Bu başlık, tokenın geçersiz hale geldiği zamanı belirtir. Sunucu, bu tokenı veritabanından derhal silmeli veya devre dışı bırakmalıdır, böylece ona tekrar gönderim yapılmaz. 410 hatasını görmezden gelmek kaynakları boşa harcar ve gönderilebilirlik oranını düşürür.

Etkin Olmayan Tokenların Periyodik Temizliği

Token veritabanını güncel tutmak için periyodik temizlik çalıştırılması önerilir. Temizlik betiği, son N gündeki APNS günlüklerini analiz eder, 410 hatası alan tüm tokenları bulur ve bunları veritabanında devre dışı bırakır. Ek olarak, 90 günden uzun süredir kullanıcı etkinliği olmayan tokenlar kaldırılabilir — bunlar yalnızca veritabanı boyutunu artıran gereksiz kayıtlardır.

Toplu Gönderimden Önce Token Doğrulama

Push bildirimlerinin (bültenler, promosyon kampanyaları) toplu gönderiminden önce, tokenların önceden doğrulanması önerilir. APNS toplu token doğrulaması için doğrudan bir API sağlamaz, bu nedenle düşük öncelikli bir test push’u gönderme ve hataları analiz etme stratejisi kullanılır. 410 hatası döndüren tokenlar ana gönderimden çıkarılır.

Device Token Almak İçin Kod Örneği

Swift’te Device Token almanın tam döngüsünü, hata yönetimi ve sunucuya gönderme dahil olmak üzere inceleyelim. Kod şunları kapsar: izin isteme, APNS’ye kayıt, Data’yı onaltılık dizeye dönüştürme, hata yönetimi ve başarısızlık durumunda yeniden denemelerle kendi sunucunuza token gönderme.

swift
import UIKit
import UserNotifications

final class PushNotificationManager: NSObject {

    static let shared = PushNotificationManager()
    private let apiClient = APIClient()
    private var currentToken: String?

    func register() {
        UNUserNotificationCenter.current()
            .requestAuthorization(
                options: [.alert, .badge, .sound]) {
            [weak self] granted, error in
            guard granted else {
                Analytics.log(
                    "Push permission denied")
                return
            }
            DispatchQueue.main.async {
                UIApplication.shared
                    .registerForRemoteNotifications()
            }
        }
    }

    func handleDeviceToken(_ tokenData: Data) {
        let token = tokenData
            .map { String(format: "%02.2hhx", $0) }
            .joined()

        guard token != currentToken else { return }
        currentToken = token
        sendTokenToServer(token)
    }

    func handleRegistrationError(_ error: Error) {
        Analytics.log(
            "Push registration failed: \(error)")

        // Ağ hatalarında gecikmeden sonra yeniden dene
        if let urlError = error as? URLError,
            urlError.code == .notConnectedToInternet {
            DispatchQueue.main.asyncAfter(
                deadline: .now() + 10) { [weak self] in
                self?.register()
            }
        }
    }

    private func sendTokenToServer(_ token: String) {
        let body = PushTokenRequest(
            token: token,
            environment: Environment.current == .debug
                ? "sandbox" : "production",
            osVersion: UIDevice.current.systemVersion,
            locale: Locale.current.identifier
        )
        apiClient.sendToken(body) { [weak self] result in
            if case .success = result {
                self?.currentToken = token
            }
        }
    }
}

Kayıt Sırasında Hata Yönetimi

APNS kaydı sırasındaki hatalar çeşitli nedenlerden kaynaklanabilir. En yaygın olanlar arasında ağ kullanılamazlığı, Xcode’da yanlış sertifika yapılandırması (örneğin, Push Notifications özelliği devre dışı), simülatör kullanımı (push’u desteklemez) veya yanlış sağlama profili bulunur. Üretimde, hataları günlüğe kaydetmek ve mümkünse bir sonraki uygulama başlatılışında kaydı yeniden denemek önemlidir.

Simülatörde Device Token Test Etme

iOS Simülatörü gerçek bir Device Token almayı desteklemez. Simülatörde kaydı test etmek için i386 mimarisi kontrollerini kullanın: bir hata ayıklama yapısında, token almayı simüle edebilir veya sahte nesnelerle UI testleri kullanabilirsiniz. Gerçek push bildirimi testi her zaman Xcode’a bağlı fiziksel bir cihazda yapılır.

Sıkça Sorulan Sorular

Aynı kullanıcının Device Tokenı değişebilir mi?

Evet, Device Token uygulama yeniden yüklendiğinde, cihaz yedekten geri yüklendiğinde veya iOS güncellendiğinde değişebilir. Sunucu token güncellemelerini yönetmelidir: bilinen bir cihazdan yeni bir token alındığında eskisini değiştirin, 410 hatası oluştuğunda tokenı veritabanından kaldırın.

Device Tokenın biçimi nedir?

Device Token, küçük harflerle (0–9, a–f) yazılmış 64 karakterli 32 baytlık bir onaltılık dizedir. Örnek: “a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2”. Token, APNS’den Data olarak iletilir ve uygulama tarafında dizeye dönüştürülür.

Sandbox ve üretim tokenı arasındaki fark nedir?

Sandbox tokenı, geliştirme sağlama profiliyle oluşturulmuş uygulamalar için verilir ve yalnızca api.sandbox.push.apple.com ile çalışır. Üretim tokenı App Store ve TestFlight içindir ve api.push.apple.com ile çalışır. Sunucu ortamları ayırt etmeli ve push’ları uygun APNS uç noktasına göndermelidir.

Sunucu APNS’den 410 hatası alırsa ne yapmalıdır?

410 Gone hatası, Device Token’ın geçersiz olduğu anlamına gelir. Sunucu bu tokenı derhal veritabanından kaldırmalı ve ona gönderme girişimlerini durdurmalıdır. Yanıttaki apns-unless-timestamp başlığı, tokenın ne zaman çalışmayı durdurduğunu belirtir.

Uygulamanın Device Token aldığını nasıl doğrularım?

AppDelegate’deki temsilci yöntemi application(_:didRegisterForRemoteNotificationsWithDeviceToken:) kontrol edin. Yöntem çağrılırsa, token alınmıştır. Xcode konsolunda tokenı görüntülemek için hata ayıklama günlüklerini veya OSLog’u kullanın. Fiziksel bir cihazda, Network Link Conditioner kullanarak tokenın sunucuya gönderildiğini doğrulayın.

Özet

  • Device Token — APNS’de bir cihaz için push bildirimlerini yönlendirmek için gerekli olan 64 karakterli benzersiz onaltılık tanımlayıcı.
  • Token alma — süreç, kullanıcı izni isteme, registerForRemoteNotifications aracılığıyla APNS’ye kayıt olma ve AppDelegate’de işleme içerir.
  • Token kalıcı değildir — uygulama yeniden yüklendiğinde, yedekten geri yüklendiğinde veya iOS güncellendiğinde değişebilir; sunucuda bir güncelleme mekanizması gereklidir.
  • Sandbox vs Production — farklı APNS ortamları farklı tokenlar ve uç noktalar kullanır; sunucu gönderim sırasında ortamı doğru şekilde belirlemelidir.
  • Sunucu yönetimi — tokenlar veritabanında kullanıcı, ortam ve durumla ilişkilendirilerek saklanır; 410 Gone hatası tokenın geçersizliğini gösterir.
  • APNS yetkilendirmesi — sunucu, isteklerin kimliğini doğrulamak için bir JWT tokenı veya SSL sertifikası kullanır; JWT, yeni projeler için Apple tarafından önerilir.
  • Device Token — doğru alma ve depolamadan her bildirimin teslimatının bağlı olduğu push altyapısının temel bir bileşenidir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun