Implement Push Notifications via SDK (Customer.io) for Retention Programs

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 push is going to drive revenue (not just “engagement”), the SDK implementation matters as much as the creative. With Customer.io, your push channel performance is basically a reflection of three things: device capture, identity stitching, and event timing. If you want a second set of eyes on your tracking plan before you scale sends, book a strategy call—most retention programs don’t fail on messaging, they fail on data fidelity.

In a typical D2C setup, push becomes your fastest lever for cart recovery and replenishment nudges—especially when email is delayed by inbox placement or SMS is too expensive to use broadly. But it only works if your app (or web) reliably tells Customer.io who the user is and what they just did.

How It Works

At a mechanical level, push in Customer.io starts on the device. The SDK registers the device for push, sends the push token to Customer.io, and ties that device to a person profile once you identify the user. From there, your app events (add-to-cart, checkout started, order placed, product viewed) become the triggers and filters that decide who gets what push and when.

  • Device registration: the SDK captures the device token (APNs for iOS, FCM for Android; browser token for web push) so Customer.io has a deliverable endpoint.
  • Identity stitching: when a shopper logs in or you otherwise know who they are, you call identify so Customer.io can attach the device to the right person record. This is the difference between “we sent pushes” and “we sent pushes to the right person.”
  • Event tracking: you call track from the app for key commerce behaviors. Customer.io uses those events to enter people into campaigns, branch logic, apply frequency rules, and measure conversions.
  • Anonymous → known journey: in practice, a lot of D2C traffic starts anonymous (browse, PDP views, even add-to-cart). You want those events captured in a way that can be merged once the user identifies—otherwise your cart recovery push triggers late or not at all.

Step-by-Step Setup

Before you touch Customer.io campaigns, get the plumbing right. The fastest path is: install SDK, confirm device tokens flow, confirm identify happens at the right moments, then validate your core events with real payloads.

  1. Install the correct Customer.io SDK for your platform.
    Use the native mobile SDK (iOS/Android) or your chosen wrapper (React Native/Flutter/Expo) so you can reliably register push tokens and handle notification opens.
  2. Initialize the SDK on app launch.
    Do this early in the app lifecycle so token registration and event tracking don’t miss first-session behavior (common with PDP views and early add-to-cart events).
  3. Enable push permissions and capture the push token.
    Request permission at a moment that makes sense (post-value, not on first open). Confirm the SDK forwards the token to Customer.io and that the device shows up under the person’s devices once identified.
  4. Implement identify when the user becomes known.
    Call identify on login, account creation, and any “email capture” moment where you can confidently map the device to a person. Pass stable identifiers (your internal customer ID; email if it’s your primary keying strategy).
  5. Implement track for retention-critical events.
    At minimum for D2C: Product Viewed, Added to Cart, Checkout Started, Order Placed. Include properties like SKU, product name, category, price, cart value, and currency so you can segment and personalize later.
  6. Track push delivery and open behavior (where supported).
    Make sure the SDK is configured to report opens so you can separate “sent” from “actually engaged” when you tune frequency and creative.
  7. Validate identity + events in Customer.io activity logs.
    Use a real device, run through browse → add-to-cart → login → purchase, and confirm: (a) events appear in order, (b) the device attaches to the identified profile, and (c) no duplicate people are being created.

When Should You Use This Feature

Push is best when timing matters and you can earn the right to interrupt. In most D2C retention programs, it performs when you tie it to high-intent behaviors and keep the audience tight—otherwise you burn opt-in rates and lose the channel.

  • Cart abandonment (app-first shoppers): trigger a push 30–90 minutes after Checkout Started with no Order Placed. This tends to outperform email for mobile-heavy brands because it hits while intent is still warm.
  • Browse abandonment with a strong signal: if someone views the same SKU twice in 24 hours or spends 60+ seconds on a PDP, a single push can work—especially for replenishable or “decision” categories (skincare routines, supplements).
  • Replenishment / repeat purchase: if you track Order Placed with item-level data, you can time pushes based on estimated depletion windows (e.g., 21 days after a 30-day supply, with a guardrail for recent reorders).
  • Winback for lapsed app users: segment users who haven’t opened the app in 30+ days but have purchased before. Push can re-open the loop before you spend on paid.

