Summarize this documentation using AI
Overview
If you’re running retention on mobile, Android push channels are where strategy meets execution: they’re how you separate “cart” pushes from “shipping” pushes so customers don’t mute everything after one noisy week. Customer.io supports Android notification channels so you can control importance, sound, and user-facing settings in a way that’s consistent with how Android expects apps to behave. If you’re implementing this inside Customer.io and want a second set of eyes on your tracking + orchestration, you can book a strategy call.
In most retention programs, we’ve seen Android channel setup become a hidden lever for lift: when customers can keep “Order Updates” on but mute “Promos,” you protect core comms while still running aggressive recovery and winback.
How It Works
On Android (8.0+), every push notification must be posted to a notification channel. Channels are created by your app (not by Customer.io), and users can manage them in system settings (mute, change sound, disable entirely). Customer.io’s Android SDK can send push notifications, but your app still needs to define the channels and decide which channel each message should use.
- Your app creates channels at runtime (typically on app start) using Android’s
NotificationManager. Each channel has an ID, a name the user sees, and an importance level. - Customer.io messages reference a channel ID (usually via push payload / message settings). When the push arrives, Android uses that channel’s configuration.
- Identity stitching matters: push tokens and device records must be tied to the right customer profile in Customer.io. That means calling
identifywhen you know who the user is (login, checkout, account creation) and tracking key events that drive retention flows. - Channel strategy impacts deliverability and opt-outs: if you dump everything into one “default” channel at high importance, customers disable push completely. If you split channels cleanly, you preserve long-term reach.
Step-by-Step Setup
The cleanest implementations treat channels as part of the SDK integration—not as a one-off Android task. You want channels created early, identity set as soon as you have a stable user ID, and events firing with enough detail to route messages into the right channel.
- Install and initialize the Customer.io Android SDK
Add the SDK to your Android app per your standard dependency management, then initialize it in yourApplicationclass. Do this before you attempt to register push tokens or track events so you don’t lose early-session signals. - Register for push and ensure device token collection
Set up Firebase Cloud Messaging (FCM) and confirm the app is passing the push token into Customer.io via the SDK. If tokens aren’t flowing, nothing downstream matters—cart recovery and winback will quietly fail. - Create your Android notification channels in-app
Create channels on app start (or at least before the first push could be displayed). Use stable, versioned channel IDs.
Practical channel set most D2C apps need:- order_updates (high importance): fulfillment, delivery, issue resolution
- cart_recovery (default importance): abandon cart, price drop, back-in-stock tied to cart
- promotions (low/default): launches, campaigns, seasonal promos
- winback (low): reactivation nudges, “we miss you” offers
- Decide how Customer.io messages map to channel IDs
Align your Customer.io push templates/campaigns so each type of message sets the appropriate channel ID in the push payload. The operator rule: if it affects trust (shipping, service), keep it separate from marketing. - Implement
identifyfor logged-in and checkout states
Callidentifythe moment you have a durable user identifier (account ID, customer ID). If you wait until “purchase,” you’ll miss the whole recovery window.
Good moments: login, account creation, email capture, checkout start. - Track the events that drive retention journeys
At minimum, instrument:product_viewed(include SKU, category, price)add_to_cart(SKU, qty, cart value)checkout_started(cart value, item count)order_placed(order id, revenue, items)push_opt_in/push_opt_out(if you can infer it)
- QA the end-to-end path (token → profile → event → push → channel)
Send a test push for each channel and verify it lands under the right system category in Android settings. Also confirm the device is attached to the correct person in Customer.io afteridentify.
When Should You Use This Feature
Android channels are worth the effort when you care about long-term push reach—not just short-term conversions. They’re especially important once you’re sending more than one “type” of push and you don’t want customers to globally disable notifications.
- Cart abandonment recovery: route all abandon-cart nudges to a dedicated
cart_recoverychannel so customers can mute it without losing order notifications. - Post-purchase repeat purchase: keep “how to use,” replenishment reminders, and cross-sell pushes in
promotionsor a dedicatedpost_purchasechannel depending on volume. - Reactivation / winback: use a lower-importance
winbackchannel so you don’t train Android (or the user) to treat your app as spammy. - Back-in-stock or price-drop alerts: if you’re using browse/cart signals to trigger alerts, isolate them so high-intent shoppers can keep them on while others opt out.
Real D2C scenario: A skincare brand runs an abandon-cart push 45 minutes after checkout_started. When those pushes share the same channel as shipping updates, customers who get annoyed mute the entire channel—then they miss delivery notifications and support volume spikes. Splitting channels prevents that operational mess while keeping recovery performance.
Operational Considerations
This is where most teams get tripped up: the Android work is straightforward, but the data flow and segmentation decisions determine whether channel strategy actually improves retention.
- Segmentation depends on clean identity stitching: if anonymous devices never get merged to the logged-in profile, your “cart abandoners” segment will undercount and your pushes will look inconsistent. Make
identifynon-negotiable at login/checkout. - Channel IDs must be stable: renaming a channel’s user-facing name is fine; changing its ID effectively creates a new channel and resets user preferences. In practice, this tends to break quietly after app releases.
- Orchestration reality: users multi-device: one customer may have two Android devices (or Android + iOS). Make sure your campaigns handle multiple device tokens and respect frequency caps so cart recovery doesn’t double-tap them.
- Event payload quality matters: you’ll want SKU/category in events so you can personalize copy and suppress irrelevant pushes (e.g., don’t send “Still thinking about it?” if the cart is empty).
- Preference management: Android channels are not the same as your marketing preferences center. Treat them as an extra layer; still store explicit opt-in/opt-out attributes in Customer.io for compliance and clean suppression.
Implementation Checklist
Before you call this “done,” you want to confirm the tracking and channel mapping behave correctly across install states, login states, and app versions.
- Customer.io Android SDK initialized on app start
- FCM token successfully registered and visible on the correct person/device in Customer.io
- Notification channels created on Android 8.0+ with stable IDs (e.g.,
order_updates,cart_recovery,promotions,winback) - Each Customer.io push campaign/template sets the intended channel ID
identifycalled at login/account creation and (if applicable) at email capture/checkout start- Core retention events tracked with useful properties (SKU, cart value, category)
- QA: test push lands in the correct Android channel and respects channel settings
- Frequency caps and suppression logic applied to avoid over-messaging
Expert Implementation Tips
Once the basics are working, small operator choices here tend to produce outsized retention gains—mostly by preventing opt-outs and keeping your segments trustworthy.
- Keep “Order Updates” sacred: never mix marketing and transactional content in the same channel. If you need to be aggressive with promos, do it where users can mute it safely.
- Version channel strategy like an API: document channel IDs and treat changes as breaking changes. Make it part of your release checklist.
- Use event-driven routing, not campaign naming conventions: decide channel based on the triggering event (e.g.,
checkout_started→cart_recovery) so new campaigns don’t accidentally default to the wrong channel. - Stitch early, not late: if you only identify on purchase, your highest-intent recovery window (minutes to hours after cart activity) is mostly anonymous and hard to target reliably.
Common Mistakes to Avoid
Most “push isn’t working” tickets aren’t push problems—they’re identity, payload, or channel hygiene issues.
- Everything goes through the default channel: users disable it, and your push program collapses over time.
- Changing channel IDs after launch: it creates new channels and strands users in old settings, which makes performance look random.
- Missing
identifyon checkout/login: events and devices don’t associate to the same person, so segments and triggers misfire. - Tracking events without properties: you can’t personalize, suppress, or debug effectively without SKU/cart value/category.
- No QA on real devices: emulators won’t catch the real-world channel settings behavior in Android system UI.
Summary
If push is a meaningful revenue channel for your D2C app, Android notification channels are foundational—not optional. Create stable channels in-app, map Customer.io pushes to the right channel IDs, and prioritize identity stitching so recovery and winback flows hit the right person on the right device.
Implement Push Notification Channel with Propel
If you already run push in Customer.io, the highest-leverage work is usually tightening the app-side tracking (identify + events) and aligning channel IDs to your actual retention motions (cart, post-purchase, winback). When you want an operator to pressure-test your implementation and help you avoid the “default channel everywhere” trap, you can book a strategy call and we’ll walk through your current SDK instrumentation and messaging map.