I’m implementing subscriptions and running tests, and I noticed a behavior I’d like to confirm.
Plans in the app
Basic — Monthly Basic — Annual Premium — Monthly Premium — Annual
Test environment
Sandbox (where ~1 day ≈ under 1 minute of real time)
steps
- Start Basic (Monthly) using an introductory offer (free trial).
- Create a crossgrade to Basic (Annual) (scheduled/queued).
3.After receiving a RENEWAL App Store Server Notification indicating the plan will move from trial to paid Basic (Annual), but before the trial actually expires, upgrade the user to Premium (Monthly).
Observed behavior (Sandbox) & questions
- Even though there is still up to ~1 day of trial remaining (≈ under 1 minute in Sandbox), upgrading to Premium (Monthly) immediately ends the trial and activates the paid Premium plan right away.
- Will this same behavior occur in Production?
- If yes, is this the expected/acceptable behavior when upgrading during an active trial after a pending crossgrade?
- Note: If we upgrade to Premium before the RENEWAL notification arrives, the remaining trial time is carried over in our tests.
- In this flow, we see a RENEWAL notification for Basic (Annual) (moving from trial → paid), but then the user immediately upgrades to Premium (Monthly) and the trial ends at that moment.
- In Production, would the charge for Basic (Annual) be refunded automatically since the user effectively switches to Premium immediately (and Basic Annual does not remain active)?
- In Sandbox there’s no real charge, but I want to ensure we won’t see a situation in Production where Basic (Annual) is billed and not refunded, even though the subscription effectively moved to Premium right away.
Thanks in advance!