Keeping subscription state in sync was the scariest part of moving checkout to the web.
We solved it by using a server as the source of truth and integrating that server with our in-app entitlements provider. On purchase the web created a subscription record and sent webhooks to the entitlements system. The app queries the server on open and relies on the server’s record for UI state. It reduced refunds and confusion.
Anyone use Adapty or RevenueCat for this kind of reconciliation and hit surprises?
We used server side webhooks to inform our entitlements provider and then let the app query our API at startup. That avoided race conditions and accidental double charges.
I used Web2Wave generated wiring to map web purchase ids to in app entitlements which saved time.
The trick is make the server authoritative and avoid having the app guess.
Web checkout triggers a server update which in turn triggers the entitlements provider. The app just shows what the server says. This pattern prevented mismatched states across platforms.
We pushed web purchases to RevenueCat via API and let the app ask RevenueCat for the current entitlement. Works most of the time and made support simpler.
Server truth then sync to app saved headaches
We ran into an edge case where refund processing on one gateway didn’t mirror the entitlements provider. Adding a nightly reconciliation job fixed the drift.
We matched web order ids to revenuecat receipts. Small script reconciles nightly and we rarely see mismatches now.