Hi RevenueCat community,
I'm working on a React Native app and running into a persistent issue with anonymous-to-identified user merging. Would love some help figuring out if this is expected behavior or something I'm doing wrong.
Background & Initial Setup
My app originally required registration before any in-app purchase could be made. After an App Store rejection (purchases shouldn't require registration), I updated the flow to allow anonymous purchases first, with registration happening later.
Restore Behavior: Transfer to new App User ID
The Flow I Want
1. User launches app → anonymous purchase made (no account yet)
2. User registers/signs in → anonymous ID merges with their account ✅ (this works fine)
3. Subscription expires → user signs out
4. User relaunches app → makes a new anonymous purchase
5. User signs back into their existing account → new purchase should merge/transfer to their account
What's Actually Happening
Step 5 fails. After signing back in, the subscription shows as inactive and the user is prompted to upgrade again. The new anonymous purchase made in step 4 is not being linked to their existing account.
I understand this is likely because the existing account already has a previous anonymous ID aliased to it (from step 2), so RevenueCat refuses to merge a second anonymous ID — which matches the documented Case 3 behavior.
What I've Already Tried
After reading the docs, I identified that calling `Purchases.logOut()` on user sign-out was the problem — it creates a new anonymous ID each time, which then can't be merged. I removed the `Purchases.logOut()` call entirely (only logging out of my own auth, not RevenueCat), as recommended in the docs.
However, the issue still persists even after:
- Deleting the account in my app
- Uninstalling and reinstalling the app on Simulator
- Making a fresh anonymous purchase
- Signing back into the same account
The merge still doesn't happen and the subscription is not recognized.
Questions
1. Does deleting a customer record in the RevenueCat dashboard fully remove all aliases, so that the next `logIn()` with that user ID starts completely fresh?
2. Is there any server-side state that persists even after app reinstall + account deletion on the client side that would continue to block the merge?
3. With "Transfer to new App User ID" as the restore behavior, should a new anonymous purchase transfer to the existing account on `logIn()`, even if that account already has a prior anonymous alias?
4. Is this flow (anonymous purchase → sign in → merge, repeatedly across sessions) even supported, or is the merge intentionally a one-time thing per identified user?
Thanks in advance!
