gradient blur

Customizing Interfaces Based on Paywall Presentations with Superwall

Our SDK makes it easy to show premium unlock elements based on whether or not a paywall presents.

lockprogression

Jordan Morgan

Developer Advocate

Published

Most apps with a subscription offering typically have a notion of "pro", or paid, features. One way to sell those? By showing some component in the interface that upsells the value of some particular feature:

  • A banner in settings that shows off pro features.

  • Or, maybe a workout app would have a lock icon over workouts that are part of a premium plan.

That’s where getPresentationResult shines in our SDK. Using it, you can tell whether or not a paywall would've shown for a particular placement. This API doesn’t actually show a paywall. Instead, it simply tells you, “If you tried to show a paywall here, what would happen?”

With that in hand, you can make smart UI decisions — like whether to show that in-app banner, a modal encouraging users to upgrade, or even dim certain components based on campaign logic configured entirely in Superwall.

Let’s walk through why this is useful, when to use it, and how to implement it in your app today.

Wait, why not just use entitlements?

At first glance, it might seem like something you could just handle with a basic entitlement check. But here’s the difference:

Entitlement checks tell you what the current access level is.

But, getPresentationResult centralizes the logic about who should be upsold, what campaign rules apply, and whether a paywall would actually show — all in one place.

In practice, that means:

  • You can always change targeting logic without shipping a new app update.

  • You don’t hardcode paywall access rules in the client (if they are this level, or that level, etc).

  • You stay in sync with the actual paywall experience — because it’s literally using the same decision engine under the hood,

Showing and hiding upsell chrome

Let’s check out Superwall's resident example app, Caffeine Pal. In it, we've got some "quick log" buttons that are part of the pro plan. If they aren't on a paid plan, we'll add a lock icon over them:

gradient blur
dashboard-header

If users aren't on a pro plan, a lock icon shows over the log buttons.

The buttons themselves? They register a placement called caffeineLogged, and we don't have to change anything about them for all of this to work:

Button("Log") {
    Superwall.shared.register(placement: "caffeineLogged") {
        store.log(amountToLog)
    }
}

swift

ungroup Copy

That's perfect for showing the paywall, and we can change whether or not that should show a paywall in the Superwall dashboard at any point (all over the air, no app update needed). But, what about that lock icon? How do we know when to show it?

That’s a perfect use case for getPresentationResult.

private func queryPresentationResult() {
    Task {
        let res = await Superwall
                        .shared
                        .getPresentationResult(forPlacement: "caffeineLogged")

        switch res {
        case .paywall(let exp):
            self.showLock = true
            print("Result: Showing paywall for \(exp)")
        case .placementNotFound:
            self.showLock = false
            print("Result: No placement for caffeineLogged")
        case .noAudienceMatch:
            self.showLock = false
            print("Result: No matching audience.")
        case .holdout(_):
            self.showLock = false
            print("Result: User is in a holdout.")
        case .paywallNotAvailable:
            self.showLock = false
            print("Result: Paywall is unavailable.")
        }
    }
}

swift

ungroup Copy

Now, you can easily base the lock icon's appearance based on the same logic Superwall uses to determine whether or not a paywall would show. This is our SDK working together perfectly — the button itself will show a paywall if it needs to, log caffeine if they are pro, the lock icon follows the same logic and all of that can be controlled over the air when you edit the campaign that caffeineLogged belongs to.

Digging into PresentationResult

If you need to get more fine-grained information about the presentation result, look no further than its return type, PresentationResult. As you saw in the example above, it reports back the reason a paywall would show or not show. To distill it down for scenarios like ours, you'd basically want to show upsell chrome when you hit a paywallresult:

Case

Description

paywall(Experiment)

A matching audience was found and this user will be shown a paywall.

holdout(Experiment)

A matching audience was found, but this user was assigned to a holdout group, so no paywall will be shown.

noAudienceMatch

No matching audience was found for this placement, so no paywall will be shown.

paywallNotAvailable

The paywall is unavailable. This could be due to no internet, no view controller to present from, or a paywall already being presented.

placementNotFound

The placement string wasn’t found on the dashboard. Check your campaign setup or spelling.

Of note, you'll get noAudienceMatch when they are a paying customer.

It's a flexible API, and there are several compelling use-cases for it. Whether you need an inline banner for premium-only sections of an app, maybe a conditional tooltip that might guide users to try locked features, or even during free trials, soft gates, and educational moments — the API works for all of them. Hiding and showing premium upsells like the one below becomes trivial:

gradient blur
dashboard-header

An upsell in settings.

Wrapping up

Knowing the result of a paywall presentation attempt is one of the most powerful (and in my opinion, underrated) tools in the Superwall SDK. It lets you write smarter, more adaptable UI by deferring all the logic of “should this user see a paywall?” over to us. After all, you don’t ever want to duplicate campaign logic on the client. You can simply just ask: what would happen if I tried to show a paywall right now?

