Android Push Notification Channels (Customer.io SDK)

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 running mobile push through Customer.io, Android notification channels are one of those “set it once, regret it forever if you get it wrong” pieces. They control how notifications show up on-device (sound, importance, grouping), and they directly impact opt-outs, engagement, and deliverability signals over time.

If you want a second set of eyes on your event + identity wiring before you scale cart recovery and winback pushes, you can always book a strategy call—most retention programs break here because the app data and the messaging logic drift apart.

How It Works

On Android (8.0+), every push notification must be posted to a notification channel. The channel is created by your app (not by Customer.io), and once a user sees it, Android lets the user control that channel’s settings (mute it, change importance, disable it entirely). In practice, that means your channel design becomes part of your retention system—not just an engineering detail.

  • Your app defines channels (IDs, names, importance/sound). Customer.io can only target a channel if it exists on the device.
  • Customer.io sends push payloads via the SDK/FCM. The payload should specify a channel ID (or the SDK uses a default/fallback depending on your implementation).
  • Users control channel behavior after creation. If you dump everything into one “Marketing” channel and they mute it, you just muted cart recovery too.
  • Tracking still depends on identity stitching: the push token must be associated to the right person in Customer.io, and your app must reliably identify after login so events and device tokens land on the same profile.

Real D2C scenario: you run cart abandonment push 30 minutes after “Added to Cart.” If you send that push through the same channel as “Order shipped” updates, users who get annoyed by promos will disable the channel and then miss shipping notifications—support tickets go up, and your retention team loses a high-intent lever. Separate channels prevent that failure mode.

Step-by-Step Setup

Before you touch Customer.io campaigns, get the app-side foundation right: define your channels, ensure the SDK can post to them, and confirm device identity is stable (anonymous browsing → login → purchase). That’s what keeps your segments and orchestration honest.

  1. Decide your channel map (operator-first, not “whatever engineering picks”).
    Start with 2–4 channels max so users don’t see a messy list in Android settings.
    • Transactional: order updates, shipping, password/login alerts (high importance).
    • Cart & browse intent: cart abandonment, price drop, back-in-stock (default importance).
    • Promos: sitewide sales, new drops, bundles (lower importance).
  2. Create the channels in your Android app at startup.
    Channels must exist before you try to post notifications to them. Most teams do this in Application.onCreate() or the first activity.
    • Use stable channel IDs (e.g., txn, intent, promo). Don’t rename IDs later unless you’re okay “resetting” user settings by effectively creating a new channel.
    • Set appropriate importance levels. Put promos lower so you don’t train users to disable everything.
  3. Install and initialize the Customer.io Android SDK.
    Do this early in app lifecycle so device registration and push handling are consistent.
    • Confirm you’re using the Customer.io Android SDK with push support and FCM configured.
    • Verify your build variants (debug/release) aren’t accidentally pointing to different Customer.io workspaces or keys.
  4. Stitch identity: call identify immediately after login (and when user changes).
    This is where retention attribution usually breaks: events fire anonymously, but the token attaches to a different profile.
    • On login/signup: identify(customerId, attributes)
    • On logout: call the SDK’s reset/clear method so the next user doesn’t inherit the prior user’s token.
    • If you support guest checkout → account creation later, make sure you merge or re-identify so the same device token ends up on the final customer profile.
  5. Track the events your push program will actually use.
    Don’t start with “track everything.” Start with the minimum events that drive cart recovery and repeat purchase.
    • Product Viewed (include sku, category, price)
    • Added to Cart (include sku, qty, cart_value)
    • Checkout Started
    • Order Placed (include order_id, value)
  6. In Customer.io, target the right channel ID per message type.
    When building push messages (campaigns/workflows), set the payload/channel field so “promo” pushes don’t land in your transactional channel.
    • Cart recovery → intent
    • Post-purchase cross-sell → promo or intent depending on aggressiveness
    • Shipping update → txn
  7. QA on real devices and validate the full loop.
    You’re checking two things: (1) the push renders in the correct channel, and (2) the customer profile shows the right device + events.
    • Install app fresh → browse anonymously → add to cart → login → ensure the same profile receives the push.
    • Disable the promo channel in Android settings → confirm transactional still delivers.

When Should You Use This Feature

