Sorun giderme
Sunucu
| Belirti | Olası neden | Çözüm |
|---|---|---|
| API açılışta hemen çıkıyor | Redis ulaşılamaz | API kuyruk olmadan başlamayı reddeder. REDIS_URL'i kontrol edin; docker compose ps redis. |
/health 503 dönüyor, API ayakta | MongoDB ulaşılamaz | Kasıtlı — arka planda yeniden dener. MONGO_URL'i, mongo konteynerini kontrol edin. |
docker compose up set ENCRYPTION_KEY in .env ile düşüyor | Sırlar eksik | bun run generate:keys >> .env ve boş satırları silin. |
/v1/admin/* 404 dönüyor | ADMIN_API_TOKEN ayarsız ya da paneldeki kopya farklı | İkisinde de aynı değeri ayarlayın; API'yi yeniden başlatın. |
Panel: ADMIN_PASSWORD_HASH is not set ya da giriş hep başarısız | Hash ham ($argon2id…) yapıştırılmış ve bir .env ayrıştırıcısı $ işaretlerini genişletmiş | generate:admin-password'ın yazdırdığı base64 satırı olduğu gibi yapıştırın. |
| Panel girişi çalışıyor, sonra her sayfa girişe dönüyor | Düz HTTP'de çerez düşürüldü | Localhost için INSECURE_COOKIES=true; üretimde HTTPS. |
Kampanya sending'de takıldı | Worker çalışmıyor ya da kimlik bilgisi olmayan platform | docker compose logs worker; raporun başarısızlık tablosuna bakın. |
| Zamanlanmış kampanya hiç tetiklenmedi | Redis kalıcılık olmadan yeniden başladı | Compose appendonly yes ayarlar; kendi Redis'inizde AOF ya da RDB açın. |
| Kuyruk büyüyor, Redis belleği tırmanıyor | Worker kapalı / aç, ya da allkeys-lru | Worker'ları başlatın; politika mutlaka noeviction. |
Bir platformda her push InvalidProviderToken / PERMISSION_DENIED | Yanlış ya da iptal edilmiş kimlik bilgisi | Yeniden yükleyin; Bağlantıyı test et'e basın. |
Birçok Android cihazda SENDER_ID_MISMATCH | Token'lar service account'tan farklı bir Firebase projesinden | Uygulamanın google-services.json'unun ait olduğu projenin service account'unu kullanın. |
İçe aktarımda subscribe 429 | IP başına 10/dk sınırı | SUBSCRIBE_RATE_LIMIT'i geçici yükseltin ya da içe aktarımı API host'undan çalıştırın. |
iOS
| Belirti | Olası neden | Çözüm |
|---|---|---|
| İzin verildi, cihaz panelde hiç görünmüyor | didRegisterForRemoteNotificationsWithDeviceToken iletilmemiş | AppDelegate callback'ini ekleyin (Swift, RN). |
Her gönderimde BadDeviceToken | Sandbox/production uyuşmazlığı | Debug build → Production APNs kapalı; App Store/TestFlight → açık. Ya da ortam başına bir uygulama. |
DeviceTokenNotForTopic | Kimlik bilgileri sayfasındaki Bundle ID uygulamanınkinden farklı | Birebir eşleyin. |
Testte TopicDisallowed / 403 | App ID'de Push Notifications yetkisi yok ya da anahtar APNs'siz oluşturulmuş | Portalda yetkiyi açın; anahtarı APNs işaretli yeniden oluşturun. |
| Ulaştı %0'da, açılmalar sayıyor | Notification Service Extension yok | Şablonla ve OpenNotificationApiUrl ile NSE hedefi ekleyin. |
| Görsel hiç çıkmıyor | Aynı — NSE yok ya da görsel URL'i HTTPS değil | |
| Butonlar görünmüyor | NSE yok (kategoriyi o kaydeder) | |
| Uygulama açıkken bildirim görünmüyor | willPresent iletilmemiş | İletin ve [.banner, .sound, .badge] ile tamamlayın. |
| Cihazda çalışıyor, simülatörde değil | Simülatörde gerçek APNs token'ı yok | Cihazda test edin. |
Android
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Token yok / cihaz hiç kaydolmuyor | google-services.json yok ya da paket adı yanlış; eklenti uygulanmamış | applicationId'yi Firebase uygulamasıyla karşılaştırın; com.google.gms.google-services'i uygulayın. |
| Simge yerine gri kare | Renkli ya da saydam olmayan küçük simge | Saydam üzerine beyaz tek renkli ic_notification.png. |
| Android 13+'ta bildirim yok | POST_NOTIFICATIONS verilmemiş | requestPermission(activity) çağırın; izni bildirin. |
| Uygulama açıkken geliyor, arka planda gelmiyor | RN: native modül bağlanmamış (eski build) | Android uygulamasını yeniden derleyin; autolinking @opennotification/react-native/android'i alır. |
| Uygulama açıkken ulaşıyor, zorla durdurulunca sessiz | Zorla durdurulmuş uygulamada data mesajı / OEM pil tasarrufu | Beklenen; priority: high zaten ayarlı. Xiaomi/Oppo/vivo'da kullanıcıdan uygulamayı pil optimizasyonundan muaf tutmasını isteyin. |
İki FirebaseMessagingService | Başka bir SDK da kaydediyor | onMessageReceived'i OpenNotificationMessagingService.handle'a iletin. |
Kurulumdan hemen sonra UNREGISTERED | Uygulama yeniden kuruldu; eski token geçersiz | Normal — yeni token sonraki açılışta abone olur. |
Web
| Belirti | Olası neden | Çözüm |
|---|---|---|
capability().reason === "IOS_NEEDS_INSTALL" | iOS'ta Safari sekmesi | Kurulum rehberini gösterin; push yalnızca Ana Ekran uygulamasından çalışır. |
INSECURE_CONTEXT | Site HTTP'de | HTTPS (localhost muaf). |
Her seferinde permission_dismissed | subscribe() tıklamadan çağrılmıyor | Tıklama handler'ında, hareketten hemen sonra eşzamanlı çağırın. |
service_worker_failed | /sw.js 404 ya da yanlış scope'tan sunuluyor | Kökte Content-Type: application/javascript ile sunun. |
Subscribe'da api_error 401/403 | Yanlış anahtar ya da CORS | pk_ anahtarı kullanın; origin'i CORS_ORIGINS'e ekleyin. |
| Abone oldu, hiçbir şey gelmiyor | SDK'daki VAPID public key uygulamanınkinden farklı | Anahtarı kimlik bilgileri sayfasından kopyalayın. |
413 hataları | Yük 4 KB üstünde | Gövde/data'yı kısaltın; sihirbazın bayt ölçeri gösterir. |
Abonelikler bir süre sonra ölüyor (410) | Tarayıcı endpoint'i döndürdü, eski worker pushsubscriptionchange'i ele almadı | Gelen worker'ı ya da registerPushHandlers'ı kullanın. |
| Safari: görsel yok, buton yok | Safari'de desteklenmiyor | Beklenen. |
"Gönderildi diyor ama kimseye gelmedi"
sent, push servisinin kabul ettiği anlamına gelir — sunucunun görebildiği son şey. Sonrası: cihaz çevrimdışı olabilir (TTL sayıyor), uygulama zorla durdurulmuş (Android), sistem ayarlarında bildirimler kapalı ya da iOS'ta uygulama silinmiş (sonraki gönderim Unregistered döner ve temizler). delivered sayısı gerçektir; raporda platform başına karşılaştırın.
Daha çok ayrıntı
docker compose logs -f worker | grep -E "failed|invalidated"
Günlükler subscriptionId ve sağlayıcı kodunu taşır, token'ı asla. Cihaz bilgileri için aboneliği panelde arayın.