Skip to main content
Question

why when I grant an entitlement in the sanbox environment, does it show up in the non-sandbox details for the user?

  • October 31, 2025
  • 2 replies
  • 20 views

Forum|alt.badge.img+8

The iOS sandbox is all messed up on my user/device - constantly hanging while getting offerings resulting in paywalls not being shown 99% of the time & if it does, should I try to subscribe it just hangs…

 

So i try to work around this by granting entitlements from the RC dashboard.  I choose SANDBOX environment, grant a subscription, and after the success message, I reload the page.  Nothing there...if I toggle OFF the sandbox, the entitlement I granted is there!?  

Is that expected?

2 replies

wes_clark
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • 336 replies
  • November 4, 2025

Hi! As we mention in the documentation, Granted Entitlements are always considered to be “Production” transactions, which is why they appear in the Dashboard in this way. As to why they are not granting access within your app, can you share how you are checking for the Entitlement within your code? Additionally, I would be happy to help debug the Offerings issue that you mentioned, could you share an app user ID where you were able to demonstrate this issue? If you would rather not share that publicly, you can also start a private support ticket through the Dashboard.


Forum|alt.badge.img+8
  • Author
  • Helper
  • 51 replies
  • November 5, 2025

> you can also start a private support ticket through the Dashboard.

I will try again on this, but it’s been months…

 

In terms of how I check in the app, all was fine months ago, i haven’t changed anything recently, but I use your example in the docs:

const getInfo = useCallback(async () => {
try {
await Purchases.invalidateCustomerInfoCache();

const info = await Purchases.getCustomerInfo();
packageRef.current =
info?.entitlements?.active?.[entitlementName]?.productIdentifier;

const isEntitled =
typeof info.entitlements.active[entitlementName] !== 'undefined'; setIsActive(isEntitled);
if (isEntitled) {
setSawPaywall(true);
}
return info;
} catch (e) {
if (__DEV__) {
console.error(e);
} else {
Bugsnag.notify({
name: 'getInfo Error in Purchase Provider',
message: (e as Error).message,
});
}
}
}, [setSawPaywall, setIsActive]);