Device Token APNS-in push bildirişlərinin marşrutlaşdırılması üçün hər bir iOS cihazına təyin etdiyi unikal identifikatordur. Token sistem tərəfindən tətbiqin bildirişləri qəbul etmək üçün qeydiyyatı zamanı yaradılır və məhz bu cihaza push göndərmək üçün sərəvərə ötürülməlidir. Apple Developer Documentation, 2026-ya görə, Device Token tətbiqin yenidən qurulması, cihazın ehtiyat nüsxədən bərpası və ya iOS yenilənməsi zamanı dəyişə bilər, buna görə sərəvər çatdırılmanı təmin etmək üçün tokenləri mütəmadi yeniləməlidir.
Esas məqamlar
Device Token (cihaz tokeni) APNS (Apple Push Notification Service) tərəfindən iOS cihazındakı hər bir tətbiq üçün yaradılan hex sətri şəklində unikal identifikatordur. Token sərəvərin müəyyən bir cihaza push bildirişləri göndərməsi üçün açardır. Düzgün Device Token olmadan sərəvər push çatdıra bilməz — APNS 400 BadRequest xətası ilə sorğu rədd edir.
Device Token iOS sistemi tərəfindən tətbiqin qurulmadan sonra APNS-ə ilk müraciəti zamanı yaradılır. Generasiya prosesi tətbiq identifikatorunun (bundle ID) və cihazın unikal identifikatorunun (UID) kriptografik əlaqələndirilməsini əhatə edir, bundan sonra APNS tətbiqə hex formatında 32 baytlıq token qaytarır (64 simvol). Token sabit deyil — sistem müəyyən şəraitdə yenisini yarada bilər.
Sərəvər push bildirişi göndərdikdə, APNS-ə HTTP/2 sorğuna Device Token-i daxil edir. APNS yoxlayır tokenin etibarlılığını: əgər token başqa mühitə aiddirsə (sandbox əvəzinə production), müddəti bitibsə və ya ləğv edilibsə, Apple sərəvəri 410 Gone və ya 400 BadRequest xətası qaytarır. Yalnız tokenin uğurla təsdiqlənməsindən sonra APNS cihaza bildirişi çatdırmağa başlayır.
Device Token IDFA (Identifier for Advertisers), IDFV (Identifier for Vendor) və ya UID (Unique Device Identifier) ilə qarışdırılmamalıdır. IDFA və IDFV reklam və analitika üçün istifadə olunur, UID — aparat seriya nömrəsidir. Device Token yalnız push bildirişləri üçün mövcuddur və APNS xaricində istifadəçi və ya cihaz haqqında məlumat açıqlamır.
| Identifikator | Təyinat | Sabitlik |
|---|---|---|
| Device Token | APNS push bildirişlərinin marşrutlaşdırılması | Dəyişə bilər |
| IDFA | Reklam və izləmə | İstifadəçi tərəfindən sıfırlanır |
| IDFV | Vendor identifikasiyası (analitika) | Eyni tərtibatçının tətbiqləri üçün sabit |
| Bundle ID | Tətbiqin unikal identifikatoru | Sabit |
Device Token əldə etmə prosesi istifadəçidən icazə istəməkdən tutmuş tokenin sərəvərə ötürülməsinə qədər bir neçə məcburi addımdan ibarətdir. Hər addım kritik əhəmiyyət daşıyır — hər hansı birinin buraxılması cihaza push bildirişlərinin göndərilə bilməməsinə səbəb olur.
İlk addımda tətbiq UNUserNotificationCenter.current().requestAuthorization vasitəsilə istifadəçidən bildiriş göndərməyə icazə istəyir. İstifadəçi razılaşa, qadaģan edə və ya istəyə baģlı variantları seçə bilər (alert, badge, sound). İstifadəçinin açıq razılığı olmadan, tətbiq registerForRemoteNotifications-i çaģırsa belə, sistem Device Token verməyəcək. İcazə alındıqdan sonra tətbiq UIApplication.shared.registerForRemoteNotifications() çaģırır, bu da APNS-də qeydiyyat prosesini başladır.
Qeydiyyatdan sonra APNS AppDelegate vasitəsilə tokeni qaytarır: application(_:didRegisterForRemoteNotificationsWithDeviceToken:). Uğurlu çaģırış sərəvərə ötürülmək üçün hex sətrinə çevrilməli olan tokenlə Data obyektini ehtiva edir. Xəta halında sistem application(_:didFailToRegisterForRemoteNotificationsWithError:) çaģırır və problem haqqında təsviri verir: sertifikatların səhv konfiqurasiyası, şəbəkənin olmaması və ya layihənin səhv konfiqurasiyası.
Token alındıqdan sonra tətbiq dərhal onu məlumat bazasında saxlamaq üçün öz sərəvərinə ötürməlidir. API sorğu token, cihaz identifikatoru (uyğunlaşdırma üçün), mühit (sandbox/production) və istəyə baģlı əlavə məlumatları ehtiva edir: OS versiyası, cihaz modeli, dil. Sərəvərin həmişə aktual tokenə sahib olması üçün tətbiqin hər işə salınmasında tokenin ötürülməsinin təkrarlanması tövsiyə olunur.
// APNS-ə qeydiyyat və icazə sorğu
func registerForPushNotifications() {
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge]) {
[weak self] granted, error in
guard granted else {
print("İcazə alınmadı")
return
}
DispatchQueue.main.async {
UIApplication.shared
.registerForRemoteNotifications()
}
}
}
// APNS-dən Device Token almaq
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let tokenString = deviceToken
.map { String(format: "%02.2hhx", $0) }
.joined()
print("Device Token: \(tokenString)")
// Tokeni serverə göndərmək
PushTokenService.shared
.sendTokenToServer(tokenString) { success in
if success {
UserDefaults.standard.set(tokenString,
forKey: "lastDeviceToken")
}
}
}
Sərəvər hissəsi push sistemi istifadəçi və mühitlə əlaqələndirilmiş Device Token-i məlumat bazasında saxlamalıdır. Bildiriş göndərkən sərəvər APNS-ə sorğu formalaşdırır, URL-ə tokeni və avtorizasiya üçün JWT tokeni (və ya sertifikat) daxil edir. Düzgün token idarəetməsi push bildirişlərinin çatdırılma faizinə kritik təsir göstərir.
Sərəvərdəki token cədvəli ən azı: Device Token (unikal), istifadəçi identifikatoru, mühit (sandbox/production), son yenilənmə tarixi və statusu (aktiv/deaktiv) ehtiva etməlidir. Göndərmə zamanı sürətli axtarış üçün token üzrə indeks və istifadəçinin bütün cihazlarının siyahısını almaq üçün istifadəçi üzrə indeks əlavə etmək tövsiyə olunur. Bir çox tətbiq bir istifadəçiyə bir neçə cihaza sahib olmağa imkan verir — hər birinin öz tokeni var.
Push bildirişi göndərmək üçün sərəvər APNS sorğunu iki şəkildə avtorizasiya etməlidir. Certificate-based Apple Developer Console-da yaradılmış SSL sertifikatından istifadə edir. Token-based isə sertifikatı yeniləmək ehtiyacı olmadan 30 gün ərzində işləyən .p8 açarı ilə JWT (JSON Web Token) istifadə edir. Token əsaslı avtorizasiya daha müasir hesab olunur və Apple tərəfindən yeni layihələr üçün tövsiyə olunur.
APNS sorğu HTTP/2 POST metodunu, /3/device/{device_token} yolu ilə URL-i, avtorizasiya başlıqlarını və JSON gövdəsini əhatə edir. apns-topic başlığı mütləq tətbiqin bundle ID-sini ehtiva edir. apns-priority çatdırılma prioritetini təyin edir (5 — dərhal, 10 — batareyaya qənaət). apns-expiration APNS-in bildirişi çatdırmağa çalışacağı dövrü saniyələrlə təyin edir.
// Node.js-də APNS HTTP/2 vasitəsilə push göndərmə nümunəsi
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 sent successfully');
}
});
Çox sayda cihaza push bildirişləri göndərkən sürət nəzarəti ilə toplu göndərmədən istifadə edin. APNS tövsiyə edir bir əlaqədə saniyədə 1500 sorğudan çox olmamağı. Limit aşıldıqda Apple sərəvəri 429 Too Many Requests xətası qaytarır. Kütləvi göndərmələr üçün bir neçə əlaqədən istifadə edin və yükü cihazlar arasında bərabər paylayın.
Device Token sabit deyil və bir neçə ssenaridə dəyişə bilər, bu da sərəvərdən yenilənmə mexanizmi tələb edir. Sərəvər köhnəlmiş tokenə push göndərməyə davam edərsə, APNS 410 Gone xətası qaytarır və tokenin artıq bu mühit üçün etibarsız olduğunu göstərir.
Apple Device Token-in dəyişdiyi bir neçə ssenarini sənədləşdirir: istifadəçi tətbiqi yenidən qurur, cihazı iCloud ehtiyat nüsxəsindən bərpa edir, iOS-un yeni versiyasını quraşdırır, həmçinin şəbəkə və ya məxfilik parametrləri sıfırlandıqda. Hər halda tətbiq növbəti işə salınmasında APNS-dən yeni token alacaq. Sərəvər məlumat bazasında tokeni yeniləməli, köhnəni silib yenisini saxlamalıdır.
Sərəvər köhnəlmiş tokenə push göndərdikdə, APNS apns-unless-timestamp başlığı ilə HTTP 410 qaytarır. Bu başlıq tokenin etibarsız olduğu vaxtı göstərir. Sərəvər dərhal bu tokeni məlumat bazasından silməli və ya deaktiv etməlidir ki, ona yenidən göndərməsin. 410 xətasına məhəl qoymamaq resurs itkisinə və çatdırılma dərəcəsinin aşaģı düşməsinə səbəb olur.
Token bazasını aktual vəziyyətdə saxlamaq üçün dövri təmizləmə işə salmaq tövsiyə olunur. Təmizləmə skripti son N gün ərzində APNS jurnallarını təhlil edir, 410 xətası alınmış bütün tokenləri tapır və onları məlumat bazasında deaktiv edir. Əlavə olaraq 90 gündən çox istifadəçi aktivliyi olmayan tokenləri silmək olar — bunlar yalnız məlumat bazasının ölçüsünü artıran yararsız qeydlərdir.
Kütləvi push bildirişləri göndərməzdən əvvəl (xeər bülleteni, promosyon kampaniya) tokenlərin aktual olduğunu yoxlamaq tövsiyə olunur. APNS təmin etmir toplu token yoxlanması üçün birbaşa API, buna görə aşaģı prioritetli test push göndərmə və xəta təhlili strategiyası istifadə olunur. 410 xətası qaytaran tokenlər əsas göndərmədən xaric edilir.
Swift-də Device Token əldə etmənin tam dövrürünü, o cümlədən xəta idarə etməsi və sərəvərə ötürməni nəzərdən keçirək. Kod əhatə edir icazə istəmə, APNS-də qeydiyyat, Data-nın hex sətrinə çevrilməsi, xəta idarəetməsi və uğursuzluq halında təkrarlanan cəhdlərlə öz sərəvərinizə token göndərilməsini.
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)")
// Şəbəkə xətaları zamanı gecikmə ilə təkrarlama
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
}
}
}
}
APNS-də qeydiyyat zamanı xətalar müxtəlif səbəblərdən yarana bilər. Ən tez-tez rast gəlinən — şəbəkənin olmaması, Xcode-da sertifikatların səhv konfiqurasiyası (məsələn, Push Notifications imkanının söndürülməsi), push dəstəkləməyən simulyatordan istifadə və ya səhv provisioning profile. İstehsalatda xətaları jurnala yazmaq və mümkün olduqda növbəti tətbiq işə salınmasında qeydiyyatı təkrarlamaq vacibdir.
iOS Simulator real Device Token almağı dəstəkləmir. Simulyatorda qeydiyyatı sınaq etmək üçün i386 memarlıq yoxlamalarından istifadə edin: debug quruluşunda token almağı simulyasiya etmək və ya mock obyektləri ilə UI testlərindən istifadə etmək olar. Push bildirişlərinin real sınağı həmişə Xcode-a qoşulmuş fiziki cihazda aparılır.
Tez-tez verilən suallar
Bəli, Device Token tətbiqin yenidən qurulması, cihazın ehtiyat nüsxədən bərpası və ya iOS yenilənməsi zamanı dəyişə bilər. Sərəvər token yeniləmələrini idarə etməlidir: tanınmış cihazdan yeni token alındıqda köhnəni əvəz etməli, 410 xətası olduqda tokeni bazadan silməlidir.
Device Token kiçik hərflərlə (0–9, a–f) 64 simvoldan ibarət 32 baytlıq hex sətridir. Nümunə: "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2". Token APNS-dən Data kimi ötürülür və tətbiq tərəfində n sətrə çevrilir.
Sandbox tokeni developer provisioning profile ilə qurulmuş tətbiqlər üçün verilir və yalnız api.sandbox.push.apple.com ilə işləyir. Production tokeni App Store və TestFlight üçündür və api.push.apple.com ilə işləyir. Sərəvər mühitləri fərqləndirməli və müvafiq APNS endpointinə push göndərməlidir.
410 Gone xətası Device Token-in etibarsız olduğunu bildirir. Sərəvər dərhal bu tokeni məlumat bazasından silməli və ona göndərmə cəhdlərini dayandırmalıdır. Cavabdakı apns-unless-timestamp başlığı tokenin nə vaxtdan işləmədiyini göstərir.
AppDelegate-də application(_:didRegisterForRemoteNotificationsWithDeviceToken:) delegatının çağırıldığını yoxlayın. Metod çağırılırsa — token alınıb. Xcode konsolunda tokeni göstərmək üçün debug və ya OSLog istifadə edin. Fiziki cihazda Network Link Conditioner vasitəsilə tokenin sərəvərə göndərildiyini yoxlayın.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun