Mobile Lifecycle Events in Customer.io (SDK): retention-grade tracking you can actually use

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 you’re using Customer.io for retention, mobile lifecycle events are the difference between “we sent a push” and “we know exactly who installed, opened, updated, and is reachable right now.” When teams want this wired correctly (especially identity stitching across anonymous → logged-in), it’s usually worth a quick book a strategy call to pressure-test the tracking plan before you ship.

Lifecycle events are SDK-emitted signals like app installed, app opened, app updated, and push token changes. They don’t replace your commerce events (Viewed Product, Added to Cart, Order Placed)—they make those events usable for real retention orchestration by keeping device state and identity accurate.

How It Works

On mobile, retention programs tend to break in two places: (1) you don’t know which device is actually reachable for push, and (2) you can’t confidently connect pre-login behavior to a real customer profile. Lifecycle events help solve both because they’re generated at the app layer and tied to the device record Customer.io maintains.

  • The SDK creates/updates a device record for the app install, including platform, app version, and push token (when available). This is what makes push targeting reliable.
  • The SDK emits lifecycle events automatically (commonly install/open/update). Customer.io records these events against the current profile context.
  • Identity stitching happens when you call identify(). If a user browses anonymously, then logs in, the key is to identify immediately so lifecycle + behavioral events roll up to the right person.
  • Journeys/segments use these signals to target “recently installed but not purchased,” “opened app in last 7 days,” “updated to version X,” or “has a valid push token.”

Real D2C scenario: your cart recovery push is underperforming because half your “cart abandoners” don’t have a valid token anymore. With lifecycle + device updates, you can segment to cart abandoners with a reachable device, and route everyone else to email/SMS instead of wasting sends and skewing results.

Step-by-Step Setup

The goal is simple: install the SDK, make identity explicit, and confirm lifecycle events land consistently across cold start, warm start, and post-update. Most teams “install the SDK” but skip the operational QA that makes the data trustworthy for retention.

  1. Install the Customer.io Mobile SDK for your platform (iOS/Android/React Native/Flutter/etc.) and confirm the workspace/site ID + API key match the environment (prod vs staging).
  2. Initialize the SDK as early as possible in app startup so first opens and installs aren’t missed (cold start is where tracking gaps hide).
  3. Implement identify(userId, attributes) immediately after login/signup.
    • Use a stable internal customer ID (not email) as userId.
    • Pass high-signal attributes you’ll segment on (email, phone, first_order_date, last_order_date, loyalty_tier, etc.).
  4. Implement clearIdentify() on logout so shared devices don’t contaminate profiles (this is a common source of “why did my husband get my cart reminder?” complaints).
  5. Enable and verify push token registration (APNs/FCM). Confirm token updates are sent when permissions change or the token rotates.
  6. QA lifecycle events in Customer.io Activity Logs.
    • Fresh install → open app → confirm an install/open lifecycle event appears.
    • Update app version → open app → confirm an update lifecycle event appears with the new version.
    • Login after anonymous browsing → confirm events tie to the identified profile (not stranded on an anonymous profile).
  7. Wire Journeys off lifecycle + commerce events together.
    • Example: “Installed in last 3 days” AND “No Order Placed” → onboarding nudges.
    • Example: “Added to Cart” AND “Has push token” → push-first recovery; else email/SMS.

When Should You Use This Feature

If mobile is a meaningful revenue channel, lifecycle events aren’t optional—they’re the foundation for accurate reachability and timing. In most retention programs we’ve seen, teams only realize they’re missing lifecycle data after they’ve already built journeys that can’t target correctly.

  • Cart recovery on mobile: prioritize push for reachable devices; fall back to email/SMS for everyone else.
  • Repeat purchase timing: target “opened app in last 14 days” differently than “inactive 60+ days” (same customer value, different reactivation approach).
  • Post-purchase education in-app: if the customer installed but hasn’t opened since purchase, you likely need email/SMS instead of in-app-first messaging.
  • Winback/reactivation: define “lapsed” using app opens + purchase recency, not just email engagement (email opens lie; app opens don’t).
  • Version-based targeting: if a bug impacted checkout on a specific version, suppress cart pushes to that cohort and route to support/help content until they update.

