Skip to main content

Overview

Zixflow tracks three push lifecycle events:
  1. Delivery Confirmed — notification arrives on the device
  2. Notification Opened — user taps the notification body
  3. Action Button Clicked — user taps a named action button

How Push Tracking Works


Tracking Events

1. Delivery Confirmed

SDK method: trackMetric(TrackMetric.Push(metric = Metric.Delivered, ...)) When using the default SDK FCM service, delivery is tracked automatically for recognized pushes. When using a custom service (example dual-path), track after the SDK helper returns false:

2. Notification Opened

When: User taps the notification body (default content intent). Action buttons are a separate event (still fire Opened first in the receiver). SDK method: trackMetric(TrackMetric.Push(metric = Metric.Opened, ...)) Default module: body opens are automatic. Custom display path — put delivery extras on the content PendingIntent and handle in the Activity:
See MainActivity.handlePushOpenIntent.

3. Action Button Clicked

Never automatic. In your BroadcastReceiver:
Pass the same notification_id into each action PendingIntent that you use with notify(). Use intent action …PUSH_NOTIFICATION_ACTION (match your manifest filter). Reference: NotificationActionReceiver.kt. Required properties: Zixflow-Delivery-ID, action_index, action_name. Recommended: Zixflow-Delivery-Token, action_deeplink. After tracking, open the button deeplink (see Deeplink opening below).
The Android example routes body and action deeplinks through one helper (DeeplinkRouter.kt):
Body open + deeplink (custom display path — put extras on the content intent, then):
Action open + deeplink (after tracking Opened + Action Clicked + cancel):
Declare matching intent filters / activities for your custom scheme if you use in-app hosts. External https:// URLs use ACTION_VIEW.

Action Buttons Format

Maximum 2 buttons; index is 0-based; empty deeplink is allowed.

Custom FirebaseMessagingService (dual-path)

See Push Notifications — Custom FirebaseMessagingService for:
  1. tools:node="remove" on ZixflowFirebaseMessagingService
  2. 3-arg onMessageReceived(context, message, handleNotificationTrigger)
  3. Fallback Delivered + manual display when false

Tracking Decision Flowchart


Fallback for Non-Zixflow Push

If there is no delivery ID, skip Zixflow push metrics. Do not use reserved event names for external pushes.

Testing

Enable ZixflowLogLevel.DEBUG. In the dashboard → MessagingPush Notifications, check Delivered, Opened, and Clicked.