Skip to main content

Hi,

Apple have rejected my use of an auto renewing subscription under:

“Guideline 3.1.2 - Business - Payments - Subscriptions – Your app uses auto-renewing subscriptions, but it is not an appropriate use of the service. Specifically, the in-app purchase products only unlock features.”

I am appealing this on the grounds that dozens of other similar apps in the same category also use auto renewing subscriptions. However, I don’t expect the appeal to succeed, and I will have to use a non renewing subscription.

Non renewing subscriptions seem to have far less support in app store connect. They don’t even allow configuration of a time period – the developer has to handle this.

The revenu-cat SDK also seem to have very little support for non renewing subscriptions. They aren’t supported in an entitlement, so again – the developer needs to handle this.

Does revenue cat have example code to show how I can do this? I assume I need to somehow get non renewing subscriptions that the user has bought and check if any are in date? I don’t even know how to enumerate these subscription purchases or check their purchase date.

Thank you.

Hi ​@benjohn,

You can attach non-subscriptions to entitlements in RevenueCat. You can find here everything we support for consumable and non-consumable products. I don’t really know your case but you could use consumable products that gives a certain feature for X amount of days or usages. You’d need to handle the number of usages on your backend but it’s doable.

 

Let me know if that helps!


Hi Joan, thank you for the reply.

Looking at that link, it states:

Non-renewing subscription: a purchase that unlocks content for a specific period of time. For example, unlocking access to a magazine for 1 month, after which the subscription will not be renewed.

 

Later it says:

Entitlements are used to unlock access to content after a user purchases a product. This means: if you add a consumable product to an entitlement, RevenueCat will report that entitlement as unlocked (forever), even after one purchase. This is because there is no expiration date for consumables, like there is for a subscription. 

(emphasis mine here).

But I do not know how to add an expiration date to a non renewing subscription – there is no expiry date in app store connect, for example. How should these be defined, please?

My use case:

  • Presently I’m only providing an Apple platform / iOS app (let’s focus on that).
  • I’ve been rejected for using renewing subscriptions in my app, so I would like to use a non renewing subscription.
  • I do not have a backend and would be very resistant to adding one – it’s purely an on phone tool.
  • I definitely don’t want to add an account system to the app, or introduce sign in of any kind.

Questions

  • How can I define a lifetime for an Apple non renewing subscription?
  • Is there any sample code for defining a lifetime for Apple’s non renewing subscription / working with them generally?

Thank you.


Hi ​@joan-cardona ,

If you can help with this, it would be very helpful. I’m about to start trawling through the Revenue Cat implementation to try to reverse engineer an understanding.

I just need a source code sample of how I give an Apple App Store non renewing subscription a duration / expiry date, or a hint.

Thanks.


The PurchasesDelegate is given an instance of CustomerInfo in the method func purchases(_ purchases: Purchases, receivedUpdated customerInfo: CustomerInfo). It has a field nonSubscriptions: iNonSubscriptionTransaction]

These transactions have properties productIdentifier: String and purchaseDate: Date. This looks like enough information to be able to find any non renewing subscriptions that are currently valid, assuming the app as a mapping from a productIdentifier to a purchase period, which is easy enough to arrange.

I’ll try to validate this today, and implement it if it looks likely to work.


Hi ​@benjohn,

If I understood it correctly you want to set a lifetime product, right? You don’t need to set a subscription (auto-renewing or not), you can set up a non-consumable product. The App Store has different types of in-app purchases, subscriptions (renewable and not) and in-app purchases (consumables and non-consumables). Consumables mean they are 1time use, like buying credits in an app or unlocking a feature for 1 time. Non-consumable last in time, the user will always have access to that with the 1 time payment. You can check here all the info about non-subscription products.

You’ll find snippets of code there, but it basically works very similar to subscriptions, you create your product, add it to the offering and then purchase that package:
 

Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled)
if let customerInfo, error == nil {
// validate the purchase with your server, and display content
}
}

Let me know if this helps!


Hi ​@joan-cardona, thanks for replying. I don’t want a lifetime product.

I’ve resolved this issue now though, and the app has been accepted by Apple using a non renewing subscription.

I don’t use a Revenue Cat entitlement, because as far as I can tell there is no way for RC’s entitlements to know that a non renewing subscription purchase has come to its end.

The approach I’ve taken is to iterate `CustomerInfo.nonSubscriptions` (which includes non renewing subscriptions, despite the name to the contrary) to find the most recent subscription purchase based on `purchaseDate`.

As the app code knows the subscription duration, I can compute from this if the most recent purchase is currently active.


Reply