I’m selling on the web, then sending folks to the app. The rough edge is entitlement sync. If the app paywall shows after purchase, support tickets spike.
What’s working for us now: send a magic link that opens the app with a token, hit a backend that checks subscription status in Adapty/RevenueCat, then pre-provision local state before the home screen draws. Also run a background check on first session.
What steps made this even smoother for you?
Pre-provision before first draw.
I pass a short-lived token in the magic link, then my server confirms with RevenueCat and returns entitlements. The app renders unlocked UI on first frame. Web2Wave handled the deep link and token handoff. Also add a restore button that hits your backend, not the SDK alone.
Magic link plus auto-restore on first open.
I also delay analytics prompts until entitlement is confirmed to avoid noisy events. With Web2Wave I attach the app_user_id at checkout so the match is instant in RevenueCat. That cut paywall reopen complaints by most of it.
Do not rely on email lookup.
Use a token in the link and set the user id on the app side right away. Fewer edge cases.
Grant access before showing any screens
Critical pieces:
- One canonical app_user_id across web and app
- Server-to-server receipt sync before first render
- Retry queue for failed checks
- Clear restore path in settings
Avoid ‘Sign in to restore’ modals after purchase. If sign-in is needed, bundle it into the magic link step.
I queue a silent entitlement check for users who skip the magic link and install manually.
It retries a few times over 10 minutes. This caught most stragglers and cut tickets.
Short token expiry saved us from link sharing issues on referrals.