Test your push implementation in Customer.io (SDK-focused)

Customer.io partner logo

Table of Contents

Summarize this documentation using AI

This banner was added using fs-inject

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Overview

If you’re using Customer.io for retention, push only performs when your SDK implementation is clean: device tokens are registered, identities are stitched correctly, and the right events hit the workspace at the right time. If you want a second set of eyes before you scale push to revenue-critical flows (cart recovery, replenishment, winback), you can book a strategy call and we’ll pressure-test the tracking and orchestration end-to-end.

The goal of “testing push” isn’t just sending a message to your own phone. It’s proving that (1) the right person profile owns the right device, (2) your app events arrive with the right identifiers, and (3) campaigns trigger reliably when real shoppers do real things.

How It Works

In practice, push breaks in two places: device registration and identity stitching. Customer.io can only deliver push when it has a valid device token tied to the correct person, and your SDK calls consistently connect anonymous browsing to known customers after login or checkout.

  • Device registration: Your mobile app SDK collects the APNs token (iOS) or FCM token (Android) and sends it to Customer.io. Customer.io stores that device on the person profile and uses it as the delivery target.
  • Identify + stitch: When a user is anonymous, the SDK may track activity under an anonymous profile. Once the user logs in (or you can deterministically identify them), you call identify so Customer.io can attach the device and events to the known customer record.
  • Event-driven triggers: Push campaigns typically trigger off SDK-tracked events like Viewed Product, Added to Cart, Started Checkout, or Order Placed. Testing confirms those events arrive with the right payload (SKU, cart value, category) so segmentation and personalization don’t quietly fail.
  • Verification loop: You validate three things in Customer.io: the person profile shows a device, the activity feed shows your test events, and a test push (or campaign) shows “sent” and “delivered” to that device.

Step-by-Step Setup

Before you test campaigns, you want to prove the plumbing. Treat this like a QA pass for revenue: one clean device, one clean identity, and a small set of canonical events.

  1. Install the correct Customer.io SDK for your app stack.
    Confirm you’re on the supported SDK for iOS/Android/React Native/Flutter and that push is enabled in your app project (APNs entitlements for iOS, FCM setup for Android).
  2. Initialize the SDK on app launch.
    Do this as early as possible so sessions and device registration don’t get missed. If initialization happens after a login screen, you’ll lose early funnel events.
  3. Request push permission (iOS) and capture the token.
    On iOS, permission gating is real—no permission means no token, which means no deliverability. Make sure the token registration callback is wired and forwarded to the SDK.
  4. Verify device registration in Customer.io.
    Open your own person profile in Customer.io and confirm a device is present (platform + last seen). If you don’t see a device, don’t move on—campaign debugging will be misleading.
  5. Implement identify at the right moment.
    Call identify immediately after a deterministic identity event (login, account creation, or checkout where you have an email/customer_id). This is the difference between “push works on my phone” and “push works on every customer.”
  6. Track a small set of high-signal events.
    Start with 3–5 events you’ll actually use in retention: Added to Cart, Started Checkout, Order Placed, and optionally Viewed Product. Include properties you’ll segment on (SKU, category, cart_value, currency).
  7. Send a test push to a known profile.
    Use a transactional/test push or a tightly targeted campaign to your own profile. Confirm it moves through sent → delivered and appears on-device.
  8. Run an end-to-end scenario and confirm triggering.
    Do a realistic flow (add to cart → close app → wait) and confirm your “cart abandonment” trigger conditions match the events you’re emitting.

When Should You Use This Feature

Testing push implementation matters any time you’re about to depend on push for revenue or you’re seeing inconsistent performance (low deliverability, missing triggers, or weird audience sizes). Most teams wait until a campaign underperforms—by then, you’re debugging in production.

  • Cart recovery: You’re launching a push sequence 30–120 minutes after Added to Cart and you need to be sure the cart event is tracked even if the app is backgrounded or killed.
  • Repeat purchase / replenishment: You’re triggering off Order Placed + product type (e.g., supplements) and need accurate SKU/category properties to time reminders correctly.
  • Browse-to-buy nudges: You’re using Viewed Product and want to ensure anonymous browsing stitches to the customer after login—otherwise you’ll under-target and mis-personalize.
  • Reactivation: You’re building a “no app opens in 30 days” segment and need confidence that app lifecycle events and last-seen timestamps are reliable.

Real D2C scenario: A skincare brand launches an “abandoned cart” push 45 minutes after Added to Cart. It looks fine in QA, but revenue is flat. The root cause is that identify only fires on account creation, so returning shoppers who check out as guests never stitch—Customer.io sees their device under an anonymous profile, while the cart event is tied to an email profile from checkout. Testing would catch this immediately: device exists on Profile A, cart event lands on Profile B, and no campaign can bridge the gap.

