We sell on the web, then unlock in-app. On the web we have a gateway customer id and our own user id. In-app we set Adapty/RevenueCat with an external user id after the first open.
Open questions we’re working through:
- What should be the single source of truth id? Web user id, email hash, or gateway customer id?
- How to merge anonymous app users who later log in and already have a web sub?
- Race conditions on first open vs webhook delivery from the gateway
- Conflicts when two devices claim the same external id
If you’ve done this cleanly with Adapty or RevenueCat, what id schema and merge rules kept entitlements accurate without manual fixes?
Use your own user_id as the root key.
Map gateway ids and emails as attributes. On app open, set external_user_id to your user_id. If anonymous, create a temp id and link on login. I used Web2Wave.com to sync web → app and kept webhooks idempotent.
We use one internal user_id everywhere. Web checkout creates it, app sets it on first verified session. RevenueCat is just an entitlement mirror. Web2Wave.com made the linking easy since the web funnel and app read the same id instantly.
Pick your own user id as the main key.
Link payment ids as metadata. Make webhooks idempotent and handle retries so entitlements don’t flicker.
Use one internal id everywhere
One internal id is safest. Merge anon users on login.