PushizoDocs
Kanallar

Web Push

VAPID tabanlı tarayıcı push kanalı — kurulum, tarayıcı desteği, service worker, izin istemleri, içerik alanları ve sorun giderme.

Web Push, tarayıcının push servisi (Chrome/Edge → FCM, Firefox → Mozilla, Safari → APNs) üzerinden gider; Pushizo app'inizin VAPID anahtar çiftiyle imzalar. Kullanıcı tarafı Web SDK ile, kurulum Web hızlı başlangıç ile yapılır.

Kurulum

  1. App ayarları → Kanallar → Web Push → Etkinleştir. VAPID çifti otomatik üretilir; genel anahtar SDK'ya GET /sdk/v1/apps/{app_id}/config ile iner, özel anahtar şifreli saklanır ve geri okunamaz.
  2. subject: mailto:ops@example.com ya da https://example.com (push servisleri sorun hâlinde bu adrese ulaşır).
  3. Site kökünde PushizoSDKWorker.js ve sayfada Pushizo.init({ appId }).

API: PUT /v1/apps/{app_id}/channels/web_push { "provider": "vapid", "config": { "subject": "mailto:…" } }; doğrulama POST …/channels/web_push/validate anında active döner.

Güvenlik: tarayıcıdan gelen abonelik endpoint adresi yalnızca bilinen push servisi alan adlarına izin verir (SSRF koruması); kendi barındırdığınız ya da ek push servisleri için sunucu ortamında WEB_PUSH_EXTRA_HOSTS listesi tanımlanır.

Tarayıcı desteği

TarayıcıDurumNot
Chrome, Edge, Opera, Brave (masaüstü/Android)TamResim (chrome_web_image), rozet ikonu (chrome_web_badge), düğmeler (web_buttons)
FirefoxTamResim desteklenmez; düğme sınırlı
Safari macOS 16+TamStandart Web Push; ikon site ikonundan
Safari iOS/iPadOS 16.4+Yalnızca ana ekrana eklenmiş PWAiOS web push ve PWA

HTTPS zorunludur; localhost geliştirme için allowLocalhostAsSecureOrigin: true.

İzin istemleri

Tarayıcının native istemi yalnızca kullanıcı hareketiyle açılabilir ve reddedilirse geri alınamaz; bu nedenle önce yumuşak bir istem gösterin:

  • Slidedown: init({ slidedown: { enabled: true, delaySeconds: 5, pageViews: 2, retryDays: 7, title, message, acceptText, cancelText } }); collect: 'email' | 'sms' | 'email_sms' ile e-posta/SMS toplama.
  • Zil (bell): sağ/sol altta abonelik durumunu gösteren düğme.
  • Özel bağlantı: kendi düğmenizden Pushizo.Notifications.requestPermission().
  • Geri çekilme takvimi: reddedilen/kapatılan istem promptOptions.backoffDays (varsayılan 3, 7, 30 gün) sonra yeniden gösterilir.

Dashboard → Kanallar → Web Push → İzin istemi tasarımcısı slidedown metinlerini ve zamanlamayı yapılandırır; SDK config ile indirir.

İçerik alanları

AlanAçıklama
headings, contents, urlBaşlık, gövde, tıklama adresi (dil haritası)
chrome_web_iconBildirim ikonu (192×192 önerilir)
chrome_web_imageBüyük resim (Chrome/Edge)
chrome_web_badgeMonokrom rozet (Android Chrome)
web_buttons[{ id, text, url? }] en fazla 2–3 düğme
web_push_topicAynı konudaki önceki bildirimi değiştirir (Topic başlığı)
require_interactionKullanıcı kapatana kadar açık kalır
ttl, priorityPush servisinde bekleme süresi (sn) ve Urgency

Bildirim tıklaması notificationClickHandlerMatch / notificationClickHandlerAction ile açık sekmeye odaklanır ya da yeni sekme açar; tıklama opened, gösterim received olarak kaydedilir (service worker API'ye token_hash ile bildirir).

Abonelik yaşam döngüsü

  • Abonelik GET /sdk/v1/apps/{app_id}/subscriptions ile kaydedilir; endpoint, keys.p256dh, keys.auth tarayıcı aboneliğinden gelir.
  • Push servisi 404/410 dönerse abonelik invalid olur ve subscription.invalidated webhook'u çıkar; SDK bir sonraki açılışta autoResubscribe ile yeniden kaydeder.
  • Kullanıcı tarayıcı ayarından izni kaldırırsa pushSubscription.state.permission = 'denied' olur; SDK bunu config yenilemesinde bildirir.

Sorun giderme

BelirtiKontrol
Abonelik oluşmuyorHTTPS, PushizoSDKWorker.js 200 ve doğru Content-Type, konsolda Pushizo.Debug.setLogLevel('debug')
Bildirim gelmiyorDashboard Mesaj İzleme → teslimat durumu; failed ise error_code (410 → abonelik iptal)
Safari'de gelmiyormacOS 16+ ya da iOS PWA; "Rahatsız etmeyin"/Odak modu
İkon görünmüyorchrome_web_icon HTTPS ve erişilebilir olmalı

Bu sayfada