Introducing Customer Center

Cancellations, refunds, plan changes, and restores, all without leaving your app (or emailing you).

Jordan Morgan
Jordan Morgan Developer Advocate

Customer Center is here! Starting with version 4.18.0 of our iOS SDK, your users get a screen where they can see everything they're subscribed to, App Store and web purchases alike, and manage it all without leaving your app. And presenting it is a one-liner:

Superwall.shared.presentCustomerCenter()
Customer Center's Manage your subscription screen, showing a Pro subscription in a free trial, a Restore purchases button, and account details.

Let's take a look at some of the reasons you'd reach for it.

Fewer support emails

If you run a subscription app, you've answered "How do I cancel?" and "I paid, so why is it still locked?" more times than you'd like (I know I have). This isn't a great use of your time, or your customers'. Plus, it's easily answered — even more so with Customer Center. It lets people sort those kinds of questions out on their own. They can cancel, request a refund, switch plans, or restore their purchases, and anyone on an out-of-date build sees a banner asking them to update.

And for the emails that still come in, their user ID is right there under Account details, with a Copy button, next to the date they first downloaded your app.

Native StoreKit under the hood

For App Store subscriptions, Customer Center hands the billing changes to Apple's own StoreKit APIs. Change plan opens StoreKit's SubscriptionStoreView, Cancel subscription opens Apple's Manage Subscriptions sheet, and refunds go through refundRequestSheet. Your users get Apple's own screens for all three, and Apple handles the actual change.

StoreKit's subscription sheet for changing plans, listing upgrade and plan change options with their prices.

Find out why people cancel

Ever wonder why someone cancels? Now you can just ask them. Tapping Cancel subscription brings up a quick survey right before Apple's Manage Subscriptions sheet opens. It's on by default with three answers (too expensive, don't use the app, and bought by mistake), but you can swap in your own. Each answer fires a customerCenterSurveyResponse event, so you can pick it up in handleSuperwallEvent(withInfo:) and send it wherever you keep your analytics.

A short survey asking why the user is cancelling, with answers such as Too expensive and Bought by mistake.

App Store and web purchases on one screen

Selling on the web with Superwall, too? Those subscriptions show up alongside the App Store ones, price and renewal date included. That's something Apple's Manage Subscriptions sheet can't do, since it only knows about the App Store. And each web subscription's Manage button already points at your hosted management page, so there's nothing for you to set up.

If someone's paying on the App Store and the web at the same time (hey, it happens), Customer Center warns them so they can cancel one before they're charged twice.

Getting started

Update to 4.18.0 and call presentCustomerCenter(). The defaults are good to go as they are. If you're using SwiftUI, there's a view modifier for it, too:

struct SettingsView: View {
  @State private var showsCustomerCenter = false

  var body: some View {
    Button("Manage subscription") {
      showsCustomerCenter = true
    }
    .presentSuperwallCustomerCenter(isPresented: $showsCustomerCenter)
  }
}

Customizing Customer Center

Just about everything in Customer Center can be changed through SuperwallOptions.customerCenter. You decide which rows show up and in what order, rename any of them, add links to your own pages (in-app or in the user's browser), and put a survey in front of any row, with your own question and answers. For example, a Contact support row only appears if you add a support email. It's all entirely up to you:

let config = CustomerCenterConfiguration.default

// The rows you want, in the order you want them
config.managementScreen.paths = [
  .restore,
  .changePlan,
  .manageSubscription(survey: .cancellation),
  .url(URL(string: "https://yourapp.com/faq")!, title: "FAQ"),
  .contactSupport
]

// Optional: without an email, Contact support stays hidden
config.support.email = "[email protected]"

// Tint it to match your app
config.appearance.accent = .init(light: "#4F46E5", dark: "#818CF8")

let options = SuperwallOptions()
options.customerCenter = config
Superwall.configure(apiKey: "YOUR_API_KEY", options: options)

Beyond that, you can:

  • Only offer refunds within a set window after purchase, or limit Change plan to specific products in your subscription group.
  • Add custom rows that run your own code. You'll hear about the tap in CustomerCenterDelegate.
  • Tune the update banner. It checks the App Store for a newer version on its own, but you can supply the latest version yourself or turn it off.
  • Hide the account details section or the duplicate subscription warning.
  • Change the titles on each screen, and pick the rows for people who haven't bought anything yet.
  • Send web subscriptions to a different management page.
  • Present it as a sheet, or embed CustomerCenterView in your own navigation stack so it pushes like any other screen.

You can set it all once in SuperwallOptions, or pass a different configuration each time you present it. And CustomerCenterDelegate keeps you posted on row taps, survey answers, and refund requests. It can even step in before a restore, say, to have someone sign in first.

Customer Center needs iOS 15 or later (iOS 17 to change plans), and it's already localized into 41 locales. For the full rundown of options, check out the Customer Center docs.

And, this is just the start. I've got a lot more planned for Customer Center. But for now, here's to fewer "How do I cancel?" emails.

Get the Superwall newsletter

Paywall strategy and monetization tactics, straight to your inbox.

Book a demo

Tell us a little about your app and we'll match you with the right person.

  • A personalized walkthrough of the paywall builder
  • Guidance on your monetization and pricing strategy
  • Custom implementation recommendations for your stack
  • A look at proven paywall templates
  • Revenue-optimization best practices

Get started

Build, test, and optimize your paywalls

Join 10,000+ apps using Superwall to grow subscription revenue without shipping an app update.

Start for free

No credit card required