Runbook: Gerçek cihaza APNs ve FCM test gönderimi
Bu runbook, kanal kimlik bilgilerinin gerçek sağlayıcılarla çalıştığını doğrulamak için izlenir. Faz 3'te "doğrula" ucu sağlayıcıya test bağlantısı kurar; gerçek cihaza gönderim Faz 4 (POST /v1/notifications) ve Faz 5…
Bu runbook, kanal kimlik bilgilerinin gerçek sağlayıcılarla çalıştığını doğrulamak için izlenir. Faz 3'te "doğrula" ucu sağlayıcıya test bağlantısı kurar; gerçek cihaza gönderim Faz 4 (POST /v1/notifications) ve Faz 5 (SDK) ile tamamlanır. Buradaki adımlar her iki fazda da geçerlidir.
Ön koşullar
- Dashboard'da app oluşturulmuş ve
App ayarları → Kanallaraçılmış olmalı. - Apple: Apple Developer hesabı, Keys → Create a key → Apple Push Notifications service (APNs) ile üretilmiş
.p8dosyası, Key ID (10 karakter), Team ID (10 karakter), uygulamanın Bundle ID'si. - Google: Firebase projesi, Project settings → Service accounts → Generate new private key ile indirilmiş servis hesabı JSON'u (
project_id,client_email,private_keyalanları zorunlu).
1. APNs (iOS)
- Kanallar → iOS Push → sağlayıcı APNs.
- Key ID, Team ID, Bundle ID girin; ortamı seçin (sandbox: Xcode ile yüklenen build; production: TestFlight/App Store).
.p8dosyasını seçin (içerik tarayıcıdan okunur ve şifrelenerek saklanır; bir daha görüntülenemez).- Kaydet ve doğrula. Beklenen sonuç: durum Aktif. Pushizo sıfır cihaz token'ı ile bir istek gönderir; Apple
400 BadDeviceTokendöndürürse kimlik bilgisi geçerlidir. - Hata eşlemesi:
Sonuç Anlamı Çözüm InvalidProviderTokenKey ID / Team ID / p8 uyumsuz Üçlüyü aynı Apple hesabından kontrol edin TopicDisallowed/BadTopicBundle ID anahtarla yetkili değil Bundle ID'yi ve anahtarın push yetkisini kontrol edin NETWORKapi.push.apple.com:443erişilemiyorGüvenlik duvarı/HTTP2 çıkışını açın - Gerçek cihaz (Faz 4+): cihazda uygulamayı açın, SDK kaydı sonrası Abonelikler ekranında
ios_pushkaydını görün; Test cihazı anahtarını açın ve test push gönderin. Bildirim gelmezse Mesaj İzleme ekranında sağlayıcı yanıtına bakın (Unregistered→ token eski/ortam yanlış: sandbox build'e production anahtarı gibi).
2. FCM (Android)
- Kanallar → Android Push → sağlayıcı FCM.
- Servis hesabı JSON dosyasını seçin veya içeriğini yapıştırın. Yalnızca
project_idveclient_emailgörünür kalır;private_keyşifrelenir. - Kaydet ve doğrula. Pushizo OAuth2 ile erişim token'ı alır ve
validate_onlymodunda sahte token'a istek atar;400 INVALID_ARGUMENT/404kimlik bilgisinin geçerli olduğunu gösterir. - Hata eşlemesi:
Sonuç Anlamı Çözüm OAUTH_FAILEDprivate_key/client_email geçersiz veya saat kayması JSON'u yeniden indirin; sunucu saatini NTP ile eşitleyin PERMISSION_DENIEDServis hesabının FCM yetkisi yok Hesaba Firebase Cloud Messaging API Admin rolü verin; FCM API'nin etkin olduğundan emin olun SENDER_ID_MISMATCH(gönderimde)Cihaz token'ı başka Firebase projesine ait Uygulamadaki google-services.jsonile projeyi eşleştirin - Gerçek cihaz (Faz 4+): uygulamayı açın, Abonelikler'de
android_pushkaydını görün, test push gönderin.UNREGISTERED→ uygulama kaldırılmış veya token yenilenmiş.
3. Web Push
- Kanallar → Web Push → sağlayıcı Web Push;
mailto:adresinizi ve site URL'sini girin. VAPID çifti otomatik üretilir; yalnızca public anahtar görünür ve SDKconfigucundan yayınlanır. - Mevcut bir VAPID çiftiniz varsa (ör. başka bir servisten taşıma) public/private değerleri birlikte girin; uyumsuzsa kayıt reddedilir.
- Gerçek tarayıcı (Faz 5): Web SDK izin isteyip aboneliği kaydettikten sonra test push gönderin.
410→ abonelik iptal edilmiş;401/403→ VAPID anahtarı site kaydıyla uyuşmuyor (anahtar yenilendiyse tarayıcı abonelikleri yenilenmelidir).
4. Simülasyon modu
Gerçek kimlik bilgisi yoksa her kanal için mock sağlayıcı seçilebilir. Mock, token önekine göre deterministik sonuç üretir: mock:invalid, mock:transient, mock:rate, mock:auth, mock:fail; diğer token'lar başarılı sayılır. MOCK_LATENCY_MS ile gecikme simüle edilir.
5. Güvenlik notları
- Kimlik bilgileri envelope encryption ile saklanır (
docs/adr/0008), API/UI'dan geri okunmaz; yalnızca "yüklü / son doğrulama / son hata" görünür. - Doğrulama ucu dakikada 10 istekle sınırlıdır.
- Anahtar rotasyonu için
docs/runbooks/key-rotation.md.
Veri dışa / içe aktarma (export / import)
Faz 8 ile gelen export/import işleri maintenance kuyruğunda worker tarafından çalışır; dosyalar S3 uyumlu nesne depolamada (yerelde RustFS, S3_* ortam değişkenleri) tutulur. Dashboard: Kitle → Dışa / İçe Aktarım. API:…
OneSignal'den Pushizo'ya göç
Pushizo, OneSignal'in kavram modelini (app, abonelik, kullanıcı/alias, tag, segment, şablon, journey) ve SDK yüzeyini (initialize → login → User.addTags → Notifications.requestPermission → Session.sendEvent) bilinçli…