Summarize this documentation using AI
Overview
If you’re running Customer.io push alongside another provider (or migrating between providers), the risk isn’t “can we send a notification?”—it’s whether the right device token stays attached to the right customer profile as users log in/out, reinstall, or switch devices. If you want a second set of eyes on your tracking and identity stitching before you scale sends, you can book a strategy call.
In most retention programs, multi-provider push becomes necessary during migrations, when you need a fallback provider for deliverability, or when different app surfaces are owned by different teams. The win is continuity: cart recovery and replenishment flows keep firing even while you change plumbing.
How It Works
At the SDK level, “multiple push providers” is really about managing device registration and identity so Customer.io always knows which push token(s) belong to which person. The mechanics are straightforward, but in practice this tends to break when tokens get registered to an anonymous profile and never get stitched after login.
- Each provider issues its own token. APNs/FCM tokens can rotate; third-party providers may wrap or proxy them. Treat tokens as ephemeral and expect re-registration.
- Customer.io needs a device record per install. Your app registers the device token with the Customer.io SDK so Customer.io can target that device for push.
- Identity stitching is the real work. You must identify the user (with a stable customer id) and ensure the device token is associated with that identified profile—not left on an anonymous profile created at install.
- Events drive retention timing; tokens drive delivery. Cart, browse, and purchase events trigger campaigns, but if the token is on the wrong profile, the campaign “sends” and nobody receives it.
Real D2C scenario: a shopper adds items to cart on mobile, gets distracted, then logs in later to check order history. If the device token was registered before login and never stitched, your “1-hour cart reminder push” fires to an anonymous profile and quietly fails to reach the logged-in customer—exactly the moment you needed it.
Step-by-Step Setup
Before you touch campaigns, get your SDK behavior correct in three moments: app install/open, permission grant/token refresh, and login/logout. That’s where multi-provider setups usually drift.
- Install and initialize the Customer.io SDK alongside your other push SDK.
Make sure initialization happens early in app lifecycle (app start) so device registration and event buffering behave consistently. - Request push permission and capture the token lifecycle.
Handle: initial token receipt, token refresh/rotation, and “permission changed” states. Your app should treat token refresh as a first-class event and re-register it. - Register the device token with Customer.io.
When you receive/refresh the APNs/FCM token, pass it to the Customer.io SDK so Customer.io’s device record stays current. - Identify as soon as the user is known.
On login (or when you can deterministically tie the user to an account), call the SDK identify method with your stable customer id. This is what stitches the device token from “anonymous install” to “real customer.” - Track retention events from the app with consistent naming.
Track events likeproduct_viewed,added_to_cart,checkout_started, andorder_completedfrom the app. Use the same customer id you use for identify so event attribution and push targeting line up. - On logout, decide your identity policy and implement it deliberately.
If your app supports logout, don’t leave the previous user’s token attached to their profile if the next person might use the device. Use the SDK’s reset/clear identity pattern so the next session starts clean. - Validate with a forced edge-case test.
Run: install → allow push → add to cart → login → token refresh (toggle airplane mode / reinstall) → confirm Customer.io shows the device under the identified profile and receives a test push.
When Should You Use This Feature
Multiple push providers is rarely a “nice to have.” It’s usually a response to operational reality—migration, redundancy, or different teams owning different stacks. The key is making sure the extra provider doesn’t create identity drift.
- Provider migration without losing revenue. Keep cart recovery and replenishment pushes running while you move from Provider A to Provider B.
- Fallback delivery for high-value flows. For example, keep Customer.io as orchestration but send “payment failed” or “back-in-stock” via a second provider if you see delivery gaps.
- Different push surfaces. One provider for marketing pushes, another for transactional/operational alerts—common in larger D2C teams.
- Regional/OS-specific constraints. If you have different delivery performance by region/device type, multi-provider can reduce single-point-of-failure risk.
Operational Considerations
Once you run two providers, the hard part becomes segmentation and orchestration: avoiding double-sends, ensuring correct eligibility, and keeping your data flow clean enough that you can trust reporting.
- Segmentation: build “push-reachable” audiences from device reality, not assumptions.
Segment on explicit device/push-enabled attributes (or Customer.io device presence) so you don’t route critical recovery flows to people who can’t receive them. - Data flow: token freshness beats token existence.
A stale token looks “valid” in many systems. Add a notion of last_token_updated_at (or equivalent) so you can suppress devices that haven’t refreshed in a long time. - Orchestration: pick one system of record for decisioning.
If Customer.io is your brain, keep all eligibility logic (cart state, purchase suppression, frequency caps) in Customer.io and only use the second provider as a delivery rail when needed. - Identity stitching: treat anonymous-to-known as a required path.
If your app has guest checkout or browse, you’ll generate anonymous activity. Make sure login/checkout stitches that activity so recovery campaigns target the actual customer profile. - Double-send prevention.
If both providers can send marketing pushes, you need a single “send authority” rule (e.g., only Customer.io sends marketing; the other provider is transactional only).
Implementation Checklist
Run this checklist before you declare the setup “done.” It’s the fastest way to avoid the classic multi-provider problems: wrong user, wrong device, or silent delivery failures.
- Customer.io SDK initializes on app start (not lazily after a screen loads)
- Device token registration runs on initial token receipt and on token refresh
- Identify is called immediately on login with a stable customer id
- Logout/reset behavior is implemented to prevent cross-user device leakage
- Core retention events are tracked from the app with consistent naming and properties
- At least one end-to-end test proves: install → token → identify → event → push delivery
- Segmentation exists for push-reachable users (and excludes stale/unreachable devices)
- A single system is responsible for marketing push decisioning (to prevent duplicates)
Expert Implementation Tips
The difference between “it works” and “it prints money” is whether you can trust identity and timing under messy real-world behavior—reinstalls, token rotation, and multi-device customers.
- Instrument token churn. Track an internal event like
push_token_updatedwith provider and platform. When cart recovery dips, token churn is often the culprit. - Stitch before you fire recovery timers. If your cart reminder starts from
added_to_cart, make sure that event is tied to an identified user whenever possible (or stitch anonymous activity quickly at login). - Use provider-aware routing only when you must. Most teams overcomplicate by branching sends by provider. Start with one primary rail and only add routing for specific failure modes.
- Validate multi-device behavior. High-LTV customers often have multiple devices. Ensure identify doesn’t overwrite device records incorrectly and that both devices remain targetable.
Common Mistakes to Avoid
These are the mistakes that create “ghost sends” (Customer.io reports a send, but nobody sees it) or, worse, sends to the wrong person on a shared device.
- Registering the token before login and never stitching it. Anonymous device stays orphaned; campaigns miss the real customer.
- Not handling token refresh. Everything works for weeks, then performance decays as tokens rotate.
- No logout/reset policy. Shared devices receive the previous user’s pushes—brutal for trust and compliance.
- Two providers both sending marketing pushes. Customers get duplicates, opt out, and your deliverability and opt-in rate degrade.
- Event tracking without consistent identity. Events land on one profile, device token on another; segmentation and reporting become misleading.
Summary
If you’re running multiple push providers, treat it as an identity and device-management project—not a messaging project.
Get token registration + identify + token refresh correct, then layer segmentation and orchestration so cart recovery and repeat purchase pushes keep landing reliably.
Implement Multiple Push Providers with Propel
If you’re orchestrating push in Customer.io while maintaining a second provider (migration, redundancy, or transactional separation), the fastest path is usually tightening SDK identity stitching and token lifecycle handling first—then aligning segments and send authority so you don’t double-send or lose attribution.
If you want an operator’s take on how to structure the tracking plan and rollout without breaking revenue-critical flows like cart recovery, you can book a strategy call.