I hope this tip helps you out, and as always — go sign up for a free Superwall account if you haven't yet. Then, check our installation guide to be up and running in minutes.

Stay up to date

Subscribe to our newsletter and be the first to know about new features, updates, and more.

gradient blur

Get a demo

We'd love to show you Superwall

Want to learn more?

  1. Fill out this tiny form →
  2. We'll prepare you a custom demo
  3. Walk you through Superwall
  4. Follow up and answer questions

Key features

  • Drag 'n Drop Paywalls
  • 200+ Custom Templates
  • Unlimited A/B tests
  • Surveys, Charts & More

Select one...

Select one...

By proceeding you consent to receiving emails and our terms.

gradient blur
shape-starshape-starshape-starshape-starshape-star

Customer Stories

Our customers refer to Superwall as their most impactful monetization tool. In their own words:

dashboard-header

Thanks to Superwall, we were able to 2x our iOS app profitability in just six months. It has greatly assisted our growth team in achieving exceptional results by facilitating high-frequency experimentation.

Mojo launch
Bernard Bontemps, Head of Growth
dashboard-header

Really excited about the progress we made recently on paywalls with Superwall. We got more than 50% increase in conversion for upsell screens. This is crazy.

Photoroom launch
Matthieu Rouif, CEO
dashboard-header

Superwall has completely changed the game for us. We’re able to run experiments 10x faster and unlock the ideal monetization model for our users.

RapChat launch
Seth Miller, CEO
dashboard-header

Superwall made testing paywalls so much faster. Instead of releasing a new version of the app each time, we were able to iterate on the winning paywalls much quicker. Thanks to that it increased our revenue per customer by 40%.

Teleprompter launch
Mate Kovacs, Indie Dev
dashboard-header

Superwall lets us move 10x faster on our monetization strategy. We can build and launch multiple paywall iterations without the need for client releases or complicated deploys. Our product iteration loop is days, rather than months because of Superwall.

Citizen launch
Jon Rhome, Head of Product
dashboard-header

Superwall enables Bickster’s marketing team to design and optimize app paywalls, freeing up engineering to concentrate on innovation. As a result, Superwall helped accelerate our install-to-subscription rates, lower engineering expenses, and cured our team’s frustration with the (once) time-consuming process of iterating on paywalls.

Bickster launch
Chris Bick, CEO
dashboard-header

Superwall has revolutionized our monetization strategy. It’s an essential tool that allows rapid paywall testing and optimization, leading to remarkable improvements in our subscription conversions and revenue generation. Can’t recommend Superwall enough for any app-based business.

Coinstats launch
Vahe Baghdasaryan, Sr. Growth
dashboard-header

Superwall has played an integral part of improving our subscription business. Compared to other providers, Superwall has proven superior in facilitating high-frequency experimentation allowing us to achieve an ideal monetization model, resulting in a significant increase in revenue.

Hornet launch
Nils Breitmar, Head of Growth
dashboard-header

Superwall is the single greatest tool we’ve used to help us increase our revenue. Our material wins from Superwall are greater than any tool we’ve worked with to date!

Pixite launch
Jordan Gaphni, Head of Growth
dashboard-header

Shout out to Superwall for helping us dial in our paywall — made a big impact on monetization, increasing revenue by more than 50% 💸

Polycam launch
Chris Heinrich, CEO
dashboard-header

Superwall increases revenue. Full stop. Being able to test paywalls on the fly and quickly analyze results has drastically increased our revenue and improved our monetization of users. Highly recommend this tool!

Hashtag Expert launch
Zach Shakked, Founder
Start for FREE

Simple win-win pricing

Interest aligned pricing. Contact us for a discount.

dashboard-header
Indie
Free
Up to 250 conversions per month
Access to every standard feature
Try it free

Standard Features

  • 250 Conversions a Month
  • Drag 'n Drop Paywall Editor
  • 200+ Paywall Templates
  • Unlimited A/B tests
  • Charts & Analytics
dashboard-header
Startup
$0.20/conversion
Pay as you go pricing that scales
Up to 5,000 conversions a month
Sign Up

Standard Features

  • 5,000 Conversions a Month
  • Drag 'n Drop Paywall Editor
  • 200+ Paywall Templates
  • Unlimited A/B tests
  • Charts & Analytics
dashboard-header
Growth
Flat-Rate
100% custom flat-rate pricing
Terms that make sense for you
Get Pricing

Premium Features

  • Unlimited Conversions
  • We Build Your Paywalls
  • 4 Weekly Growth Meetings
  • Dedicated Slack Channel
  • Custom Integrations