Analitik
Olaylar
| Olay | Yazan | Ne zaman |
|---|---|---|
sent | worker | transport push'u kabul etti (APNs 200, FCM 200, push servisi 201) |
failed | worker | tüm denemelerden sonra transport reddetti; meta.code = sağlayıcı kodu, meta.invalidated = aboneliğin öldürülüp öldürülmediği |
skipped | worker | teslimat kuralı tuttu; meta.reason = frequency_cap / quiet_hours |
delivered | SDK | iOS NSE / Android handler / service worker push |
opened | SDK | gövdeye dokunuldu |
clicked | SDK | aksiyon butonuna dokunuldu |
dismissed | SDK | kaydırılıp kapatıldı — yalnızca Android ve web; iOS bildirmez |
Olaylar EVENT_RETENTION_DAYS (180) TTL'li MongoDB time-series koleksiyonunda (ts, campaignId meta, saniye çözünürlük) saklanır. Her olay ayrıca kampanyanın stats sayaçlarını (A/B için stats.variants.<id>) artırır; raporlar toplam için koleksiyonu hiç taramaz.
SDK pingleri nasıl gelir
Her push bir izleme kimliği taşır:
base64url("appId|campaignId|userId|subscriptionId|platform|variant") . hmac16
POST /v1/e/<d|o|c|x>/<msgId> HMAC'i doğrular, olayı yazar, sayaçları artırır ve webhook atar — veritabanı okuması yok, API anahtarı yok. IP başına sınırlı.
Oranlar
| Oran | Formül | Neden |
|---|---|---|
| İletim oranı | ulaşan / gönderilen | Sağlayıcının kabul ettiğinin ne kadarı cihaza ulaştı. |
| Açılma oranı | açılan / ulaşan | Hiç ulaşmayan push açılamaz. Gönderilene bölmek — çoğu aracın yaptığı gibi — her kampanyayı düşük gösterir ve teslimat sorunlarını etkileşim rakamlarının içine gizler. |
| Tıklanma oranı | tıklanan / ulaşan | Yalnızca butonlar. |
Payda sıfırsa null (— gösterilir).
Sayılar nerede
| Yer | İçerik |
|---|---|
| Uygulama genel bakış | platforma göre aktif abone, 7 günlük gönderilen/ulaşan/başarısız, 30 günlük büyüme, son kampanyalar |
| Kampanya raporu | kutular, huni, saatlik seri, A/B tablosu, başarısızlık kodları, atlanma nedenleri, platform kırılımı |
GET /v1/campaigns/:id/stats | kendi panelleriniz için stats + rates |
| Webhook'lar | her olay neredeyse anlık, ambarınıza |
Platform notları
| Platform | delivered | dismissed | Notlar |
|---|---|---|---|
| iOS | Notification Service Extension ister | ❌ | NSE olmadan iOS iletim oranı %0 okurken açılmalar saymaya devam eder. |
| Android | ✅ | ✅ | Data-only mesajlar bunu mümkün kılar; zorla durdurulmuş uygulama bildiremez. |
| Web | ✅ | ✅ | Service worker ikisini de bildirir. Safari'de buton yok, dolayısıyla clicked yok. |
Dışa aktarma
- Kampanya başına: Olayları CSV indir →
ts, type, platform, userId, subscriptionId, reason, code, invalidated. - Kullanıcılar ve abonelikler: mevcut filtreye uyan CSV, liste sayfalarından.
- Token ve endpoint'ler hiçbir dışa aktarımda yoktur.
Gerisi için events koleksiyonu sizindir ({ appId, campaignId, type, ts } şekli); ya da webhook'larla olduğu anda dışarı akıtın.