Best way to allow a subscription for free

  • 26 July 2021
  • 5 replies

Badge +2

Do you know what the best way is to onboard a user and give them access to a subscription for free? I am using Firebase as a back end, fyi. I need a way to onboard clients and provide them access to subscription features without charging them.

Thanks in advance for your help.



Best answer by sharif 27 July 2021, 02:26

View original

5 replies

Userlevel 5
Badge +9

I noticed you tagged iOS and App Store in your post, so I’m going to focus on iOS and RevenueCat techniques.

If you want to give a user access to a subscription or entitlement without charging the user, one option you have is RevenueCat’s promotional entitlements API. This API allows you to override their subscription status in RevenueCat to give access to an entitlement. It’s useful when you don’t want to use Apple’s free trial functionality. However, users can’t redeem a RevenueCat promotional entitlement from within your app, so you will have to give access outside of the app via web portal, contact form, automatically on your server when a user signs up, etc.

If you want users to redeem a free trial within the app, you’ll have to use Apple’s subscription offer options. You’ll want to refer to our guide on the types of offers to determine which one fits your use case. It’s important to note whether you want to grant the free subscription to new, existing, or lapsed subscribers, and whether you want the subscription to automatically renew after the free subscription (promo codes don’t auto renew.)

Everyone’s app is different so it’s difficult to recommend one “best” way to implement free subscriptions, but hopefully this answer will help you get the information you need to figure out the best way for your app. One thing I gathered from your post is that you want to onboard clients, which I’m assuming means that they have not had a subscription previously. In this case, I would suggest either RevenueCat’s promotional entitlements, Apple’s introductory offers (free trials), offer codes, or promo codes. You can read about each of these in the guides linked above.

Badge +5

Hey @sharif ,

Can I make a feature request for the iOS SDK which allows us to grant Promotional entitlements from the SDK? This can be useful for apps which don’t have a backend but want to reward high value users after they perform certain actions. A good use case would be a referral program: if a user refers another user (tracked by AppsFlyer or another MMP), grant them a free week/month/year of subscription access.

Badge +5

@sharif It’s possible to use the Promotional Entitlements API from within the app, right?

Userlevel 5
Badge +9

The promotional entitlement endpoint requires a secret API key to work, so we strongly recommend not to call the endpoint directly from your app. Users (especially those with jailbroken devices) may be able to inspect network logs, caches, code, etc. and extract the secret key from your app which they can use to grant themselves and others indefinite access to your app without paying.

A better option is to proxy the request through your backend. Your backend can determine whether a request is legitimate (check whether the user already had a promotional entitlement, check referral status, etc.) and make the call to RevenueCat to grant an entitlement. Firebase is a common choice among RevenueCat developers for simple backends like this.

I’ll pass this feedback on to the team but it’s unlikely that we’ll make the promotional entitlement endpoint secure enough to be called from the device because we would have to replicate a lot of functionality already available via Apple/Google/Stripe’s payment systems without many additional benefits. This is aside from the fact that it would have to be compliant with Apple’s/Google’s in-app purchase terms of service.

Badge +2

I’m a bit late to the party, but if you want to talk to any authenticated API with a private key and do not want to set up a backend server, you can use serverless cloud functions to achieve the same thing.

All Hyperscalers have this functionality, here for Google Cloud:

You just need to be clear about the implications of proxying an effectively unauthenticated request through such a setup. There is always the possibility of abuse (for example, a user could just call your function themselves and grant them the Promotional Entitlement) - but this is the case with your own backend service aswell