Get help with your SDK implementation.
Recently active
Getting a NetworkError sometimes on `Purchases.sharedInstance.restorePurchases` (KMP SDK).Minor bug report: `underlyingErrorMessage` seems to be a result of parsing HTML as JSON.# java.lang.Throwable: PurchasesError(code=NetworkError, underlyingErrorMessage=Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject, message='Error performing request.')## Issue SummaryPurchase History Network Error: Failed Device ID Linking**What's wrong:** Failed to link device ID with purchases. **NetworkError** during purchase history retrieval. Internal error code 12.**In the trace:** App entered foreground and resumed normally. **Network available** and capable.**Possible cause:** A **transient server-side issue** with the purchase history API may have caused the network error.
Hi everyone! I’m new here and still learning, so please be patient if I say something silly 😅I’m using Expo Go (React Native) in my app, and I’m implementing RevenueCat.I’m currently using the Test Store to simulate subscriptions.In my case, users can upgrade or downgrade between plans.The only difference between the plans is the cloud storage limit, which is controlled by the active product_id.In my app, users can only have one active subscription at a time. Current setup in RevenueCatOfferings Created one offering called default Packages Inside this offering, I created “Custom” packages since all of my plans are monthly (the package only allows one monthly product per offering, so I used “Custom”) Products I have subscriptions imported from Google Play And test subscriptions configured in the Test Store with similar product_ids Entitlements I have only one entitlement called storage_access In my Expo appI list all the packages from the current offering and let the user pick one to
I’ve added a 50% off offer on my yearly-autorenewing subscription in revenuecat which you can see in the image below. It’s called “mente-argentina”.This is for people who’ve never subscribed to my app. I’ve signed into my app with a fresh account, that’s never made any subscriptions to test this.This is a react native app and I’m using the react-native-purchases package.I’m calling the following function to get an object with all of my subscriptions/offerings in it:const offerings = await Purchases.getOfferings();When logging all pieces of this object, I can’t see the mente-argentina offering anywhere.I thought maybe I should try to create another product in the revenuecat ui but there I’m unable to get revenuecat to find the offering by id in the playstore, so I’m thinking that’s not the case.Is there anything I need to do to sync my google play offers and revenuecat? And how do I get these offers to show up in my code so I can show them to the user.
Hello,While reviewing my app analytics, I noticed that some user purchases failed with the error code “paymentPendingError.”I couldn’t find much documentation or discussion about this specific error online, so I have a few questions: Is this error caused by something on my app’s side or on the user’s side? If it’s on my side, what steps should I take to resolve or prevent it? If it’s on the user’s side, how should I guide them? Is there anything specific I can suggest (e.g., retrying, restoring purchases, etc.)? Any insights or guidance would be greatly appreciated.Thanks in advance!
## SummaryOn iPhone (portrait), RevenueCat's `PaywallView` renders a wide/tablet layout (right-side truncation, overflow) for our custom paywalls. The same device renders your default template paywall correctly. This points to a sizing/constraints issue in the custom paywall runtime or size-class detection.## Environment- RC SDKs: - purchases_flutter: 9.8.0 (also reproduced on 8.10.6) - purchases_ui_flutter: 9.8.0 (also reproduced on 8.10.6) ## Expected vs Actual- Expected: On iPhone portrait, `PaywallView` should use a compact/phone layout and fully respect the parent’s width; no horizontal overflow.- Actual: The paywall renders a wide/tablet layout, appears left-aligned, extends past the right edge, truncating headline text and CTA.## Minimal Repro (no app-specific wrappers)We clamp the width to a phone-safe max and center it. The behavior persists even with a very small max width and no scroll views around it.```dart// Inside a page bodyreturn SafeArea( child: LayoutBuilder( b
I previously implemented the subscription feature using SwiftyStoreKit, and all receipts were processed locally only. Recently, I applied RevenueCat and implemented a custom paywall. The implementation is complete, and I am currently testing it in TestFlight.In the TestFlight environment, I was able to restore purchases from my actual App Store account with the old setup, but with the RevenueCat SDK, restoration does not work. Is this the expected behavior? I am worried that existing users may not be able to restore their purchases when the app is released on the App Store.Purchases.shared.syncPurchases() For receipt migration, I executed the above code once to synchronize existing purchase history. I understand that server-side synchronization of previous purchases is recommended, but since there is no existing backend history, I cannot use that method. In this state, if I release the app on the App Store, will existing users be able to safely restore their past purchases?
If an entitlement is unlocked by multiple products at the same time, how do you see all of the products that unlocked the Entitlement? The EntitlementInfo class has a productIdentifier field on it that is a string but that only seems to show the last product that unlocked the entitlement, not all the products. https://revenuecat.github.io/purchases-ios-docs/5.43.0/documentation/revenuecat/entitlementinfo/productidentifier Thanks
Flutter, purchases_flutter: ^9.8.0purchases_ui_flutter: ^9.8.0 The paywall shows monthly and yearly SKUs in different currencies.Yearly - eur (expected, as I’m looking at it from Europe)Monthly - USD (default currency) - is not localized this is both on iOS and Android. Any ideas where to check for it?
Using RC’s V2 paywalls, my app is crashing every time I open the paywall in my React Native Android app with the exception:java.lang.IllegalStateException: Software rendering doesn't support hardware bitmapsThis is continuing the conversation on a past issue, as it was never really solved but @db888 found out that if he removed `expo-blur` the issue goes away. I’m encountering the same problem now but we have a requirement for blur views in the design so it’s not as simple as just removing this.Is there any plans to getting an actual fix out for this in Paywalls? I believe this is a hint at a potential solution: https://stackoverflow.com/a/58315279 Edit: I’m using `@sbaiahmed1/react-native-blur` and not `expo-blur`. It seems to not be an issue with `expo-blur`. Maybe they changed the library or something, I don’t think they use native blur views on Android.Referenced Issue:
Hi. I am running into problem initializing RevenueCat for my Expo react-native app. I spent a lot of time debugging the issue and finally narrowed to the Purchases.configure() call. First of all I had everything working fine in a “development” build (a native build with “developmentClient=true”. It is not an Expo Go build.). I am using a RevenueCat “Test Store” because I haven’t set up anything on App Store or Play Store. It worked fine on both iOS and Android. Then I tried to make internal “preview” builds (with “developmentClient=false”) and it started having problem. On iOS the app immediately crashed and disappeared once the Purchases.configure() is called. On Android the app became a blank screen right after the configure() call, but it does seem like different symptoms of the same problem. I set up the “Purchases.configure()” call within a button onPress() event to help the debugging, and hardcoded the Test Store API key in codes to rule out the possible environment variable iss
I’ve set up my app store IAP and set up the various RC things needed for it. But in App Store Connect, my IAP entry says “Missing Metadata.” I have verified that all agreements/forms/etc are done under “Business” and all say “Active.” I’ve added the price for the IAP as well as the localization entry and image. However, the localization and image say “Prepare for Submission” not “Ready to Submit” so I don’t understand what I’m supposed to do.The only thing that I haven’t added is a screenshot, because I don’t understand how I’m supposed to offer a screenshot of the app if I can’t actually get the IAP from the SDK yet?? Like, show an empty screen where the IAPs are supposed to appear?? I can’t find ANY guidance on this aspect. The help popover just says “We’ll only use the screenshot for our review — it won’t be displayed on the App Store.” The help page says “A screenshot of the in-app purchase that clearly shows the item or service being offered.”So how on earth are you supposed to do
Hey everyone,I’m running into an odd issue while testing subscriptions. I’ve gone through all the usual setup steps, and the offerings fetch seems okay, but the purchase sheet never appears. What I have so far App built with Vue 3 + Capacitor. Integrated the RevenueCat SDK (capacitor-purchases). Offerings are fetched successfully from RevenueCat, so configuration seems correct. Testing on a physical device via Xcode, not TestFlight. Device is signed in with my personal Apple ID, while the sandbox ID is logged into developer settings On the manual subscription test (developer settings), the Apple sandbox pay sheet showed up, I subscribed, and in my app I can see the purchase reflected in customerInfo. ✅ The issueWhen I try to purchase the package (the code executes correctly and uses the correct package data), I don’t get nothing. No xcode logs, no freezes, no pay sheets. It’s like I’m not pressing the button. The function is being called and the logs stop right before.await
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 != n
My app requires login, so when i call Purchases.configure(new PurchasesConfiguration.Builder(mActivity, apiKey).appUserID(customUserId).build());i always pass a customUserId, that i expect to receive on the webhooks to track user purchases on my backend.I also never call logout. On RC backend i have these options activated:Tracking new purchases from server to server notifications.Keep with original App User ID I understand that the server to server event might sometimes arrive before the SDK one, thus an anonymousUserId is created and the corresponding webhook does not provide usefull user information (customUserId). My question is once the SDK updated information arrives to RC backend, is a new webhook created with the updated info? Or do i need to listen for a diferent kind of webhook when the alias with my customUserId is created on a later time? I don’t want to be polling RC backend to detect these changes.I could disable server-to-server event, and probably will, but i worry tha
Hi guys!There is an issue with Flutter SDK (on the latest 9.5.0 as well) for Android with multiple placements.In my app I have multiple placements with different offerings. Then I set up targeting in the Dashboard without specifying any placements, only the default offering. I would expect that all placements in my app would show that default offering. This is actually the case in iOS. But in Android no paywalls is shown at all.Many times I forget to list all the placements when targeting and my Android app won’t show paywalls in missed placements. Recently I run an experiment without specifying placements in the experiment settings and after 3 days I figured that the Android app wasn’t showing any paywalls at all because of this issue :(You can find more information in this GitHub issue:https://github.com/RevenueCat/purchases-flutter/issues/1225
When running the SDK using Unity 2022.3.51f1 and built for Android 15, I get the following error in ADB log. What can I do about it? 10-16 14:52:13.767 19513 19557 E Unity : AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/auth/blockstore/Blockstore;10-16 14:52:13.767 19513 19557 E Unity : java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/auth/blockstore/Blockstore;10-16 14:52:13.767 19513 19557 E Unity : at com.revenuecat.purchases.blockstore.BlockstoreHelper.<init>(BlockstoreHelper.kt:29)10-16 14:52:13.767 19513 19557 E Unity : at com.revenuecat.purchases.PurchasesOrchestrator.<init>(PurchasesOrchestrator.kt:146)10-16 14:52:13.767 19513 19557 E Unity : at com.revenuecat.purchases.PurchasesFactory.createPurchases(PurchasesFactory.kt:357)10-16 14:52:13.767 19513 19557 E Unity : at com.revenuecat.purchases.PurchasesFactory.createPurchases$default(PurchasesFactory.kt:68)10-16 14:52:13.
I am using Ionic + Capacitor + RevenueCatUI to present Paywalls for my app’s subscriptions. I want to add event listeners so I can handle cases such as:Restore Purchases with no Active Subscriptions DEBUG: Restored purchases successfully with no subscriptions Purchase Error due to Restore Behavior = ‘Keep with original App User ID’ ERROR: 😿‼️ There is already another active subscriber using the same receipt. However, I see that RevenueCatUI only allows listeners for paywallDisplayed and paywallDismissed.I am using:"@revenuecat/purchases-capacitor": "^10.4.0","@revenuecat/purchases-capacitor-ui": "^10.4.0",Is there any way I can handle the cases described above?
hello,Im integrating web purchases with redemption links for a web to app funnelIm seeing that once i redeem the web link, the entitlement goes to the annonimous user Id assigned on the web, rather than to the appUserID in my mobile app SDK here is my full pipelineuser lands on my web funnel and is redirected to revenuecat web checkout Revenuecat web checkout assigns an anonymous appUserID, eg $RCAnonymousID:01 User downloads my app user taps a deeplink, which launches my app. Deeplink example: rc-0000000://redeem_web_purchase?redemption_token=abc ---app launches and runs Purchases.configure--- Purchases.configure assigns an anonymous appUserID eg $RCAnonymousID:02 User gets automatically loged in to Firebase, fiirebase returns an ID eg. abc123 Purchases.login(firebaseID) runs, abc123 becomes an alias for $RCAnonymousID:02. Firebase and RC have matching IDs at this point. ---Web purchase redemption begins--- Validate link received in step 4 and redeem it Entitlement assigned to user w
For the first time I am releasing app into AppStore (with subscription feature). I have setup RevenueCat using .p8 file I have seen that “Valid Credentials” And during testing I could be able to sanbox-purchases. But right now apple confirmed my release with following email:We're pleased to let you know that your app, ..., has been approved for distribution.Please note that it can take up to 24 hours for apps to become available on the App Store after release.If your contracts are not yet in effect, your app cannot be distributed. Check the status of your contracts in the Agreements, Tax, and Banking module in App Store Connect. However when i download the app and trying the load the offerings. RevenueCat returns following error (both in testing and prod): ⚡️ [error] - {"code":"23","errorMessage":"There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard
Hi everyone,I'm getting a persistent warning in my console logs and my app was rejected by Apple Review with Error 23 (Configuration Issue). I believe it's related to subscription metadata, but I need help understanding what I'm missing.**Issue:**- Console shows: `WARN: Empty Product titles are not supported. Found in product with identifier: iradepremiumtest1`- Apple Review rejection: Error 23 - Configuration Issue- Products are loading correctly with prices (₺249.99, ₺899.99)- Both products are in state: IN_REVIEW in App Store Connect**What I've Done:**1. Created subscriptions in App Store Connect (iradepremiumtest1, iradeyillik1)2. Added App Store Localizations (Turkish and English) with Subscription Display Names filled3. Saved all changes in App Store Connect4. Products are configured correctly in RevenueCat Dashboard5. Offerings are loading successfully6. Prices are showing correctly**Current Console Output:**✅ Offerings loaded successfully 📦 Available packages: 2 💰 Product ID:
Hello, I am in the process of developing an app and have integrated RevenueCat for managing subscriptions and in-app purchases.Here is my setup: I have created subscription products in iOS App Store Connect, and all products are at the “Ready to Submit”stage. I have signed the Paid Applications Agreement. All banking and tax information is active and verified. However, whenever I try to access the paywall in the app, I consistently receive the following error:“Unable to load subscriptions.”I have confirmed that my product identifiers match exactly between RevenueCat and App Store Connect.Could you please advise on the possible reasons for this issue and steps to resolve it? I want to ensure that my subscriptions load correctly for testing and eventual release.Thank you for your support.
Hello I’m new to RevenueCat, i like all the cool features there but i have a few questions.I’m testing iOS version recently, I use storekit to simulate purchase, everything works fine, the transaction history does show in the sandbox data in the RevenueCat dashboard. I’m using anonymous app user id.If I reinstall the app on the same device, a new anonymous user id is generated when the app is launched. A new anonymous will be generated also if I debug it on another device. I know this is reasonable, since there is no authentication flow here. I read the document that, if using anonymous app user id, RevenueCat can analyze the receipt and link the apple user with the anonymous id, so when the user logins with the same apple account on another device, or if he or she reinstalls the app, the purchase can be restored.However, I test the “anonymous user id” flow on two different devices, with the same apple account logged in, the purchase record is not retrieved (for example, the “allPurch
ERROR [RevenueCat] 🍎‼️ Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 1.)There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). 1. I am working on an expo project on my linux machine2. I have apple developer account3. created the subscription product, it is ready to submit state4. have added the the keys in revenue cat dashboard which imported the product5. the entitlement is attached with the product6. Paywal has both android and ios offeringI have been trying to debug this but i am going no where, please help.
I am testing an iOS app on-device (sandbox environment). I can successfully purchase a subscription and have verified that my “premium” features become available. I was experimenting with allowing the user to launch the paywall at any time to allow for possible upgrade/downgrade opportunities. However, I was surprised that, even after a purchase, the paywall was identical to before -- its state didn’t seem to have changed to indicate that a subscription was already active, etc. Is this normal? Or should I expect the state of the paywall to change to reflect recent transactions?
I’m using RevenueCat’s new paywall components with the Flutter SDK (flutter_purchases ^9.2.0). On Android, the paywall displays localized prices correctly using {{ product.price_per_year }} and {{ product.price_per_month }}. On iOS, those same variables are always blank when the user navigates to the paywall.Here’s what I’ve already verified: The app is live in production on the App Store (not TestFlight). The subscription product is approved, cleared for sale, and has U.S. pricing active. All legal agreements in App Store Connect are signed and up to date. The product belongs to a valid subscription group, and product identifiers match across App Store Connect, RevenueCat, and the app code. Only base price variables ({{ product.price_per_* }}) are used, since there are no introductory offers configured. The RevenueCat dashboard shows the iOS product as active (not missing). Verified on multiple real iOS devices with different Apple IDs. The issue persists on all devices.
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.