Update Customer.io Mobile SDK from 3.x to 3.4

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 your retention program runs on app behavior (browse, add-to-cart, checkout started, purchase), your SDK version matters more than most teams want to admit—because small tracking changes create big gaps in segments and Journey entry. This guide breaks down how to move from 3.x to 3.4 in Customer.io without breaking identity stitching or event accuracy, and if you want a second set of eyes on the rollout plan, you can book a strategy call.

In most D2C apps, the “real” risk isn’t the code change—it’s silently losing attribution for cart recovery and repeat purchase because anonymous activity stops merging, or because identify happens too late in the session.

How It Works

Updating to 3.4 is mostly about keeping your tracking contract stable: the same identifiers, the same event names, and the same timing of calls. Customer.io’s SDK sits in your app, captures events, and ties them to a person profile once you identify the user. If that stitching changes (or regresses), your segments drift and your Journeys start triggering on incomplete data.

  • Install/upgrade the SDK so the app is running the 3.4 client libraries. Treat this as a data pipeline change, not just a dependency bump.
  • Identity stitching hinges on identify: anonymous events are only useful if they reliably merge into the known profile once the user logs in, creates an account, or you otherwise have a stable identifier.
  • Event tracking is your retention source of truth: cart recovery and replenishment flows usually depend on a small set of high-intent events (e.g., product_viewed, added_to_cart, checkout_started, order_completed) plus key properties (SKU, category, cart value, currency).
  • Device and channel routing depends on SDK registration: push eligibility and device audiences often break when the SDK upgrade changes registration timing or you stop updating device tokens on app open.

Real scenario: A skincare brand relies on an in-app + push cart recovery Journey that triggers 30 minutes after checkout_started if order_completed doesn’t happen. After an SDK update, identify starts firing only after the user hits the account screen, so checkout_started is logged anonymously and never merges. Result: fewer people qualify for the Journey, cart recovery drops, and nobody notices until revenue is down.

Step-by-Step Setup

Run this like a controlled migration: keep event names stable, validate identity merge behavior, then ramp rollout. The goal is to ship 3.4 without changing what your segmentation and orchestration already expect.

  1. Inventory your retention-critical tracking contract
    List the exact events and properties your Journeys and segments depend on (cart recovery, post-purchase cross-sell, replenishment, winback). Include naming, required properties, and expected firing timing.
  2. Upgrade the SDK to 3.4 in a feature branch
    Update your iOS/Android (or RN/Flutter wrapper) dependencies to the 3.4 line. Keep the rest of your tracking code unchanged initially—avoid “cleanup refactors” during the version bump.
  3. Confirm initialization runs early in app lifecycle
    Ensure SDK init happens on app start (not after login). In practice, late initialization creates missing first-session events, which are exactly where product discovery and cart intent happen.
  4. Harden your identify call
    Fire identify immediately when you have a stable ID (login success, account creation, magic link completion). Also update person attributes you segment on (email, phone, locale, acquisition source, loyalty tier) in the same moment so journeys don’t start with stale profile data.
  5. Validate anonymous → known merge behavior
    Do a test flow: open app anonymously → browse → add to cart → login → purchase. Confirm the pre-login events appear on the known profile. This is the single highest-leverage test for retention reliability.
  6. Verify push device registration and token updates
    Confirm the device is attached to the same person after identify, and that token refreshes still update on app open. Push drop-offs are often a device identity issue, not a creative issue.
  7. Run an event parity check in Customer.io
    In Activity logs, compare event volume and property completeness between the old app version and the 3.4 build. Look specifically at high-intent events: added_to_cart, checkout_started, order_completed.
  8. Roll out gradually
    Release to a small percentage first (or internal/beta channel). Watch segment counts and Journey entry rates before ramping to 100%.

When Should You Use This Feature

