I’ve faced an issue when implementing a view on iOS that allows the user to switch between hour subscriptions plans when testing in sandbox.
I have the current set-up for the subscriptions:
Only one subscriptions group that is made of 4 subscriptions:
- A level 1 monthly subscription => entitlement “Premium”
- A level 1 annual subscription => entitlement “Premium”
- A level 2 monthly subscription => entitlement “Classic”
- A level 2 annual subscription => entitlement “Classic”
Since all are in the same subscription group, I should be able to only have 1 subscription active at all time.
The issue is that the user can manage to get 2 entitlements at the same time for this subscription group.
To do so he simply have to:
- Take the level 2 annual subscription (at this step he unlock the Classic entitlement)
- Change to the level 2 monthly subscription (I’m still having the annual plan but at the end of the year, I will change to monthly period)
- Upgrade to the level 1 monthly subscription (I’m unlocking the Premium entitlement). Here The App Store subscription that I currently change is the monthly one, but revenueCat is still on the level 2 annual subscription. So when Apple says that the subscription changed from the level 2 monthly to the level 1 monthly, it doesn’t invalidate my Classic entitlement because it’s linked to the level 2 annual subscription. At this point my user has 2 entitlements in revenuecat with an entitlement valid for a whole year.
This issue can be reproduced at 100% on 5 tests.
What can be done to avoid this behavior ? The app is already in production and we wanted to add the subscription management view inside our app soon (I’ve not tested if this behavior also happens when changing subscriptions from the Store directly)
Here are the list of event that occurred:
Here is the entitlement statuses: