ابرووا
شروع رایگان
☰ فهرست مستندات · رسید تحویل
به‌زودی. Abrova Push به‌زودی فعال می‌شود. این صفحه توضیح می‌دهد چطور کار خواهد کرد؛ هنوز قابل استفاده نیست.
این صفحه هنوز ترجمه نشده — نسخه‌ی انگلیسی نمایش داده می‌شود. English

Delivery Receipts

Track notification delivery, opens, clicks, and dismissals in real time. Per-message stats, individual receipts, action stats, device history, app-wide stats, webhooks.

به‌روزرسانی: ۵ آبان ۱۴۰۵

Track notification delivery, opens, clicks, and dismissals in real-time.

Receipt Statuses#

StatusDescription
sentMessage handed to the transport (APNs, Web Push, the Abrova connection or FCM)
deliveredConfirmed delivery to device
openedUser opened/viewed the notification
clickedUser tapped an action button
dismissedUser dismissed the notification
failedDelivery failed (invalid token, etc.)
iOS needs one extra step to report `delivered`.

APNs confirms only that Apple accepted a notification, never that it arrived, so iOS devices stay at sent until you add a Notification Service Extension. It is optional and takes a few minutes — see iOS Delivery Confirmation. Notifications shown while the app is in the foreground, tapped, or received over the real-time connection are confirmed by the app itself. Android and Web confirm delivery on their own, with no extra setup.

Receipts for every send type.

Per-device receipts are created for every send: to a user, a device, a list of devices, a topic, a segment, or a broadcast. Each targeted device gets one.

The Delivery page in the Abrova Console shows sent, delivered and failed counts per platform, with the most common failure reasons, and a filterable receipt log.

Transports#

Which path carried a notification. Every receipt records one.

TransportDescription
apnsApple Push Notification service (iOS)
voipPushKit VoIP push (iOS calling apps)
webpushWeb Push (browsers)
pnThe Abrova connection (Android)
fcmFirebase, when the optional [Android FCM bridge](/docs/push/android-fcm) is set up

With the FCM bridge on, a push travels over both Android paths. deliveredVia then says which copy the device received first, pn or fcm.

Get Message Stats#

Aggregate delivery / open / click rates for a single message.

bash
curl -X GET "https://push-api.abrova.ir/receipts/message/msg_abc123/stats" \
  -H "x-api-key: ab_live_your_api_key" \
  -H "x-server-secret: ab_srv_your_server_secret"

Response

json
{
  "total": 1000,
  "sent": 980,
  "delivered": 950,
  "opened": 450,
  "clicked": 120,
  "failed": 20,
  "deliveryRate": 96.94,
  "openRate": 47.37,
  "clickRate": 12.63
}

Get Individual Receipts#

Per-device receipt for a single message — includes timestamps for each lifecycle stage and the action button tapped.

bash
curl -X GET "https://push-api.abrova.ir/receipts/message/msg_abc123" \
  -H "x-api-key: ab_live_your_api_key" \
  -H "x-server-secret: ab_srv_your_server_secret"

Response

Returns an array of receipts, newest first.

json
[
    {
      "id": "rcpt_1",
      "messageId": "msg_abc123",
      "deviceId": "dev_xyz",
      "platform": "ios",
      "status": "clicked",
      "sentAt": "2024-01-15T10:00:00Z",
      "deliveredAt": "2024-01-15T10:00:01Z",
      "openedAt": "2024-01-15T10:05:00Z",
      "clickedAt": "2024-01-15T10:05:30Z",
      "actionId": "shop_now"
    },
    {
      "id": "rcpt_2",
      "messageId": "msg_abc123",
      "deviceId": "dev_abc",
      "platform": "android",
      "status": "failed",
      "sentAt": "2024-01-15T10:00:00Z",
      "error": "InvalidRegistration"
    }
]

Get Action Stats#

See which action buttons users clicked most.

bash
curl -X GET "https://push-api.abrova.ir/receipts/message/msg_abc123/actions" \
  -H "x-api-key: ab_live_your_api_key" \
  -H "x-server-secret: ab_srv_your_server_secret"

Response

json
[
  { "actionId": "shop_now", "count": "85" },
  { "actionId": "remind_later", "count": "35" }
]

count is returned as a string.

Get Device Receipts#

Receipt history for a specific device, newest first. limit defaults to 50. Each receipt includes its parent message object (title, body, ...).

bash
curl -X GET "https://push-api.abrova.ir/receipts/device/dev_xyz?limit=20" \
  -H "x-api-key: ab_live_your_api_key" \
  -H "x-server-secret: ab_srv_your_server_secret"

Response

json
[
  {
    "id": "rcpt_1",
    "messageId": "msg_abc123",
    "deviceId": "dev_xyz",
    "status": "opened",
    "sentAt": "2024-01-15T10:00:00Z",
    "openedAt": "2024-01-15T10:05:00Z",
    "message": { "id": "msg_abc123", "title": "New message", "body": "..." }
  },
  {
    "id": "rcpt_2",
    "messageId": "msg_def456",
    "deviceId": "dev_xyz",
    "status": "clicked",
    "sentAt": "2024-01-14T15:30:00Z",
    "clickedAt": "2024-01-14T15:32:00Z",
    "actionId": "view_order",
    "message": { "id": "msg_def456", "title": "Order update", "body": "..." }
  }
]

Get App-wide Stats#

Aggregate stats across the app that owns your API key, for a date range. Without startDate/endDate it covers the last 30 days. deliveryRate here is delivered / totalRecipients.

bash
curl -X GET "https://push-api.abrova.ir/receipts/stats?startDate=2024-01-01&endDate=2024-01-31" \
  -H "x-api-key: ab_live_your_api_key" \
  -H "x-server-secret: ab_srv_your_server_secret"

Response

json
{
  "totalMessages": 150,
  "totalRecipients": 45000,
  "delivered": 43500,
  "opened": 18000,
  "clicked": 4500,
  "failed": 1500,
  "deliveryRate": 96.67,
  "openRate": 41.38,
  "clickRate": 10.34
}

SDK Integration#

Receipts are tracked automatically by the SDKs. The only manual hook is on iOS: if the SDK is not your UNUserNotificationCenter delegate, call AbrovaPush.shared.handleRemoteNotification(userInfo:) from application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Each message is confirmed once per device, and redeliveries are not counted twice. Ensure you have the latest version installed:

PlatformWhat confirms delivery
AndroidThe SDK, for every notification the device receives
iOSThe SDK for foreground, tapped and real-time messages; a Notification Service Extension for background APNs notifications
WebThe service worker for Web Push, and the SDK for messages received while the page is open

Webhooks for Receipts#

When a device confirms delivery, a message.delivered webhook fires:

json
{
  "event": "message.delivered",
  "timestamp": "2024-01-15T10:00:01Z",
  "webhookId": "wh_123",
  "data": {
    "messageId": "msg_abc123",
    "deviceId": "dev_xyz",
    "title": "New message"
  }
}

Available Webhook Events

  • message.sent — Message sent
  • message.delivered — A device confirmed delivery
  • message.failed — Delivery failed
  • message.no_recipients — The target had no registered devices
  • device.registered, device.unregistered, device.updated — Device lifecycle

Opens, clicks and dismissals are recorded on the receipt but do not fire webhooks.

این صفحه مفید بود؟
گزارش مشکل