Discussion and help from anything related to RevenueCat.
Recently active
I just made my first test purchase… well, or so I thought. It said something went wrong, but nothing happened in my app, so I guess it didn’t register the purchase correctly.Now I cannot make another test purchase to debug, because I already own the item (that’s what Google Play says once the purchase bottom sheet appears).Is there a way to delete the purchase? Or is the only way to do this by making the product consumable (which isn’t really what I’d want in a real production environment for users, they can only buy the product once)?Thanks!/edit: I think I may have found the answer:“Note: To perform multiple test purchases for the same non-consumable product, you can refund and revoke purchases using Google Play Console.”This is as per the Google Play docs… Should we delete the customer in RevenueCat as well, or keep them and their metadata?
Hi looking into Virtual Currency for tokens in my game. Currently on ios I save tokens to icloud so they transfer between devices but are not tied to a user account in my game. I also save them on the keychain so they survive app delete / install. On android I save the count in userData but that doesn’t survive app delete and that’s not great.I haven’t associated tokens with user accounts because creating an account isn’t mandatory.. some people simply like to play the computer opponent and not online.. so they don’t need an account. So wondered if virtual currency might be a good option as rev cat creates an anon id. But it’s complicated. For example.. assume someone installs the app the the first time, gets an AnonID and buys tokens without a userid in my app.. then they create a new account in my game and I tell RevCat about that userID. It does look like that in-game user id gets assigned get an alias to the orig anonID and the tokens are still there. Great But if I insta
On Android devices, it appears fine; however, on iOS devices, it pushes the UI off the screen to the right. I have attached the Screen shot.
Hello everyone,When a user registers in my app, I create an account for them on the Revenue Cat platform with a POST call to this url https://api.revenuecat.com/v2/projects/projxxxxxx/customers. I ask for the creation of a new customer and I also ask for app_user_id RevenueCat to be the unique identifier that my user has in my app so that I can find him easily when he is in RC.When I go to “customers” in R C, my customer is there, with the app_user_id set to the unique identifier in the app. So so far so good!Except that when my user takes out a subscription on app, Revenue cat creates a new Revenue Cat identifier for him, whereas I want the customer to keep his app_user_id identical to the unique identifier in my app.
I’m testing family sharing on subscriptions and IAP in sand box. I have an IAP that unlocks a lifetime access to the app and if users that are in a family sharing group purchase it, other members of the group are able to access it via restore purchase. However, if a member subscribes to the monthly membership, they get access to the app through the lifetime IAP, but are also charged a monthly subscription. When they sign up for a subscription, it creates a new alias.I understand that sandbox environment can be wonky but I’d like to get an idea of the expected behavior in prod from those who have tested this previously. What’s the standard way for users to download a family shared app? You cant access Settings > Your Name > Family > Subscriptions with a sandbox account. Is it expected for users to be charged a monthly subscription even though they have access to a family shared IAP? Thank you!
Whenever I need to upgrade the minimum iOS requirements of my app, I wonder: “how many subscribed users will I lose?”, and “how many users who purchased a lifetime license no longer receive updates?” It would be great if RevenueCat had a chart for that. One that looks at the maximum supported iOS version per user. For example, I may have two users, Alice on an iPhone 7 and Bob on an iPhone 8. Both are running iOS 15. When I bump the minimum version of my app to iOS 16, Alice can’t ugprade to iOS 16, so I’ll lose her, whereas Bob on his iPhone 8 still can, so the chart should not show him as a user I’d lose.
Hi team,I’ve integrated RevenueCat with my Flutter app and everything works fine in testing — all products show up correctly and test purchases complete as expected.Now that I’ve uploaded the app to production, I created a promo code for one of my subscription products through the Google Play Console. However, I noticed that the "Redeem code" option does not appear during the purchase flow in the production version of the app.Has anyone else experienced this?Is there something specific that needs to be done on the RevenueCat side or in the Google Play Console to ensure that the redeem option is visible in production?Any guidance would be appreciated!Thanks!
Hello everyone :)I am trying to give different links for English and Local language for footer links at paywall.I could not find it.Can we add localized links for footer links Privacy Policy and Terms and Conditions at paywall?
Hello there,Is it possible to have something like 'Day {{ primary.trialPeriodDays | minus: 3 }}: Trial Reminder' in our trial timeline, to indicate that users will receive the reminder 3 days before the trial period ends?Regards,Zahra
Hi RevenueCat fam,I’m testing my paywall with real device. My payment still shows up after my purchasing and even tho I use .presentPaywallIfNeeded( function which should automatically check if I’ve paid. .presentPaywallIfNeeded(requiredEntitlementIdentifier: "pro",purchaseCompleted: { customerInfo inprint("Purchase completed: \(customerInfo.entitlements)")},restoreCompleted: { customerInfo in// Paywall will be dismissed automatically if "pro" is now active.print("Purchases restored: \(customerInfo.entitlements)")}) Attached is what I saw after click purchase on paywall a 2nd timeAnd this is my LOG DEBUG: ℹ️ There are no requests currently running, starting request GET /v1/subscribers/$RCAnonymousID%3A65c82d3b6f4442e9996c0c824846953aDEBUG: ℹ️ API request started: GET '/v1/subscribers/$RCAnonymousID%3A65c82d3b6f4442e9996c0c824846953a'DEBUG: ℹ️ API request completed: GET '/v1/subscribers/$RCAnonymousID%3A65c82d3b6f4442e9996c0c824846953a' (304)DEBUG: 😻 CustomerInfo updated from network.D
Hello RevenueCat Team, I am currently working on integrating the RevenueCat REST API v2 into our backend systems. During testing in the sandbox environment, I’ve encountered an issue where the /subscriptions endpoint returns an empty items array, even customer object has valid entitlements in Sandbox. This behavior is not limited to subscriptions integrated via Stripe like the post “REST v2 subscriptions empty in sandbox”; it also occurs with subscriptions made through StoreKit. This issue has been previously discussed in the community before. However, the problem persists and significantly impacts our development workflow. The inability to retrieve sandbox subscription data via the v2 API hinders our ability to manage and verify user subscription statuses during testing. Consequently, we are compelled to rely on the deprecated v1 API for this functionality, which is not ideal for maintaining a modern and efficient codebase. We kindly request that the RevenueCat team consider extending
Background: My app stores user content. When it receives a TRANSFER webhook, it will move all owned content from the old account to the new account.On both IOS and Android, I get the expected behaviour when a logged in user restores a valid subscription: The entitlements are transferred to a the new account & a TRANSFER webhook is sent.The divergence comes when dealing with an expired subscription. IOSStepsCreate a subscription Cancel the subscription + wait for expiration Sign in on a different app account Press Restore purchasesOutcome: No entitlements in new app account, no TRANSFER web-hook sent AndroidStepsCreate a subscription Cancel the subscription + wait for expiration Sign in on a different app account Press Restore purchasesOutcome: No entitlements in new app account, TRANSFER web-hook is sent So for me, the Android case is wrong. Is there a reason for the inconsistency? Thanks,Jon
Hello,The steps I perform:1. Create a new user (the user appears in RevenueCat Dashboard).2. Grant entitlement to the user in the Dashboard.3. Run Purchases.restorePurchases() in the app (Flutter)4. Then Purchases.getCustomerInfo()The steps work perfectly in iOS: the customer info contains the entitlement.They doesn’t work on Android though. restorePurchase does not seem to account for the promo account given in the Dashboard: D/[Purchases] - DEBUG( 5926): ℹ️ Restoring purchasesW/[Purchases] - WARN( 5926): ⚠️ allowSharingPlayStoreAccount is set to false and restorePurchases has been called. This will 'alias' any app user id's sharing the same receipt. Are you sure you want to do this? More info here: https://errors.rev.cat/allowsSharingPlayStoreAccountD/[Purchases] - DEBUG( 5926): ℹ️ Querying purchase history for type subsE/libEGL ( 5926): called unimplemented OpenGL ES APID/EGL_emulation( 5926): app_time_stats: avg=1898.39ms min=4.90ms max=16965.74ms count=9D/[Purchases] - DEBUG( 592
So Ive built an EXPO app and have successfully managed to run development builds using sandbox environment for an app and tested purchase flows which all works fine. signed the paid agreements etc and set up my apple IAP and subscriptions properly. I’ve now tried to submit my app but I keep getting rejected due to: “Guideline 2.1 - Performance - App CompletenessWe found that your in-app purchase products exhibited one or more bugs which create a poor user experience. Specifically, there was no response when we tapped Unlock Now in Inspiration, Guests, and Budget. Please review the details and resources below and complete the next steps.Review device details:- Device type: iPhone 13 mini- OS version: iOS 18.5” Its very frustrating as it appears the issue is my IAPs have not been accepted/in review.The other issue I noticed before i submitted was that in testflight i was unable to trigger the paywalls, which I assumed was due to the IAP and subscriptions not being reviewed and accepted
I’ve implemented the RevenueCat SDK and tested the entire purchase journey using the TestFlight version of the app. Everything worked smoothly on iPhone (tested with different iPhones).However, my app was rejected, and upon reviewing the feedback and attached screenshot, I noticed the reviewers tested it on an iPad. I then tested the same TestFlight build on two iPads — both returned an error when calling getOfferings. The same code works correctly on iPhone but consistently falls into the catch block (at `….Purchases.getOfferings()) on iPad.SDK version: "@revenuecat/purchases-capacitor": "^9.2.1"Since it works on iPhone, we’re confident that the product identifiers and configurations are correct. We only test on real devices. StoreKit testing is not implemented, so simulator support is not expected and not needed. Tested devices: iPad (9th generation) – iPadOS 18.4.1 iPad (10th generation) – iPadOS 18.4.1 App Review test environment: iPad Air (5th generation) – iPadOS 18.4.1 In Ap
Hi everyone 👋I'm having an issue with the RevenueCat paywall UI on Android. I created a paywall design in the RevenueCat dashboard and linked it to my offering called "my_offering_identifier_is_here". Then, I'm showing the paywall like this:paywallActivityLauncher.launch(offeringIdentifier = "my_offering_identifier_is_here")The products show up correctly (so the offering ID seems to be working), but the paywall design is not the one I created. Instead, a default or unrelated layout is being displayed.Here’s what I’ve checked so far: The offering ID "my_offering_identifier_is_here" is correctly set and matches what I used in the dashboard. The paywall is published and active on RevenueCat. SDK is initialized and fetching offerings successfully. Has anyone run into this before?Is there something I'm missing to make sure the correct custom paywall design shows up?Any help would be appreciated 🙏
Hi guys! I'm integrating subscriptions in my Flutter app using RevenueCat. iOS case. I'm encountering an issue where the price shown on the paywall differs from the price shown at the actual App Store checkout. For example:* On the paywall, I show $59.99 (taken from `package.storeProduct.priceString`)* But when the user proceeds to the purchase, the App Store sheet shows $69.99 I'm not hardcoding any values — I use priceString from RevenueCat offerings.I use Flutter, but the issue happened on IOS only Questions:-Why might there be a mismatch between the price from on paywall and checkout? Thanks in advance for any insight!
When running eas build --profile dev-purchase --platform ios --local --clear-cachethe build process works but when trying to start the app and using the react-native-purchases sdk, I get the error: Import failed: `new NativeEventEmitter()` requires a non-null argument. The reason seems to be that the RNPurchases native module cannot be found. This only seems to happen when using eas build and on iOS. I have tried several of the latest react-native-purchases library versions. It seems to happen for every version. I already searched the internet for solutions and iterated with ChatGPT but am still facing the same issue. Is anyone aware of this and possibly has a solution?
I have added localization through RevenueCat which has updated the text content. I would like to change the main image for each language to help improve conversions by country. Is it possible to “localize” the image in addition to the text copy?
I have set an offering as default offering. When starting the app for the first time the default offering is loading correctly. After this I always get this error. The new default paywall I use is Paywalls v2. I do not try to load different offerings in my code just the standard default one. In Xcode I get the following warning WARN: ⚠️ Failed looking up localization, using fallback: en_DEWARN: Could not determine price format because price string is incompatible.
Hi, We are using Flutter SDK which utilizes Android SDK under the hood. We have an Offering set up with 6 packages.When requested through Purchases.getOfferings(), this offering has only 5 packages. As you can see, 2nd_monthly is missing in actionThis results in basic RevenueCat paywall being shown (which also contains only 5 packages) instead of our paywall. iOS app works just fine.
I’m using FlutterFlow’s built-in RevenueCat integration to create a custom paywall UI with two cards: one for the monthly plan and one for the yearly plan. The official docs only show how to configure a single subscription option (hard-coded) in the Purchase action. I need to: Let the user tap either the monthly or yearly card to select that plan. Then tap a single “Buy” button that initiates the RevenueCat purchase for the plan they selected. But in the Purchase action’s Package ID field I only see a way to bind one static package or choose “Package by Identifier,” and I don’t see how to point that at a dynamic App State or Action Output variable. I can’t figure out how to wire up my selectedPlan string (e.g. "myapp.monthly" or "myapp.yearly") into the Purchase action so it charges the correct plan.What have you tried so far? Created two tappable cards, each updating an App State selectedPlan string to either the monthly or yearly package identifier. Added a “Buy” button with Reve
I'm experiencing a timeout error (Error 32) from RevenueCat on iOS devices during app launch. The log says:“StoreKit 1 product request took longer than expected (30.17 seconds)”, and the app hangs or fails to load products.I've verified the product identifiers, my setup in App Store Connect, and that I'm using the latest SDK.Can you help confirm if this is a known issue, or if there's a specific best practice for fallback behavior?
I’m using the new beta paywalls. How do I get {{ product.relative_discount }} to render correctly for paywalls showing non-subscription packages? This question... indicates that this doesn’t seem to be supported? Surely this isn’t the case? Showing relative discounts is a pretty big deal for any paywall with multiple packages. Can someone point me in the correct direction to resolve this?
I think it should be made absolutely clear that restoring purchases on iOS does not work when using a .storekit file. At least I did not see this anywhere and spend a day on trying to get restore to work – until I switched to a scheme without a .storekit file.Maybe this is mentioned somewhere in the docs, but I did not see it.Thanks,Marc-André
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.