Operational Considerations

Lifecycle events become powerful when you treat them like production data, not “nice-to-have telemetry.” The operational reality is segmentation and orchestration depend on clean identity, consistent event volume, and predictable timing.

  • Segmentation: build on reachability, not hope.
    • Create segments like “Has valid push token,” “Last app open within 7/30/60 days,” and “Installed within 3 days.”
    • Use these as gates in journeys so you don’t over-send on dead channels.
  • Identity stitching: decide your source of truth.
    • Use one canonical customer ID across app + backend events.
    • Call identify() as soon as you can; delaying identification until checkout is how you strand high-intent browsing on anonymous profiles.
  • Data flow: separate environments.
    • Keep staging/dev sending to a non-prod workspace or at least clearly labeled profiles. Test noise will poison segments fast.
  • Orchestration: lifecycle events should gate message channels.
    • Push journeys should check token + recent open.
    • Email/SMS should remain available as fallback when mobile reachability is unknown.

Implementation Checklist

Before you build more journeys, lock in the basics below. This is the stuff that prevents weeks of “why is attribution weird?” and “why are segments empty?” debugging.

  • SDK initialized on app launch (cold start covered)
  • identify() called immediately after login/signup with stable customer ID
  • clearIdentify() called on logout
  • Push token registration implemented and verified (including token refresh)
  • Lifecycle events confirmed in Activity Logs for: install, open, update
  • Anonymous → identified stitching validated with a real flow (browse → add to cart → login)
  • Core segments created: reachable push, recent open, recent install, lapsed opens
  • Journeys use lifecycle-based gates (push-first only when reachable)

Expert Implementation Tips

Once the basics are live, the wins come from tightening definitions and using lifecycle signals to reduce wasted sends.

  • Use “recent app open” as a throttle: if someone hasn’t opened in 45–60 days, a push-only winback is usually dead on arrival. Route them to email/SMS first, then reintroduce push after they open again.
  • Split cart recovery by device reachability: “Added to Cart + has push token” gets a fast push; “Added to Cart + no token” gets email within minutes and SMS later if you have consent.
  • Version-aware suppression: when a release introduces checkout friction, suppress revenue-critical journeys for that version and send an “update recommended” message instead.
  • Keep identity clean across devices: if users log in on iPad and iPhone, lifecycle events help you understand where they’re active—don’t assume one device.

Common Mistakes to Avoid

Most “Customer.io isn’t working” complaints on mobile are really SDK hygiene problems. Fix these and your retention performance usually jumps without changing creative.

  • Delaying identify() until late in the funnel, which strands browsing/cart events on anonymous profiles and breaks cart recovery targeting.
  • Not calling clearIdentify() on logout, causing cross-user contamination on shared devices.
  • Assuming push reachability without validating token updates—then wondering why push CTR and delivery rates are inconsistent.
  • Mixing staging and production data, which inflates installs/opens and makes segments unreliable.
  • Building journeys without lifecycle gates, leading to over-sending on push to users who haven’t opened the app in months.

Summary

If you want mobile retention to perform, lifecycle events need to be correct and tied to the right identity. Get SDK initialization, identify/clearIdentify, and push token updates right—then use lifecycle-based gates to route customers into the channel that can actually reach them.

Implement Lifecycle Events with Propel

When teams want lifecycle events to reliably drive cart recovery, repeat purchase, and winback, the work is usually less about “sending more messages” and more about getting identity + device state airtight in Customer.io. If you want a second set of eyes on your SDK tracking plan and how it will impact segmentation and journeys, you can book a strategy call and we’ll walk through the exact flows (anonymous browse → login, token refresh, app update behavior) that tend to break in production.

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