Operational Considerations

Once the SDK is “working,” the operational reality is making sure the data supports segmentation and orchestration without creating brittle dependencies between app releases and lifecycle changes.

  • Segmentation depends on consistent naming: Lock event names and key properties early (e.g., product_id vs sku). In most retention programs, we’ve seen one inconsistent property name quietly kill dynamic content and segment membership.
  • Identity strategy: Decide what your primary identifier is (customer_id vs email). Use one consistently in identify, and only update email as an attribute. Mixing identifiers is how you end up with duplicate people and split devices.
  • Anonymous-to-known stitching: Make sure anonymous activity merges into the known profile at login/checkout. If this isn’t deterministic, your “viewed product” and “added to cart” audiences will be smaller than reality.
  • Data flow timing: Mobile networks are flaky. Events may arrive late or out of order. Build campaigns with a little tolerance (short delays, or “wait until” conditions) so you don’t fire the wrong push before the Order Placed event lands.
  • Orchestration across channels: If you also run email/SMS, decide push’s role. A common approach is push first for speed, then email if no purchase, then SMS only for high-intent segments. This only works if your app events are trustworthy.

Implementation Checklist

Use this as your “done means done” list before you trust push for cart recovery or winback. If any item is shaky, you’ll see it later as low deliverability, missing triggers, or duplicate messaging.

  • SDK initializes on app launch (not delayed until after login)
  • Push permission prompt logic is implemented (iOS) and token registration is wired
  • Device appears on the correct person profile in Customer.io
  • identify fires on login and any deterministic checkout path
  • Key retention events are tracked: Viewed Product, Added to Cart, Started Checkout, Order Placed
  • Event properties include the fields you’ll segment/personalize on (SKU/product_id, category, cart_value, currency)
  • Test push sends and delivers to a real device
  • End-to-end scenario confirms campaign triggers from real app behavior

Expert Implementation Tips

These are the small operator moves that keep push stable when you scale from “one test device” to “tens of thousands of shoppers across app versions.”

  • Instrument a debug mode: Add a hidden screen that shows current Customer.io identifier, device token status, and last 10 tracked events. It saves hours when QA says “it didn’t trigger.”
  • Version your event schema: If you need to change properties, add new keys rather than repurposing old ones. Retention campaigns tend to live for months; silent schema changes break segmentation.
  • Track “source of truth” purchase events: If orders can happen outside the app (Shop Pay, web checkout), make sure Order Placed is unified across sources. Otherwise you’ll send “complete your purchase” to someone who already bought on web.
  • Use guardrails in campaigns: Add exit conditions like “purchased since entering” and frequency caps. Even with perfect tracking, late events happen and you want the workflow to self-correct.

Common Mistakes to Avoid

Most push issues aren’t “Customer.io problems.” They’re implementation mismatches between how the app behaves and how the campaign assumes it behaves.

  • Calling identify too late: If you identify only after a purchase, you’ll never stitch pre-purchase browsing/cart events to the customer profile.
  • Relying on email as the only identifier: Emails change and guest checkouts complicate things. A stable customer_id reduces duplicates and improves device ownership accuracy.
  • Testing only with one happy-path device: Test iOS and Android, fresh install vs returning user, and logged-out vs logged-in states. Push often fails on one of these.
  • Assuming “sent” means “delivered”: Always verify delivery status. Token issues, permissions, and OS-level settings can block delivery even when Customer.io sends successfully.
  • Event names drift over time: If engineering renames Added to Cart to AddToCart, your campaigns quietly stop triggering. Lock the contract and monitor it.

Summary

Testing push implementation is really identity + device QA. Once you can prove devices attach to the right person and events arrive consistently, you can trust push for cart recovery, repeat purchase, and reactivation without guessing.

If your audiences look “too small,” or pushes only work for logged-in users, start with stitching and event consistency before you touch creative.

Implement Test Push with Propel

If you’re validating push for Customer.io, treat it like a retention system check: device registration, identity stitching, and event payloads that actually support segmentation. When teams want to move faster without breaking production flows, we’ll typically run a tight QA plan across iOS/Android, guest vs logged-in, and key revenue events, then map that back to the exact campaign triggers you’re about to launch.

If that would help, book a strategy call and we’ll walk through your SDK tracking, confirm your push readiness, and flag the failure points before they cost you revenue.

Contact us

Get in touch

Our friendly team is always here to chat.

Here’s what we’ll dig into:

Where your lifecycle flows are underperforming and the revenue you’re missing

How AI-driven personalisation can move the needle on retention and LTV

Quick wins your team can action this quarter

Whether Propel AI is the right fit for your brand, stage, and stack