SDK updates are worth prioritizing when your retention program depends on app-side truth—especially when you’re orchestrating across push, in-app, and email based on real-time behavior. If your cart recovery or post-purchase flows have gotten “mysteriously quieter,” this is often where the problem actually lives.

  • Cart recovery in app-first funnels: when added_to_cart and checkout_started happen in-app, you need clean stitching so anonymous sessions don’t fall out of your recovery journeys.
  • Repeat purchase and replenishment: if you use product/SKU properties to drive “reorder” prompts or timed replenishment, you need consistent order_completed payloads and stable attribute updates.
  • Reactivation based on browsing intent: “viewed 3+ products in 7 days but no purchase” segments only work if product view events are captured early and attributed correctly.
  • Push-heavy retention: if push is a primary lever, SDK-level device identity and token updates are non-negotiable.

Operational Considerations

Most retention issues after an SDK upgrade show up as segmentation drift and Journey eligibility changes—not as obvious errors. Plan for that reality and instrument checks that map to revenue flows.

  • Segmentation stability: if segments rely on “performed event within X days,” even a small drop in event volume will shrink audiences. Track segment sizes before/after rollout for your top 5 money segments (cart abandoners, high AOV buyers, replenishment-eligible, churn-risk, winback).
  • Data flow timing: delayed identify means events land on an anonymous profile and never qualify the user for a Journey that expects a known profile. In practice, this tends to break when login is optional or when checkout happens before account creation.
  • Orchestration dependencies: if you use event properties to branch (category, price, subscription vs one-time), missing properties will route customers into the wrong path or default fallback messages.
  • Cross-platform consistency: iOS and Android often diverge in event payload shape over time. Use the SDK update as a forcing function to standardize event names/properties across platforms so your segments don’t need platform-specific logic.

Implementation Checklist

Before you ship, treat this as a production data change with a go/no-go checklist. You’re trying to prevent silent audience loss, not just prevent crashes.

  • 3.4 SDK installed and initializing on app start
  • identify fires immediately on login/account creation (not later in the session)
  • Anonymous events merge into known profiles after identify (validated with a full browse → cart → login → purchase test)
  • Retention-critical events still fire once (no duplicates) with the same names as pre-upgrade
  • Event properties required for branching are present (SKU, category, value, currency, order_id)
  • Push token registration still attaches to the correct person after identify
  • Segment counts and Journey entry rates monitored during staged rollout

Expert Implementation Tips

The teams that ship SDK updates cleanly do two things well: they lock the tracking contract, and they test identity like it’s a payment flow.

  • Make identify idempotent: call it whenever you regain certainty about the user (app open with cached auth, login success). Multiple calls are fine; missing the call is what hurts.
  • Track “cart state” explicitly: for cart recovery, don’t rely only on “added_to_cart.” Send a cart_updated event with item count and value so you can suppress recovery when cart is empty and prioritize high-value carts.
  • Use a single canonical event per intent: avoid having checkout_started on iOS and begin_checkout on Android. Consolidate now, or you’ll keep paying the tax in segmentation forever.
  • QA with real Journey entry, not just logs: a clean Activity log doesn’t guarantee your Journey triggers. Create a temporary internal Journey that triggers on your key events and confirms entry + exit conditions behave as expected.

Common Mistakes to Avoid

Most failures aren’t dramatic—they’re subtle and expensive. These are the ones that usually show up as “why did cart recovery revenue dip?” two weeks later.

  • Identify happens after checkout starts: you lose the highest-intent events to anonymous profiles, and they never qualify for known-profile Journeys.
  • Changing event names during the upgrade: segments and Journeys don’t magically update. If you rename, you need a migration plan (dual-send events for a period, or update all dependencies).
  • Dropping required properties: missing value or currency breaks revenue-based branching and “high intent” prioritization.
  • Duplicate event firing: common when both a screen view and a button click fire the same event. Duplicates inflate intent segments and cause over-messaging.
  • Not monitoring segment sizes during rollout: if you don’t baseline, you won’t notice drift until performance drops.

Summary

Move from 3.x to 3.4 like you’re changing your retention data pipeline—because you are. Keep event names stable, validate anonymous-to-known merging, and stage rollout while watching segment and Journey entry rates.

Implement Update To 3.4 with Propel

If you’re treating this update as part of a broader push to tighten cart recovery, repeat purchase, and winback performance, it helps to validate the tracking contract and identity stitching before you ramp to 100%. We’ll usually review your app-side Customer.io implementation against the Journeys that drive revenue, then map a rollout + monitoring plan—if that’s useful, book a strategy call.

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