If push is more than “blast promos,” channels are how you protect the high-intent and high-trust messages from getting muted. You’ll feel the impact most when you’re layering multiple retention motions across the same device.

  • Cart recovery on mobile where you want urgency without risking users disabling shipping/transactional notifications.
  • Replenishment and repeat purchase reminders (e.g., “You’re probably running low”) that should be quieter than transactional but more trusted than promos.
  • Winback/reactivation where you intentionally keep importance low to avoid spam complaints and blanket disables.
  • Product drop / back-in-stock alerts where you want a dedicated channel users can keep on even if they mute promos.

Operational Considerations

Channels touch segmentation and orchestration more than most teams expect. The moment you split channels, you also need to be disciplined about which behaviors qualify someone for which type of push—and how identity flows from anonymous to known.

  • Segmentation reality: build segments that map to channel intent. Example: “Added to Cart in last 2 hours AND no Order Placed” should route to the intent channel, not promo.
  • Data flow: if Order Placed sometimes arrives late (offline mode, delayed sync), your cart recovery push can fire after purchase. Add server-side confirmation where possible, or conservative delays/exit conditions in Customer.io.
  • Identity stitching: make sure the push token is attached to the logged-in profile. If your app fires events before identify, you’ll end up with duplicate people and “ghost” carts that never convert.
  • Orchestration: decide channel precedence. If a user is in a cart abandonment flow and also qualifies for a promo blast, suppress the promo for 24–48 hours so you don’t stack notifications and trigger disables.

Implementation Checklist

If you want this to hold up under scale (more campaigns, more segments, more devices), treat this like a small system design exercise—not a one-off SDK task.

  • Defined 2–4 notification channels with clear intent (txn vs intent vs promo)
  • Created channels in-app before any notifications are posted
  • Customer.io Android SDK initialized consistently across app entry points
  • identify called on login/signup; reset/clear called on logout
  • Core retention events tracked with required properties (sku, value, order_id)
  • Customer.io push messages explicitly target the correct Android channel ID
  • QA covers anonymous → login identity merge and channel-level disable tests
  • Suppression rules prevent promo pushes from colliding with intent/txn flows

Expert Implementation Tips

In most retention programs, we’ve seen push performance swing more from “plumbing” than from copy. Channels are part of that plumbing because they shape whether the user keeps you enabled.

  • Keep channel IDs stable forever. Rename the user-facing label if you must, but avoid changing IDs—Android treats it like a new channel and you lose the user’s settings history.
  • Use “intent” as your workhorse channel. Cart/browse/back-in-stock tends to earn higher tolerance than promos, and it’s where you’ll see the fastest incremental revenue.
  • Instrument “Notification Permission/Enabled” state if possible. When you can detect channel disables (even partially), you can shift those users into email/SMS recovery instead of hammering dead tokens.
  • Design for guest behavior. If a meaningful share of users add to cart before login, prioritize clean anonymous-to-known stitching so your cart recovery push doesn’t end up tied to an anonymous profile that never receives messages.

Common Mistakes to Avoid

Most teams don’t “mess up channels”—they skip the downstream consequences. These are the patterns that quietly kill retention performance over a few months.

  • One channel for everything. Users mute it after one annoying promo, and you lose high-trust transactional reach.
  • Creating channels too late. First push attempt lands in a fallback channel (or fails), and QA passes “sometimes.” Then production becomes inconsistent across devices.
  • Not calling identify reliably. Push token attaches to the wrong profile; cart events live on one person, device token on another; campaigns “work” but don’t convert.
  • Over-notifying without suppression. Cart flow + promo blast + back-in-stock in the same day trains users to disable channels.
  • No exit conditions for purchase. Delayed purchase events lead to “Still thinking about it?” pushes after checkout—high unsubscribe/disable trigger.

Summary

If you’re serious about mobile retention, Android channels are how you keep promos from poisoning your highest-intent push programs. Set up a small, intentional channel map, stitch identity cleanly with the SDK, and route each campaign to the right channel ID.

Implement Push Notification Channel with Propel

When we implement Android push for D2C teams, the work is usually less about “sending a notification” and more about making sure identity, events, and channel routing stay correct as your program gets more complex. If you’re building on Customer.io and want an operator-led setup that won’t collapse once you add more flows, you can book a strategy call and we’ll sanity-check your channel map, SDK identity stitching, and the event schema your retention campaigns depend on.

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