Skip to main content

I just finished my implementation of RevenueCat in my Flutter app. People can buy premium version to turn off ads. They pay once and then they will never see the ads.

I just tried it with the test card. And the purchase shows up under Customers in the Play Console - but not in RevenueCat. I tried refunding in Play Console and clicked the revoke entitlement box. But seems like no mate what I do, I still have the entitlement in the app. 

 

I purchase like this:

      final customerInfo = await Purchases.purchaseStoreProduct(widget.storeProduct);
final adsFreeEntitlement = customerInfo.entitlements.alla'remove_ads'];

if (adsFreeEntitlement != null && adsFreeEntitlement.isActive) {
await _checkPremiumStatus();
}


And I have a provider that checks the premium status like this:

Future<void> checkPremiumStatus() async {
try {
final customerInfo = await Purchases.getCustomerInfo();

final entitlements = customerInfo.entitlements.active.values;
_hasPremium = entitlements.any((entitlement) => entitlement.identifier == 'remove_ads');

notifyListeners();
} catch (error) {
debugPrint('Error checking premium status: $error');
_hasPremium = false;
notifyListeners();
}
}

Does this mean that if I refund any of my customers they will still have premium? How do I sync this?

Really weird.. I refunded it in play console. Nothing happened. After about a day it actually showed up in revenuecats panel as a purchase. Then I tried to refund it from there also. That seemed to have worked. My testuser does no longer have the premium entitlement. BUT… Now I can’t purchase it again. It tells me I already own the product. And the purchase that I could earlier see in Revenuecats console is gone.

 

If I output my customer Info I get this:
 

CustomerInfo(
entitlements: EntitlementInfos(all: {}, active: {}, verification: VerificationResult.notRequested),
allPurchaseDates: {},
activeSubscriptions: t],
allPurchasedProductIdentifiers: f],
nonSubscriptionTransactions: t],
firstSeen: 2025 - 01 - 26T17:35:07.000Z, originalAppUserId: $RCAnonymousID:xxxxx,
allExpirationDates: {}, requestDate: 2025 - 01 - 26T17:42:56.830Z, latestExpirationDate: null,
originalPurchaseDate: null, originalApplicationVersion: null, managementURL: null)
}


So no entitlements there. But if I try to purchase it with
await Purchases.purchaseStoreProduct(product);
The store panel tells me I already own the object. I catch an error with errorcode:_
final errorCode = PurchasesErrorHelper.getErrorCode(error);
is PurchasesErrorCode.productAlreadyPurchasedError

So obviously I own the product, but there is no way for me to detect that I own the product except for when I try to buy it. What has happened?


 


Hi ​@Jymd - I noticed that you haven’t yet enabled Google Real-Time Developer Notifications for your project. We strongly recommend this as it can drastically speed up integration and webhook delivery times, and will likely allow us to detect refunds much quicker. Refunds processed through the Google Play console generally can take 24 hours to detect - more info is available here.

We can definitely look into the receipt/logs of the specific test user you’ve been using, but for privacy, it might be better to open up a support ticket.


Reply