Customer Center

Let customers manage purchases, restore transactions, request refunds, and contact support from a native screen.

The Customer Center is a native self-service screen for purchases. It can show active and expired subscriptions, one-time purchases, and entitlements. Customers can restore purchases, manage or cancel subscriptions, change plans, request refunds, open support links, and contact your team. It supports App Store and Google Play purchases as well as Superwall web checkout.

Expo SDK v1.6.0 adds Customer Center support on iOS and Android. The default configuration is ready to use; configure it only when you want to change the screens, paths, appearance, or support details.

Present the Customer Center

Call presentCustomerCenter() from a component inside <SuperwallProvider />. Its promise resolves when the screen is dismissed:

import { Button } from "react-native";
import { useSuperwall } from "expo-superwall";

export function ManagePurchasesButton() {
  const { presentCustomerCenter } = useSuperwall();

  return (
    <Button
      title="Manage purchases"
      onPress={() => {
        void presentCustomerCenter({
          onAction: (action, pathId, purchase) => {
            if (action.type === "custom") {
              openAccountSettings(action.identifier);
            }
            console.log("Customer Center path selected", pathId, purchase?.productId);
          },
        });
      }}
    />
  );
}

The onAction callback runs before an action. Built-in paths continue automatically. A custom path does not perform an action on its own, so handle it in this callback. The callback's purchase is null for screen-level actions such as Restore purchases.

Only one Customer Center can be presented at a time. Calling presentCustomerCenter() while it is already open resolves immediately. The promise also resolves immediately if the native screen cannot be presented. Use dismissCustomerCenter() to dismiss it from your app.

The compatibility API is available for apps using expo-superwall/compat:

import Superwall from "expo-superwall/compat";

await Superwall.shared.presentCustomerCenter();

Configure the screen

Set customerCenter on the provider's options to customize the default screen. Omitted fields keep their native defaults:

<SuperwallProvider
  apiKeys={{ ios: "ios_key", android: "android_key" }}
  options={{
    customerCenter: {
      support: { email: "support@example.com" },
      appearance: {
        accent: { light: "#5B5FEF", dark: "#9A9DFF" },
      },
    },
  }}
>
  {/* Your app */}
</SuperwallProvider>

You can also pass configuration to presentCustomerCenter() to override the provider configuration for one presentation. Use managementScreen and noPurchasesScreen to choose screen titles and paths, or support to set a support email, app version, or web subscription-management URL. See the Customer Center API reference for all fields and path types.

With the compatibility API, pass the same configuration through SuperwallOptions when configuring:

import Superwall from "expo-superwall/compat";
import { SuperwallOptions } from "expo-superwall/compat";

await Superwall.configure({
  apiKey: "YOUR_API_KEY",
  options: new SuperwallOptions({
    customerCenter: { support: { email: "support@example.com" } },
  }),
});

To ask the app before restoring purchases, pass shouldRestorePurchases. Return false to cancel, such as when the customer declines to sign in. If the callback throws, the restore proceeds. onSurveyComplete and onRefundRequestComplete let you respond to those outcomes. The Customer Center also emits Superwall events; see Customer Center and Teleport events.

Platform notes

  • On iOS, Customer Center requires iOS 15 or later and SuperwallKit 4.18.0. Building with Expo SDK v1.6.0 requires Xcode 26 or later.
  • On Android, the Customer Center uses the native SDK's full-screen activity and requires Superwall Android 2.8.5 or later; Expo v1.6.0 includes Android 2.8.7.
  • checksAppStoreForUpdates and the userCancelled refund status are iOS only. Refund requests on Android open Google Play's order history; success means that page opened, not that Google granted a refund.

For the complete API, callbacks, and event fields, see the Customer Center API reference.

How is this guide?

On this page