We left checkout on the web but needed the app to recognize that a user had an active subscription. I integrated the web purchase flow with our attribution tooling and fed results into Adapty so the app could fetch the right entitlement.
What worked for us
- return a stable purchase id to the app on first open
- reconcile receipts server side with Adapty so the app sees the correct status
- add a small grace flow in the app while server reconciliation completes
This reduced edge cases where a user paid on web but the app showed them as unsubscribed.
How have others handled the timing gap between web payment and the app showing access?
I handled this by sending the purchase token to Adapty right after web checkout. The app pulls the user record and Adapty shows the entitlement. The SDKs make the check easy.
I used the web2wave export to stitch the onboarding payload to our server so the token was available right away. Works reliably for us.
The trick is to make the app check entitlement on first open after a web purchase. We push the purchase id to our server and to Adapty. Then the app calls Adapty and unlocks immediately.
Using a web funnel that integrates with Adapty saved us from manual reconciliation. It made experiment results trustworthy because web buys and in app state matched.
Do you add a fallback for offline users?
We had a few users who paid on web and opened the app before the server updated. Adding a short grace period and a retry in the app fixed most cases.
Also syncing the purchase id helped support triage.
Send token to adapty then app fetches entitlement
Make reconciliation part of your purchase flow. When the web checkout completes store the transaction id on your backend and forward it to Adapty or RevenueCat immediately.
The app should call the subscription service on resume or login and verify entitlements. If the entitlement is missing show a transient loading state and retry in the background. Log mismatches to help debug edge cases.
Also track conversion attribution with the purchase so experiments that run on the web map cleanly to in app metrics.
We saw fewer support tickets after adding immediate server side forwarding to Adapty. The app then simply asked Adapty for entitlement and everything matched.
A retry and a short grace window solved our timing mismatches. Simple and effective.