Real scenario: A D2C skincare brand sees a lot of “add to cart” in-app, but checkout completion lags. With SDK events wired correctly, they run: Added to Cart → wait 45 minutes → if no Order Placed, send a push featuring the exact product name and a deep link back to cart. The key is identity stitching—if the user logs in at checkout, you still want the earlier cart event attached to the same profile so the suppression works.

Operational Considerations

Once the SDK is live, the operational work is making sure data stays trustworthy as the app evolves. Most issues show up as: duplicated profiles, missing tokens, or events firing from the wrong layer (client vs server) causing double sends.

  • Segmentation depends on event consistency: if one app version sends Added to Cart and another sends AddToCart, your cart recovery audience silently shrinks. Lock event naming and properties in a tracking spec.
  • Identity strategy needs a single “source of truth”: decide whether Customer.io keys people by internal customer ID, email, or both. In practice, this tends to break when checkout allows guest purchase and later account creation—plan how you’ll merge or map those identities.
  • Anonymous activity merging: if you let users browse and add-to-cart before login, you need a clean merge path so pre-login events aren’t orphaned. Otherwise, suppression logic fails (you’ll nudge people who already purchased on another device).
  • Orchestration with email/SMS: push is rarely the only channel. Use the same events to coordinate holds and suppressions (e.g., if SMS is sent, hold push for 12 hours; if purchase occurs, immediately exit).
  • Data flow latency: if events arrive late (batching, offline mode), your “45-minute cart push” can turn into a “next morning” push. Decide which events must be real-time and which can be delayed.

Implementation Checklist

Use this as your go-live gate. If you can’t check these off with a real device test, you’re going to spend the next month debugging campaign weirdness that’s actually SDK behavior.

  • SDK initializes on app start without errors
  • Push permission prompt is implemented intentionally (not on first open by default)
  • Device token is captured and visible in Customer.io under the correct person
  • identify fires on login/account creation and does not create duplicate profiles
  • Core events tracked: Product Viewed, Added to Cart, Checkout Started, Order Placed
  • Event payloads include SKU/item identifiers and order/cart value where relevant
  • Notification open handling is configured so opens are attributed correctly
  • Suppression logic is possible (purchase event reliably arrives and can exit campaigns)

Expert Implementation Tips

The delta between “push exists” and “push prints money” is usually a couple of unsexy decisions around identity and payload design.

  • Track at the moment of truth, not the UI moment: for example, fire Checkout Started when the checkout session is actually created, not when the user taps a button that might fail.
  • Include deep link targets in your event properties: if Added to Cart includes a cart_url or deep link path, you can reuse it across push templates without brittle logic.
  • Design properties for segmentation first: category, subscription-eligible, margin tier, and replenishment window are segmentation gold. If you don’t send them now, you’ll end up rebuilding flows later.
  • Guardrails beat cleverness: add simple frequency caps and “recent purchase” suppressions early. Over-messaging kills opt-ins, and you don’t get them back easily.

Common Mistakes to Avoid

Most teams don’t break push with the campaign—they break it with inconsistent tracking and identity churn. These are the issues that show up as “why is performance weird?” two weeks after launch.

  • Calling identify too late: if you only identify after purchase, you can’t reliably run cart recovery or browse follow-ups.
  • Creating duplicate people: mixing identifiers (sometimes email, sometimes customer ID) without a clear policy leads to split histories and inaccurate suppression.
  • Double-firing events: tracking both client-side and server-side without deduplication inflates audiences and triggers duplicate messages.
  • Missing item-level data: “Order Placed” without SKUs forces generic messaging and weak replenishment logic.
  • Permission prompt too early: asking on first launch tanks opt-in rates. Earn it after the user sees value (wishlist, cart, order tracking).

Summary

If you want push to drive retention outcomes, treat the SDK as revenue infrastructure: capture devices, stitch identity cleanly, and track events with properties you can actually segment on.

Once that’s stable, cart recovery, replenishment, and winback flows become straightforward—and measurable.

Implement Push Notification Channel with Propel

If you’re already running retention in Customer.io, the highest-leverage help is usually upstream: tightening the SDK event spec, fixing identity stitching, and pressure-testing suppression logic before you scale sends. If you want to sanity-check your tracking plan against your revenue use cases (cart recovery, repeat purchase, reactivation), book a strategy call and we’ll map the exact events/identifiers you need so your push programs don’t get stuck in debugging mode.

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