My educational app is structured around courses. Users can subscribe for "unlimited" courses or a "single course".
The question is how best to implement the "single course" subscription -- so that the app knows which course is subscribed and also so that the user can change courses?
One approach would be to define a separate subscription IAP for each course. Then it's trivial for the app to know which course, and the user could upgrade/downgrade/crossgrade to a different course using the Manage Subscriptions UI.
The problem is that we already have a dozen courses and we're headed for dozens more. I'm afraid the Manage Subscriptions UI wasn't intended to handle a case where there are hundreds of subscription options.
The other approach would be to have only one "single course" subscription; then I'd need to manage the course info myself and there'd be no good crossgrade path for the user.
Am I thinking about this correctly? Are there other options besides the two mentioned?
I had an exchange with an Apple StoreKit evangelist, and he confirmed that the best approach is a generic "single course" subscription. Here's what he had to say:
We refer to this as a generic sku configuration. creating a sku per course after a dozen+ is just a mess to manage, so generic is the way to go now and with your future plans.
So with the generic “single course” sub, you’ll manage this single “slot” to fill it with 1 course at time. Up to your business policy on how you manage swapping new courses in/out. Ie: 1 swap per week/month, etc.
The course to sub assignment is 100% with the developer, so this “course swap/manage” experience and policy will be managed by your app and off platform if applicable.
The mapping of the customers purchase is using the original transaction ID to the assigned course. And change that mapping per their business policy. If product ID changes to unlimited then the course mapping won’t apply. Tougher part is when downgrading from unlimited to single, what is that experience. Automatically choose whatever they access next or does it prompt the customer?