Skip to main content
Answer

Purchases associated with old appId instead of new appId

  • July 19, 2025
  • 1 reply
  • 63 views

Forum|alt.badge.img+2

I am building a mobile app with Flutter and when testing on IOS using TestFlight and sandbox, future subscriptions are tied to the original appID that purchased subscriptions on the device for the first time instead of the current appID that is logged in.

For example, my app flow goes like this:

1. The user signs in to an account.
2. The program signs in to Purchases with the user ID that is tied to the account.
3. The user buys a subscription.
4. After the subscription expires the user signs out of the account or deletes the account, which also signs out of Purchases.
5. The user signs in to a different account.
6. The program signs in to Purchases with the user ID that is tied to the account.
7. When they buy a subscription on the new account it gets linked to the old account appUserId instead of the new appUserId.
8. On RevenueCat, the ID of the old account has no aliases and no merges and the new account ID does not show up, and instead, the purchases are listed under the old account ID instead of the new one.

Also, I have ‘Keep with original App User ID’ selected in the project settings, and I do not restore purchases in my code. It is working properly on android but on IOS this issue is presented. I was wondering if this was an IOS specific caveat or if this happens because it is not a production release of my code. Is this expected behavior in TestFlight / Sandbox, or would this also happen in App Store production builds?

Best answer by guilherme

Hey ​@andy-0bc146,

This is expected behavior on iOS when the same Apple ID is used across accounts (Apple reuses the same App Store receipt) and the project is set to “Keep with original App User ID”.

In this setup, when a user logs out, then logs in to a new account and buys a subscription, RevenueCat still ties the new transaction to the original App User ID that first claimed the receipt. That’s why the new account doesn’t show the purchase,  we’re blocking it by design (as per the restore behavior).

Android feels fine because it doesn’t have this shared receipt model.

Also, this will behave the same in production, as TestFlight vs. App Store doesn’t change the receipt logic here.

If account switching is a supported flow in your app, the recommend behavior is updating the restore  to:

Transfer to new App User ID
(Project Settings → General → Restore Behavior)

 

That’ll transfer the purchase to the new account when a user logs in and buys again, which goes in line with  what you want in this case.

Best,

This post has been closed for comments

1 reply

guilherme
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • Answer
  • July 23, 2025

Hey ​@andy-0bc146,

This is expected behavior on iOS when the same Apple ID is used across accounts (Apple reuses the same App Store receipt) and the project is set to “Keep with original App User ID”.

In this setup, when a user logs out, then logs in to a new account and buys a subscription, RevenueCat still ties the new transaction to the original App User ID that first claimed the receipt. That’s why the new account doesn’t show the purchase,  we’re blocking it by design (as per the restore behavior).

Android feels fine because it doesn’t have this shared receipt model.

Also, this will behave the same in production, as TestFlight vs. App Store doesn’t change the receipt logic here.

If account switching is a supported flow in your app, the recommend behavior is updating the restore  to:

Transfer to new App User ID
(Project Settings → General → Restore Behavior)

 

That’ll transfer the purchase to the new account when a user logs in and buys again, which goes in line with  what you want in this case.

Best,