Skip to main content

Integrating the Customer Center

⚠️Beta Feature

RevenueCat's Customer Center is currently in beta, and only available on iOS 15.0+ at the moment. Feedback is welcome!

Overview

Customer Center is a self-service UI that can be added to your app to help your customers manage their subscriptions on their own. With it, you can prevent churn with pre-emptive promotional offers, capture actionable customer data with exit feedback prompts, and lower support volumes for common inquiries — all without any help from your support team.

There are only two steps to integrate the Customer Center in your app:

  1. Implementing the Customer Center view in your app
  2. Setting up promotional offers

Implementation

You can use the CustomerCenterView view directly:

var body: some View {
Group {
NavigationStack {
HomeView()
.navigationTitle("Home")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .topBarLeading) {
Button {
} label: {
Image(systemName: "line.3.horizontal")
}
}
ToolbarItem(placement: .topBarTrailing) {
Button {
self.isCustomerCenterPresented = true
} label: {
Image(systemName: "person.crop.circle")
}
}
}
}
}
.foregroundColor(.white)
.sheet(isPresented: $isCustomerCenterPresented) {
CustomerCenterView()
}
}

Or via a modifier:

VStack {
Button {
self.presentingCustomerCenter = true
} label: {
TemplateLabel(name: "Customer Center", icon: "person.fill")
}
}
.presentCustomerCenter(isPresented: self.$presentingCustomerCenter) {
self.presentingCustomerCenter = false
}

Listening to events

We've added a way to listen to events that occur within the CustomerCenterView. For now, we are not posting any event to our backend (like feedback survey selections). We are going to be adding way more events in the future, but these are what are available for now:

CustomerCenterView { customerCenterAction in
switch customerCenterAction {
case .restoreStarted:
case .restoreFailed(_):
case .restoreCompleted(_):
case .showingManageSubscriptions:
case .refundRequestStarted(_):
case .refundRequestCompleted(_):
}
}

If using the modifier:

.presentCustomerCenter(
isPresented: self.$presentingCustomerCenter,
customerCenterActionHandler: { action in
switch action {
case .restoreCompleted(let customerInfo):
case .restoreStarted:
case .restoreFailed(let error):
case .showingManageSubscriptions:
case .refundRequestStarted(let productId):
case .refundRequestCompleted(let status):
case .feedbackSurveyCompleted(let surveyOptionID):
}
}
) {
self.presentingCustomerCenter = false
}

Setting up promotional offers

Promotional offers on the App Store allow you to provide a custom price or trial for a product to existing or previosuly subscribed customers. These offers are used in the Customer Center to incentivze customers to stay subscribed who otherwise intend to cancel their subscription or request a refund.

Unique promotional offers can be assigned to different paths and survey responses in the Customer Center, but first they must be setup in App Store Connect.

Learn how to setup promotional offers in App Store Connect here.

Required promotional offers

By default, the Customer Center is configured to use the promotional offer rc_cancel_offer for applicable cancellation survey responses, and rc_refund_offer for applicable cancellation survey responses & the refund request path.

These promotional offers must be created in App Store Connect in order to be shown to customers. You may also customize your configuration to provide other offers, or provide them at other points. Learn more about configuring the Customer Center.