Discussion and help from anything related to RevenueCat.
Recently active
I am using React Native Expo. When I test the purchase in the emulator, I encounter the following issue:Error 2: There was a problem with the store.It can’t load the paywall.I am using paywallHowever, when I add my Gmail ID to the emulator, it works fine.But Google Play Store rejected it.How to fix it to approve on store.Below are the versions I used:"react-native-purchases": "^8.5.3" "react-native-purchases-ui": "^8.5.3" "react-native": "0.76.5" "expo": "^52.0.19"
We've recently upgraded to RevenueCat SDK 8.6.1 in our React Native app and noticed a change in how the paywall events are triggered, for both our old Paywall v1 and new Paywall v2.Previously, when a user subscribed, the onPurchaseCompleted method was called as expected. However, in the latest version, users who start a trial now first trigger onPurchaseStarted and then onDismiss, without onPurchaseCompleted being called.Here’s our implementation: const handlePurchaseStarted = useCallback(({ packageBeingPurchased }: { packageBeingPurchased: PurchasesPackage }) => { posthog.capture("onboarding_paywall_purchase_started", { packageIdentifier: packageBeingPurchased.identifier, });}, [posthog]);const handlePurchaseCompleted = useCallback(async ({ storeTransaction }: { storeTransaction: PurchasesStoreTransaction }) => { posthog.capture("onboarding_paywall_purchase_completed", { transactionId: storeTransaction.transactionIdentifier, productIdentifier: storeTransaction.produc
Hi Everyone,Just a question on subscriptions. While testing on both ios and android using the same user identifier, i came across a problem ( I think...).If i start a subscription on an ios device, then log into the app on an Android device, will i need to have a seperate subscription for that device? Michael
Sorry if it was asked before, I searched but couldn’t find anything :(What is the best way to calculate the price for annual subscription per month/week? I want to show user, how much he/she will pay for an annual subscription each month or week.An app already implementing this, is Snapchat. I checked all over revenuecat documentation but didn’t find this feature.
i did all the steps mentioned in the documentation and im getting ? Could not validate subscriptions API permissions ? Could not validate inappproducts API permissions ? Could not validate monetization API permissionsI added the package name field from my project build file , but i didnt upload the app to play console , is that an important step to fix those checkmarks?
I’m encountering an issue where payments made using a slow test card are eventually refunded because they aren’t acknowledged in time. Environment:Google Sandbox environment and slow test card Android SDK 8.11.0 Real-time Developer Notifications have been configured as described hereSTR:Purchase a non-consumable (lifetime subscription) using a slow test card While the transaction remains pending, close the app and wait approximately 7 minutes Reopen the appExpected Result: The user has the non-consumable (lifetime subscription), and the payment completes successfullyActual Result: The user does not have the non-consumable (lifetime subscription), and the payment is refunded. Also, there is an email from Google indicating the purchase was cancelled due to lack of acknowledgment:This test purchase was cancelled because it was not acknowledged. You should ensure that all purchases are acknowledged so that they are not subject to refunds. For more information, see https://developer.android
I am encountering a packaging error in Xcode when trying to build my Unity project targeting VisionOS. This seems to be related to this question: However, the post was closed and I couldn’t find a definitive answer on whether this issue was resolved by now. I am on the latest RevenueCat SDK for Unity version 7.5.3.Thanks!
We have developed an app that we want to offer as a white-label solution to different partners in various markets. Each partner provides their own content, while we handle the development, updates, and maintenance. Revenue is shared based on a pre-agreed split from the subscriptions.From what I’ve read online, it is recommended to create a separate Play Store and Apple Developer account for each app variant. This helps prevent issues where a warning or removal of one app could impact others. Additionally, it is often suggested to use separate payment details for each app otherwise all the developer accounts will be linked to the same credit card information.My questions are:Does this mean we need to open a separate bank account for each app, or is there a smarter way to receive all payments in a single account? Are there best practices to streamline this process? A potential benefit of separate accounts and payments is that each app might remain eligible for the Small Developer Program
I’ve implemented Customer Center (works fine on iOS). On Android the dark mode doesn’t work properly. Using default color settings in the Customer Center Appearance config. "react-native-purchases": "^8.7.0","react-native-purchases-ui": "^8.7.0"
Hello! We have an integration from RevenueCat to Braze to capture Subscription Events. These events are flowing into Braze as Custom Events, however they should be considered Braze Purchase Events. Does anyone have any guidance on how to make this happen? We are using the default event names in the the Braze integration setup as shown here in RevenueCat.According to both the RevenueCat and Braze Documentation, if the event has currency/revenue it should be recorded as a purchase event, specifically initial_purchase_event and renewal_event. https://docs.revenuecat.com/docs/braze https://www.braze.com/docs/partners/data_and_infrastructure_agility/payments/revenuecat/#step-1-configure-braze-settings-in-revenuecatThe logging of Purchase Events (vs just Custom Events) is important because it allows us to leverage certain Braze features, only available for purchase events as shown here.Here is an example of initial_purchase_event being logged in Braze as Custom Events vs Purchase Events e
I followed that documentationhttps://www.revenuecat.com/docs/subscription-guidance/subscription-offers/google-play-offers I have a renewable subscription in my app and I created a bunch of promo codes. Then I redeemed that code which offered me 14 free days of usage of my app.The problem is that in the overview chart it shows that purchase as a normal oneAccording to the docs it should be a trial? I can deduce that promo code was used by looking at revenue column, not sure that’s the correct way to identify promo codes? Additionally I thought that offer_code field is going to be populated, but it’s not.That’s the json, I have received via web hook{ "api_version": "1.0", "event": { "aliases": [ "<removed>" ], "app_id": "<removed>", "app_user_id": "<removed>", "commission_percentage": 0.122, "country_code": "PL", "currency": "PLN", "entitlement_id": null, "entitlement_ids": [ "full_access_subscription" ], "environment": "SAND
Hi Folks,I really want to love RevenueCat since it comes so highly recommended by so many people, but I'm having a few issues that are making that hard. The first is that the Customers List page (https://app.revenuecat.com/lists/) is very slow - a fresh load takes ~6 seconds before any information is shown. Looks like there are 2-3 requests that are queuing in the backend to me (me, subscriber_lists and manifest). These requests are taking nearly ~2s each.The `query` request can also be slow, around ~1s. Timing from Safari: And query:Note that I have less than 10 customers, I am a little worried about what might happen when I (hopefully) have hundreds.The second problem is that (unless I’m doing something wrong, which is very possible) even after I’ve waited for the list to load it doesn’t appear to accurately reflect the state of my subscribers. For instance, if I register a new customer via AnonymousID it doesn’t appear in any of the lists, I need to search specifically for that ID
Hi team,As the title states I’m curious if I need to implement a restore purchases function if I’m only offering a monthly subscription with no login on front-end. I’m building an iOS app using react native and have no login implemented, and am calling the purchaserInfo on app start. The scenarios I’m trying to cover are: the user upgrades their phone and the app is re-installed, and the user uninstalls the app then reinstalls. As long as the subscription is active and they are under the same apple login/info, wouldn’t their info be pulled be pulled from Purchases.getCustomerInfo()?Thanks in advance
Hi everyone,I am implementing in-app subscriptions on iOS using RevenueCat and testing in the sandbox environment. I have a subscription group with two products:Monthly 1 Monthly 2If a customer subscribes to Monthly 1 and later upgrades to Monthly 2 mid-cycle, Apple is supposed to issue a prorated refund for the unused period of Monthly 1 (as per Apple's documentation). However, I am not receiving any refund-related event in RevenueCat.I have a few questions regarding this:Does RevenueCat detect and provide an event for refund transactions related to subscription upgrades within the same group? Is there any way to determine how much Apple has refunded to the customer through RevenueCat, or would I need to fetch this information elsewhere?I would appreciate any insights from the community or if someone has encountered a similar issue during sandbox testing.Thanks!
Hello RevCat team :)I have seen a couple of posts related to this issue on this forum but just wanted further clarification on the commitment to an action. If I am misinformed and there is a service for obtaining the desired data then feel free to inform me and close the article.The question is when calling the /v2/projects/{project_id}/customers endpoint. The documentation states the return responses provides: active_entitlements, experiment, attributes objects, of which are not actually returned.Two Workarounds: Obtaining a list of users and then polling their attributes one by one via the endpoint: /v2/projects/{project_id}/customers/{customer_id}/attributes. The issue is that we have hundreds of thousands of users daily and we would need to call this endpoint for every user. Another work around is to export the list of customers from Customers List table. The issue with that is it is manual and the exports tend to be very large, containing all user information. Viable solutions
Hey guys,is it possible to collect customers billing address via RC-Web.When using stripe its usually just one variable that you pass to the checkout.Yet we have not found a way to do it with RC-Web.ThanksBestPhil
Hello RevenueCat Support Team,I'm experiencing an issue with one-shot payments in my Flutter app using RevenueCat. When a payment does not require additional bank authorization, everything works perfectly and the premium content is delivered as expected.However, when the bank requests additional authorization (for example, via 3D Secure), the user is redirected out of the app to complete the authentication. This redirection causes the payment process to be interrupted and ultimately cancels the transaction.Could you please advise if there is a recommended solution or configuration to handle these authorization flows without forcing the user to leave the app, and thereby preventing the cancellation of the payment?Thank you in advance for your assistance. I look forward to your guidance.Best regards,
Hello,I updated prices for my subscriptions in App Store yesterday (my app is not in production yet), and in RevenueCat on a Paywall page I still see old prices. How do I force RevenueCat to refresh prices from App Store? Is there something like “refresh cache” on a RC web site? Also, I see that my App Store products in MIssing Metadata status all the time. I am not planning to upload any screenshots to the subscriptions yet, is there anything I am missing? Perhaps this is because my app is not in Production yet? Thank you!
Hi, I am integrating a web hook for the purchase. I have setup secret key and setup a webook URL. But I am not getting x-RevCat-Signature in header. Will it work in test events?
Hello,My app has 2 plans: yearly and lifetime.I’m trying to understand what happens when:1. First a user buys the yearly one,2. Then the user buys the lifetime one.Will the yearly one be canceled automatically in each platform: Android and iOS?
I am working on my paywall which will detect when a customer purchased an older version of my app so that I can offer them a 50% discount or a free period on the subscription of the new app, depending on when they purchased the old app. I’m trying to figure out how to get the prices I’ve set on the offer codes that I will use. I’ve got a button that will take the user to the App Store to complete the purchase and when they come back from the App Store, I’ll sync their purchase and dismiss the paywall. Right now for the 50% discount offer, I’m just diving the subscription price by 2. However, Apple’s offer codes don’t work like that. You have to select specific prices for each offer code. I do display the original subscription price and also a “Your price: $24.99” label just below the button that takes them to the App Store to complete the purchase.But I realize now that the prices I display will be wrong because it’s not always a divide by 2 price. For example, one of my prices is $44.
PaywallFontProvider does not have any affect on iOS v2 paywalls. I’ve implemeted a custom PaywallFooterProvider as below: class MyPaywallFontProvider: PaywallFontProvider { func font(for textStyle: Font.TextStyle) -> Font { switch textStyle { case .largeTitle: .custom("PlayfairDisplay-Regular", size: 34, relativeTo: .largeTitle) case .title: .custom("PlayfairDisplay-Regular", size: 28, relativeTo: .title) case .title2: .custom("PlayfairDisplay-Regular", size: 22, relativeTo: .title2) case .title3: .custom("PlayfairDisplay-Regular", size: 20, relativeTo: .title3) case .headline: .custom("Jost-Semibold", size: 17, relativeTo: .headline) case .subheadline: .custom("Jost-Regular", size: 15, relativeTo: .subheadline) case .body: .custom("Jost-Regular", size: 17, relativeTo: .body) case .callout: .custom("
Hello, in my android app using jetpack composed i implemented revenue cat. Everything seems to be ok apart from the fact that the paywall showing is the basic paywall. I have Designed paywall using the V2 of the paywall editor , but the basic paywall is still showing. I checked my logs and everything seems to be fine: [Purchases] - DEBUG D 👤 Logging in from $RCAnonymousID:b831970ef3294aa19a10b4ddf59fc251 -> tNQh1DwjRTU9zJZIk08oEGnLHBo2[Purchases] - DEBUG D ℹ️ No subscriber attributes to synchronize.[Purchases] - DEBUG D API request started: POST /subscribers/identify[Purchases] - DEBUG D API request completed with status: POST /subscribers/identify 200[Purchases] - DEBUG D 👤 Logged in successfully as tNQh1DwjRTU9zJZIk08oEGnLHBo2. Created: false[Purchases] - DEBUG D ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:b831970ef3294aa19a10b4ddf59fc251[Purchases] - DEBUG D ℹ️ Deleting subscriber attributes for $
I have tried literally everything. Products where being shown in TestFlight then I updated the app in Flutterflow to apple connect with new version and now nothing is showing. All the data matches up and I have been thru every option I have found in questions. any suggestions?
HiI have 3 packages in a paywall. I wanted to add badges two of them and I am guessing I am supposed to use product.relative_discount for this. But in the app I can’t see the value. Badge appears empty. Do I need to set it somewhere?Cheers,Ulaş
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.