Push Service Certificates (APNs) in Customer.io: Set Up iOS Push the Way Retention Needs It

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 want iOS push to reliably drive cart recovery, repeat purchase, and reactivation, your APNs setup can’t be “good enough”—it has to be stable, renewable, and tied cleanly to identity in Customer.io. If you’re trying to get push live quickly without creating a future renewal fire drill (or you’re seeing pushes fail silently), it’s usually worth a quick book a strategy call to sanity-check the certificate + SDK + identity stitching end-to-end.

In most retention programs, iOS push becomes the highest-leverage channel for “intent moments” (cart, browse, back-in-stock) once email starts saturating. But push only performs when device tokens are captured correctly and mapped to the right customer profile—certificates are the gatekeeper for that.

How It Works

Apple Push Notification service (APNs) only accepts pushes from apps that can prove they’re allowed to send. That proof comes from either a push certificate (legacy, expires) or a token-based key (newer, doesn’t expire). The “push service certificate” path is common in older iOS stacks and still shows up a lot in D2C apps that have been around for a while.

  • Your app registers for remote notifications and iOS returns a device token.
  • Your app-side SDK passes that token to Customer.io (or your backend forwards it), attaching it to a person profile (or an anonymous profile until you identify).
  • Customer.io sends the push to APNs using the certificate you uploaded. If the certificate is wrong/expired/mismatched, APNs rejects the send and you’ll see delivery drop—even if your campaign logic is perfect.
  • Identity stitching is the retention make-or-break: if you collect tokens while users are anonymous and don’t merge/identify correctly at login/checkout, cart recovery pushes go to the wrong profile (or nowhere).

Practical example: a shopper adds items to cart on mobile, closes the app, then logs in later on desktop. If your iOS device token never got stitched to the logged-in customer profile, your “Cart Abandonment – Push 30 min” campaign won’t reach them even though the cart event fired.

Step-by-Step Setup

Plan to do this with your mobile engineer and whoever owns Apple Developer access. The goal is simple: generate the correct APNs certificate for the correct app/bundle ID, upload it to Customer.io, then confirm the SDK is registering tokens and associating them to the right people.

  1. Confirm your push approach (certificate vs token-based).
    If you’re already on push certificates, proceed. If you’re starting fresh, many teams prefer token-based keys to avoid annual renewals—but don’t mix approaches midstream without a migration plan.
  2. In Apple Developer, create/locate the Push Notification certificate for your app ID.
    Make sure you’re working with the correct Bundle ID and environment (development vs production) based on how you plan to send. A mismatch here is the classic “everything looks configured but nothing delivers” problem.
  3. Export the certificate as a .p12 file.
    You’ll typically export from Keychain Access (macOS). Use a strong export password and store it in your secrets manager—not in Slack.
  4. Upload the .p12 into Customer.io’s push settings.
    In Customer.io, add the iOS push credential and provide the .p12 plus password. Name it clearly (e.g., iOS Prod – Main App – APNs Cert) so ops doesn’t rotate the wrong one later.
  5. Install and configure the Customer.io Mobile SDK in your iOS app.
    You need the SDK to: (a) register for push, (b) capture the device token, and (c) send it to Customer.io tied to the right profile.
  6. Implement identity: call identify at login/checkout.
    When a user authenticates (login, account creation, or checkout if you support guest-to-known), call the SDK’s identify method with your stable customer identifier (e.g., customer_id). This is what stitches the device token to the person you’ll actually message.
  7. Track the events that drive retention pushes.
    At minimum for D2C: Product Viewed, Added to Cart, Checkout Started, Order Completed. Send event properties you’ll segment on (SKU, category, cart value, item count).
  8. Validate with real devices (not just simulators).
    Send a test push to a known internal user profile. Confirm: token exists on the profile, push delivers, deep link opens the correct screen, and subsequent events still attribute to the same person.

When Should You Use This Feature

Push certificates are the right move when your iOS stack is already built around certificate-based APNs auth, or when you need to keep parity with an existing push provider while you migrate. From a retention operator standpoint, it’s less about the auth method and more about whether push delivery is dependable.

  • Cart recovery on mobile when email is too slow: “Your cart’s still in stock” 30–60 minutes after abandonment, with a deep link back to cart.
  • Repeat purchase timing for replenishment products: trigger off Order Completed + expected consumption window, then push a reminder to reorder.
  • Reactivation for app-first brands: “New drop in your size” to customers who haven’t opened the app in 30 days, segmented by prior categories.
  • Post-purchase cross-sell when you can personalize on-device: push accessories based on the SKU purchased, but only if the user opted into push.

