Summarize this documentation using AI
Overview
If your retention program runs on behavioral triggers (browse, add-to-cart, checkout started, purchase), the SDK upgrade is less about “being current” and more about protecting the tracking layer your Customer.io segments and flows depend on. If you want a second set of eyes before you ship, book a strategy call—most issues here don’t show up until you notice attribution gaps in cart recovery or repeat purchase.
In most D2C stacks, the 4.x → 4.3 bump is where teams either tighten identity stitching (anonymous → known) and event hygiene—or accidentally create duplicates and “missing conversion” headaches that quietly drag down revenue.
How It Works
At a practical level, your SDK is doing three jobs: creating an install/device identity, stitching that identity to a known customer when they log in or check out, and streaming events/attributes into Customer.io fast enough that campaigns fire while intent is still hot.
- Installation initializes a device/app identity: the SDK generates and stores identifiers used for push tokens, in-app eligibility, and deduping. If this layer changes during upgrade and you don’t validate it, you’ll see broken push reach or inflated “new users.”
identify()stitches anonymous behavior to a known profile: the moment a shopper logs in, creates an account, or hits a “continue as email” step, you should callidentifywith your canonical customer ID (and email if you use it). Done right, pre-login events (product views, add-to-cart) attach to the same person who later purchases.track()sends events that power segmentation + triggers: Customer.io segments and campaigns don’t care about your code elegance—they care that event names, properties, and timestamps are consistent. Small schema drift during an SDK upgrade can break “Added to Cart in last 2 hours” audiences overnight.- Attribute updates keep audiences accurate: updating attributes like
last_order_date,lifetime_value,sms_opt_in, orpush_opt_inis what makes suppression and prioritization work (e.g., don’t send cart recovery to someone who already purchased).
Real scenario: a shopper browses on mobile, adds a product to cart, then creates an account at checkout. If you delay identify() until after purchase, your cart abandonment flow will treat them as anonymous and never fire the right message—or worse, it fires to a different profile later and looks like “phantom recovery.” The upgrade is your chance to tighten that stitch point.
Step-by-Step Setup
Plan this like a revenue-impacting change, not a routine dependency bump. The goal is to upgrade to 4.3 while keeping identity, event names, and campaign triggers stable.
- Inventory your current tracking contract.
Pull a list of the events and critical properties your retention flows rely on (e.g.,Product Viewed,Added to Cart,Checkout Started,Order Completed; properties likesku,price,cart_value,currency,variant_id). This becomes your “don’t break this” checklist. - Upgrade the SDK dependency to 4.3 in your app.
Do this in a branch and treat it like you would a payments SDK update: you’re not done until you validate data in Customer.io. - Confirm initialization runs once and early.
Initialize the SDK at app start (or as recommended for your platform) so device identity and push token registration behave consistently across sessions. - Standardize your
identify()moment.
Pick the earliest reliable point where you know the customer (login, account creation, email capture, or checkout identity step) and callidentifythere—every time. Include your canonical ID and any attributes you use for suppression/priority (e.g.,email,phone,country,marketing_opt_in). - Track events with stable names and required properties.
Keep event names identical to what campaigns/segments expect. If you must rename anything, do it as a coordinated migration (dual-write old + new temporarily) so you don’t break live automations. - Validate identity stitching with a controlled test.
Run a test user through: open app → browse → add to cart → then log in. In Customer.io, confirm the pre-login events appear on the same person profile after identification (not split across multiple profiles). - Validate campaign triggers in real time.
Trigger a sandbox cart abandonment workflow based on your events. Confirm the person enters within minutes, and confirm purchase events exit/suppress correctly. - Ship with monitoring.
For the first 48–72 hours, watch for drops in event volume, spikes in “new people,” or sudden declines in conversion for cart recovery and post-purchase flows.
When Should You Use This Feature
SDK upgrades matter most when your retention program depends on app-side behavior and identity stitching—not just email capture. If you’re pushing into mobile-first journeys, 4.3 is worth prioritizing.
- Your cart recovery is event-triggered from app behavior. If “Added to Cart” is coming from the app, a small tracking regression can wipe out a meaningful chunk of recoverable revenue.
- You rely on anonymous → known stitching. Common in D2C: people browse anonymously, then convert when they see shipping costs, promos, or reviews. If stitching is messy, your “high intent” audiences get diluted.
- You use push/in-app as a retention lever. Push token handling and device identity are unforgiving—upgrade validation prevents silent reach loss.
- You’re cleaning up duplicate profiles. In practice, duplicates usually come from inconsistent IDs across web/app, or calling
identifywith different identifiers across sessions. An upgrade is a good forcing function to standardize.
Operational Considerations
This is where retention programs usually break: the SDK is “working,” but the data isn’t usable for segmentation and orchestration at scale. Treat these as non-negotiables before you roll out new flows.
- Segmentation depends on schema stability. If your “Added to Cart” event stops sending
cart_valueor switchessku→product_id, your segments quietly shrink and your recovery sends drop. - Identity stitching must be deterministic. Pick one canonical person identifier (typically your internal customer ID). Don’t alternate between email, phone, and internal ID across platforms unless you have a deliberate mapping strategy.
- Orchestration needs suppression signals. Ensure purchase events and order attributes arrive quickly enough to suppress cart recovery and trigger post-purchase cross-sell. Late purchase events create the classic “why did we send an abandonment message after they bought?” problem.
- Cross-device reality: a lot of D2C shoppers browse on mobile and buy on desktop. If your web tracking and app tracking use different IDs, you’ll never get clean frequency capping or channel prioritization.
- Event volume and rate limits: if you track every tiny UI interaction, you’ll drown Customer.io in noise and make segments expensive to reason about. Track what you can act on.
Implementation Checklist
Use this to keep the upgrade from turning into a slow-motion tracking incident. If you can check every box below, your retention automations should behave the same—or better—on 4.3.
- SDK upgraded to 4.3 in all targets (iOS/Android/Web where applicable)
- SDK initializes consistently at app start
identify()called at a single, consistent “known user” moment- Canonical customer ID standardized across app + web
- Core retention events verified: Product Viewed, Added to Cart, Checkout Started, Order Completed
- Required properties present and typed correctly (numbers as numbers, timestamps as timestamps)
- Anonymous pre-login events successfully merge onto known profile after identify
- Push token/device registration verified post-upgrade
- Key campaigns validated end-to-end (entry + suppression + exit on purchase)
- Post-release monitoring plan in place (event volume, new profiles, duplicate rate)
Expert Implementation Tips
These are the operator moves that keep your retention engine reliable when you’re scaling flows and channels.
- Dual-write during schema changes. If you must change event names/properties, send both the old and new versions for 1–2 weeks. Migrate segments and triggers gradually, then sunset the old.
- Identify earlier than you think. For D2C, email capture (even before account creation) is often the best stitch point. Waiting until “account created” leaves a big chunk of high-intent behavior stranded as anonymous.
- Enforce an event contract. Write down required properties for each event and validate them in QA. Most retention “bugs” are missing properties, not missing events.
- Track purchase in a way that supports suppression. Include
order_id,total,currency, and line items (SKU/variant) if you use product-specific replenishment or cross-sell. - Watch for duplicate people right after release. In practice, duplicates spike when apps call
identifywith email for some users and internal ID for others. Fixing it later is painful because historical events stay split.
Common Mistakes to Avoid
Most teams don’t “break the SDK”—they break the data assumptions their campaigns were built on. Avoid these and you’ll save yourself weeks of forensic debugging.
- Changing event names without updating triggers. Your cart flow is listening for a specific string. One rename and entries drop to zero.
- Calling
identify()inconsistently. If you identify on login sometimes and on purchase other times, you’ll fragment profiles and lose pre-purchase intent signals. - Using non-canonical IDs. Emails change, phone numbers change. If your ID strategy isn’t stable, your LTV and frequency logic won’t be either.
- Not validating suppression timing. Purchase events arriving late means you’ll send abandonment nudges after conversion—bad CX and wasted sends.
- Over-tracking meaningless events. Flooding Customer.io with noisy UI events makes segmentation harder and hides the signals that actually drive revenue.
Summary
Upgrading to SDK 4.3 is worth it when you treat it as a tracking integrity project: stable event schema, deterministic identity stitching, and fast suppression signals. If those three hold, your cart recovery, repeat purchase, and reactivation flows get more reliable—not just “updated.”
Implement 4.3 Upgrade with Propel
If you’re upgrading SDKs while also trying to hit weekly revenue targets, it helps to approach this like an operational rollout: validate identity stitching, protect your trigger events, and monitor the right leading indicators. Teams running Customer.io often loop us in to pressure-test the tracking plan and QA the retention flows end-to-end—if that’s useful, book a strategy call and we’ll map the safest upgrade path around your highest-revenue automations.