Summarize this documentation using AI
Overview
If you’re running push through Customer.io, the win isn’t “sending push”—it’s getting clean device + identity data so your cart recovery, replenishment, and winback programs actually hit the right person on the right device. If you want a second set of eyes on your tracking plan before you ship it, book a strategy call and we’ll pressure-test it like an operator would.
In most retention programs, push becomes your highest-leverage channel for speed (cart saves), habit-building (reorder nudges), and reactivation (time-sensitive offers). But in practice, it tends to break when device tokens aren’t reliably captured, users aren’t identified correctly after login, or events don’t fire consistently across app states.
How It Works
Customer.io push is driven by two things: (1) a device that’s opted in and registered to a person profile, and (2) events/attributes that decide when someone should get a message. The SDK is what stitches those together—without it, you’re basically guessing.
- Device registration: your app collects the push token (APNs on iOS, FCM on Android) and the SDK sends it to Customer.io so it’s attached to a person.
- Identity stitching: anonymous app activity is common (browsing before login). Once a user logs in (or you otherwise know who they are), you identify them so Customer.io can connect the device + events to the right customer record.
- Event-driven orchestration: you track key retention events (e.g.,
Add to Cart,Checkout Started,Order Placed) and Customer.io automations decide who gets push, when, and with what content. - Delivery + measurement: push sends to the device token(s) on the profile. You’ll typically evaluate performance via downstream conversion events (purchase, session start, checkout) rather than “push opened” alone.
Real D2C scenario: a shopper adds a product to cart in your app, gets distracted, and closes the app. If you’ve registered the device token and fired Add to Cart with the right product payload, you can send a push 30–60 minutes later with the exact item name and a deep link back to the cart. If identity stitching is wrong, you’ll either miss them entirely or message the wrong profile (which is how you get “creepy push” complaints).
Step-by-Step Setup
Before you build any journeys, get the fundamentals right: SDK installed, device tokens flowing, and a clean identify strategy. If you skip this and start building campaigns, you’ll spend weeks debugging “why didn’t push send?” instead of driving revenue.
- Install the Customer.io mobile SDK
- Add the Customer.io SDK to your iOS/Android app (or your framework SDK like React Native/Flutter/Expo).
- Initialize the SDK on app launch so it can capture lifecycle events and register devices consistently.
- Configure push credentials
- iOS: set up APNs (and certificates/keys) and enable push capabilities in your app.
- Android: configure Firebase Cloud Messaging (FCM) and ensure your app can receive tokens.
- Confirm Customer.io channel settings match your platform configuration so tokens are accepted and stored.
- Register device tokens reliably
- On iOS, capture APNs token after the user grants permission (and handle token refresh).
- On Android, capture FCM token (and handle token refresh).
- Send the token to Customer.io through the SDK so it attaches to the correct person profile.
- Implement a strict identify strategy
- Call
identifyas soon as you have a stable customer identifier (login, account creation, or verified phone/email). - Use the same identifier everywhere (app, web, backend) to avoid split profiles.
- If you support guest checkout, decide whether you’ll identify at email capture (common for cart recovery) or only after account creation (cleaner, but you’ll lose some reach).
- Call
- Track retention-critical events with useful payloads
- At minimum:
Product Viewed,Add to Cart,Checkout Started,Order Placed,Subscription Created(if applicable). - Include properties you’ll actually use in messaging and segmentation:
product_id,product_name,variant,price,cart_value,category. - Keep event naming consistent across platforms (iOS/Android/web) so your segments don’t fragment.
- At minimum:
- Validate in Customer.io before scaling
- Pick a test user, opt into push, and confirm the device shows up on the profile.
- Trigger test events from the app and confirm they appear in activity logs quickly and with the expected payload.
- Send a test push and verify delivery on-device (not just “sent” in the UI).
When Should You Use This Feature
Push is most effective when timing matters and you can personalize based on real app behavior. If your tracking is solid, it becomes the channel that closes the gap between intent and purchase.
- Cart recovery (app-first brands): trigger off
Add to CartorCheckout Started, then suppress ifOrder Placedhappens within your hold window. - Browse-to-buy nudges: a shopper views the same category twice in 48 hours—send a push with bestsellers or a restock alert.
- Replenishment / repeat purchase: use
Order Placed+ SKU-level “days to replenish” logic to nudge at the right time (especially for consumables). - Reactivation: target customers who haven’t opened the app in 30–60 days but have high historical AOV or subscription churn risk.
- Post-purchase retention: shipping delivered → “how to use it” → “complete the routine” sequences, driven by events from your backend + app opens.
Operational Considerations
Most push programs fail for operational reasons, not creative reasons. Treat push like a data product: define ownership, enforce naming conventions, and build orchestration rules that prevent over-messaging.
- Segmentation depends on identity hygiene: if your app identifies late (or inconsistently), you’ll end up with anonymous devices that can’t be targeted for revenue flows. Decide your “moment of truth” for identify and make it non-negotiable.
- Cross-device reality: one person can have multiple devices/tokens. Make sure your suppression logic is profile-based (purchase event) so you don’t keep nudging after conversion on another device.
- Data flow latency: cart recovery push is timing-sensitive. If your event pipeline lags, your “30 minutes later” push becomes “3 hours later” and performance craters.
- Orchestration with email/SMS: don’t run push in isolation. Common pattern: push first (fast + cheap), then email, then SMS for high-intent/high-value segments.
- Permission rate is a lever: your opt-in prompt timing matters. Many D2C apps improve reach by prompting after a value moment (e.g., after adding to cart or after order tracking is introduced), not on first open.
Implementation Checklist
If you want push to be dependable, this is the baseline checklist we expect to be true before building “real” retention automations.
- Customer.io SDK installed and initialized on app launch
- APNs/FCM configured and verified with real device testing
- Device token registration implemented + token refresh handled
identifycalled consistently at login/account creation (documented in eng notes)- Key retention events tracked with consistent names and usable properties
- Test user profile shows devices + events in Customer.io
- Basic suppression events available (
Order Placed,Unsubscribed, etc.) - Deep links defined for cart, PDP, and order status screens
Expert Implementation Tips
Once the basics are in place, small execution details drive most of the incremental lift—especially in cart recovery and replenishment.
- Send cart pushes off “cart updated” not just “add to cart” if your app allows quantity changes or variant swaps. Otherwise you’ll message stale cart contents.
- Use a short hold + fast suppression: for cart recovery, hold 30–60 minutes, then suppress instantly if
Order Placedfires. This prevents the classic “you forgot something” push after they already checked out. - Instrument “push clicked” as an app event you control: rely on your app opening via push deep link and fire an internal event like
Push Openedwithcampaign_idmetadata. It’s more actionable for optimization than channel-level open metrics alone. - Standardize product payloads across app + backend: if your backend emits
Order Placedwithskubut your app usesproduct_id, segmentation and personalization gets messy fast. - Throttle by customer value: in practice, we’ve seen better LTV when you allow more push frequency for high-repeat customers but clamp down for new buyers until they’ve shown intent.
Common Mistakes to Avoid
These are the issues that create silent failure: everything looks “set up,” but sends don’t land or performance is inexplicably weak.
- Identifying with different IDs across platforms: email on web, internal user ID on app, phone on backend. That’s how you get fractured profiles and missing devices.
- Not handling token refresh: tokens change. If you don’t update them, deliverability decays over time and you’ll blame creative.
- Prompting for push permission too early: first app open prompts usually underperform. You end up with low opt-in rate and a capped channel.
- Building journeys before validating data: if events are missing properties, you’ll ship generic pushes that feel irrelevant (and opt-outs spike).
- No suppression strategy: failing to suppress on purchase, subscription start, or support issues leads to “why are you still reminding me?” moments.
Summary
Push in Customer.io works best when the SDK is doing its job: device tokens are current, identities are stitched cleanly, and events arrive fast enough to trigger timely messages. If you’re cart-heavy or replenishment-driven, push is usually worth the engineering effort—just don’t skip the tracking discipline.
Implement Push with Propel
If you’re already on Customer.io, the fastest path is usually: lock the identify rules, verify token + event flow end-to-end, then build 2–3 push journeys that map directly to revenue (cart, replenishment, winback). If you want help auditing your SDK instrumentation and turning it into a reliable retention channel, book a strategy call and we’ll walk through what to track, where it breaks, and how to operationalize it.