Skip to main content
Question

Web Billing via Web Purchase Link: REST shows active entitlement, but Flutter SDK returns none (v9.7.0). Redemption only works with originalAppUserId and anonymous users.

  • October 8, 2025
  • 3 replies
  • 48 views

Forum|alt.badge.img

Stack: Flutter, purchases_flutter 9.7.0, iOS target 14, RC sandbox Web Billing, same RC project for App Store + Web Billing.
Entitlement: premium (Web product appname_weekly_web attached).
App User ID: e.g., YuSUDJGSSUQqYkeJqu0xoH2 (logged in via Purchases.logIn(uid)).

 

WPL (identified):

https://pay.rev.cat/sandbox/<TOKEN>/<APP_USER_ID>?package_id=$rc_weekly

 

Server says it’s active:
REST /v1/subscribers/<APP_USER_ID> shows premium entitlement active (store: rc_billing, is_sandbox: true). WPL revisits show “Success” (already subscribed).

 

Client says it’s not:
On app resume:

await Purchases.invalidateCustomerInfoCache();

final info = await Purchases.getCustomerInfo(); print(info.entitlements.active.keys); // => ()

I have tried polling every 2 seconds and the entitlement never gets updated.

 

What does work:
If I build the WPL with originalAppUserId (or anonymous flow) and tap the Redeem Purchase deep link:

final r = await Purchases.parseAsWebPurchaseRedemption(url);

if (r != null) await Purchases.redeemWebPurchase(r);

→ entitlement appears immediately.

 

Tried: matching UID in WPL vs SDK, mapping verified, same project, invalidate→get, short polling, verbose logs, upgraded SDK

 

This post has been closed for comments

3 replies

alejandra-wetsch
RevenueCat Staff
Forum|alt.badge.img+6

Hey ​@zain-1983-6e1bba

Thank you for providing such detailed information! 

I’ve shared this internally with the Engineering team for review and to better understand what may be happening. I’ll let you know as soon as I have more information!


Forum|alt.badge.img

Hey ​@alejandra-wetsch is there any update from the internal engineering team? 


alejandra-wetsch
RevenueCat Staff
Forum|alt.badge.img+6

Hey ​@zain-1983-6e1bba

I appreciate your patience! 

The Engineering team has identified the issue and released a fix. Given that it was a backend issue, there’s no need to upgrade your SDK version. 

After calling await Purchases.invalidateCustomerInfoCache(); the cache should be accurately invalidated, and therefore calling final info = await Purchases.getCustomerInfo(); should return the updated entitlements.

I hope this helps. Please let me know otherwise!