Operational Considerations

Most push programs don’t fail because the message is bad—they fail because identity and data flow are messy. Treat push certificates as part of a broader “device + person + event” system that needs to stay coherent as your app evolves.

  • Segmentation depends on clean device audiences. Maintain segments like “Has iOS device token”, “Push opted-in”, and “App active in last 7 days” so you don’t waste sends (or hurt deliverability signals) on unreachable users.
  • Environment drift is real. Teams often test on dev builds but upload a production certificate (or vice versa). Decide where you’ll test and align certificate + build type accordingly.
  • Identity stitching must be deterministic. Use a stable customer identifier (not email if it can change). Call identify consistently at login and after guest checkout conversion.
  • Orchestration: push should complement email/SMS, not collide. In practice, this tends to break when cart recovery sends push + email simultaneously. Use orchestration rules: push first for app users, email fallback if no open/click within X hours.
  • Renewal risk (certificates expire). Put the expiration date on a calendar with reminders 30/14/7 days out. If it expires, delivery tanks immediately and your “automation performance” looks like it fell off a cliff.

Implementation Checklist

Before you call iOS push “done,” make sure the basics are locked. This checklist keeps you from launching a push program that can’t scale past a test send.

  • Correct Apple App ID / Bundle ID confirmed for the app you’re messaging
  • .p12 exported, password stored securely, and uploaded to Customer.io
  • Customer.io iOS SDK installed and initializing successfully in the app
  • Device token registration working on real devices (not only internal builds)
  • identify() implemented at login/checkout to stitch token to the right person
  • Core retention events tracked with consistent naming and useful properties
  • Segments created: “push reachable”, “recent app activity”, “cart abandoners (mobile)”
  • Deep links tested end-to-end (push → open app → correct screen)
  • Certificate expiration date documented + renewal reminders set

Expert Implementation Tips

These are the small details that usually separate “push is live” from “push drives revenue.”

  • Send the cart payload you’ll actually personalize with. For cart recovery, include item count, top SKU, and cart value in the Added to Cart/Checkout Started event so you can segment “high intent” carts and avoid spamming low-value ones.
  • Stitch anonymous → known immediately after login. If your app allows browsing without login, capture events anonymously, then identify on login so the pre-login browse/cart context carries into the known profile.
  • Build a “push fallback” path. If a user has no device token (or has opted out), route them to email/SMS automatically. This keeps your orchestration clean and your reporting honest.
  • Track push opens as first-class signals. Use open events to suppress follow-ups (“don’t send the email if they opened the push”) and to create “push engaged” segments for future launches.

Common Mistakes to Avoid

Most of these show up right after a brand scales spend and suddenly cares about attribution and repeat purchase efficiency.

  • Uploading the wrong certificate (wrong app ID or wrong environment), then debugging campaigns instead of delivery.
  • Forgetting certificate renewal and discovering it only after cart recovery revenue drops.
  • Not calling identify consistently, leaving device tokens attached to anonymous profiles while purchase events land on known profiles.
  • Event naming drift between iOS and web (e.g., add_to_cart vs Added to Cart), breaking cross-platform segments and causing “why didn’t they enter?” confusion.
  • No guardrails on frequency, especially on push—over-sending increases opt-outs, and opt-outs permanently shrink your reachable audience.

Summary

If iOS push is part of your retention mix, push certificates are table stakes for delivery—but the real win comes from clean device token capture and identity stitching.

Get the certificate right, verify tokens on real devices, and make sure your cart/repeat-purchase events attach to the same profile you’ll message.

Implement Push Certificates with Propel

If you’re rolling out iOS push in Customer.io, the fastest path is usually validating the whole chain—certificate → SDK token registration → identify → event tracking—before you build more automations on top. If you want a second set of eyes on your setup (or you’re seeing token/identity weirdness that’s killing cart recovery), book a strategy call and we’ll map the exact implementation plan to your app and retention goals.

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