Hard Paywall or WorkAround

  • 20 April 2024
  • 2 replies

Badge +1

Hey Everyone, 

The Problem: Paywall looks great, is super easy to implement, BUT seems easy to bypass

The issue is when you run

.presentPaywallIfNeeded(requiredEntitlementIdentifier: "standard")

you get a great UI on the iOS paywall, but the user can swipe down and go to ContentView() for free, or press the ‘close button’ x in the upper right hand corner and get to the ContentView for free. This issue was raised here a few months ago, but there does not seem to be a solution yet.                     

An Idea of Workaround, but it’s not there yet

One way I like to add logic goes like this

if subscriptionManager.isSubscribed || subscriptionManager.isOnIntroductoryOffer


} else {


//But seems to have no way to send this to ContentView


above you can see that I just to the logical check myself. But the issue then is that even if I call the PaywallView() itself, you do get the great UI, and the simplicity. But I don’t see a way to send the user who does pay to the ContentView() when the payment goes to Apple. If they restart the app, then I think the logic should send them to the ContentView(), but there doesn’t seem to be a way to pass a response handler into this View, and since I don’t have access to the under-the-hood code where I could trigger a ContentView() on one of the user payment actions.

The Ask:

Does anyone have a solution? 
Either a argument to pass into the `.presentPaywallIfNeeded()` function or a way to connect `PaywallView()` to `ContentView()` in the same user session.

For now I’m just leaving the paywall as soft, since trying to grow users anyway, but just wanted to check. 


And if anyone is interested the app is called Sound Recipe.


  • RevenueCat 4.41.0
  • Xcode 15.3
  • iOS 17.0

This post has been closed for comments

2 replies

Userlevel 4
Badge +8

Hi, you can use PaywallView to do this by wrapping that into your own view/display/navigation logic to make the behavior that you want. We can share a code sample with how to do this if you’d like.

Badge +1

Thanks Haley, I appreciate your reply.

the tl:dr request from = yes, please show us an example of how we can use the  PaywallView where upon dismissal it goes to our  ContentView . This was the original way I tried to solve it in the the is subscribed or not logic, but i wasn’t sure how to handle the next step for the user after the dismissal, which I think is the great advantage of the  presentPaywallIfNeeded method. 

(1). The Current Status Quo is Actually Good For Certain Situations, so Please Don’t Remove It (please just add optionality). First, for the team to know, the current functionality actually does serve a utility for apps that are using a model that says ‘donate what you can.’ So I certainly hope RevenueCat doesn’t take away the current set up when they extend it further.


(2) I’ve Received, I Think, Two Different Answers From You. Second, by any chance, was your reply edited? Because in my email I got this:


Dear ghayward,

Haley Pace has responded in "Hard Paywall or WorkAround".

Hi, thank you for this feedback. At this time the way to help with this would be to disable the close button, but this will not prevent users from swiping it away. I have forwarded this feedback to our paywalls team and will update here with more information.


(3) Next Steps, yes please at least show me the  PaywallView navigation code sample. Third, moving on to what the current reply says:

Hi, you can use PaywallView to do this by wrapping that into your own view/display/navigation logic to make the behavior that you want. We can share a code sample with how to do this if you’d like.


When I head over to the Paywall docs (pertinent part here), we talk about (1) the presentPaywallIfNeeded method and the (2)  PaywallView  view, but what I still don’t see if how you can ‘unpack’  PaywallView to offer the logic in the dismissal phase. So what I’m saying is let’s say I have a navigation stack, and I put layer the  PaywallView  into it. Normally, I’d open up the  PaywallView.swift file and alter the code inside that document, but I can’t do that in this case (which is also what makes this dynamic and a real plus). So then, yes, please show an example of how you would call this  PaywallView and then have it navigate to your  ContentView upon user-dismissal, including after user hits the Restore subscription ‘link’. 

Thanks so much in advance, and this feature of the dynamic Paywall is super helpful, and a reason I love Revenue Cat.