Discussion and help from anything related to RevenueCat.
Recently active
I setup RevenueCat recently to deal with a subscription IAP for my app. It all works perfectly.I noticed that my consumable & non-consumable IAPs (which were setup years ago and have nothing to do with RC) are also appearing in my transaction reporting. My question is this: Do these transactions count towards the £2,500 per month free usage? And if so does anyone know how to remove them from RC? I tried deleting these products but it complains they have transactions against them. All my ‘checks’ in the apps that users have these consumables/non-consumables are done through Apple Directly, not involving RC.
Hi I’m having the following problem:I cannot add additional fonts to the paywall designer or additional font styles (e.g. bold).I already uploaded a Custom font (Display fair) and it only registered regular and italic.Now I want to add additional styles for this font but besides uploading the fonts and styles and seeing the process bar filling up they are not added.I can also not delete the fonts I already uploaded. What can I do ?
BackgroundI posted an earlier, slightly incoherent ,version of this on the Shipaton livestream discord during the Paddle web payment event, without anyone having time to answer.These ideas may be interesting for anyone debating complex business models and associated payments.Martial arts domainMy app is for clubs and instructors for martial arts (I’m deeply into kung fu and tai chi) & I’m pushing to get it wrapped well enough for Shipaton (unsurprisingly).It will be international from day one and needs to be cross-platform because of SE Asian Android dominance.Whilst initially pitching the idea very much at clubs with members attending in-person, there’s a lot of scope for them to profit more from online sales.DefinitionsThe proposed monetisation model is around teachers and students. Teachers may be associated with a club but, at least for now, “teacher” as a proxy for the club works to, uhh, simplify this.I’m using the term “course” in a very broad sense - it may encompass a sing
Im getting this error:ERROR: 😿‼️ RevenueCat SDK Configuration is not validYour app's Bundle ID 'com.yh.que.watchapp' doesn't match the RevenueCat configuration 'com.yh.que'. This will cause the SDK to not show any products and won't allow users to make purchases. Please update your Bundle ID in either your app or the RevenueCat website to match. In the app store my bundle Id is: com.yh.quemy app bundle id: com.yh.quewatchos: com.yh.que.watchapp if I change the App Bundle ID in the RevenueCat dashboard to “com.yh.que.watchapp” it works however but “In app purchase key configuration” will throw error saying the bundle error doesn’t exist in app store connect. Has anyone faced this problem?Thanks
Hi, I’m currently trying to integrate this APIhttps://www.revenuecat.com/docs/api-v2#tag/Customer/operation/list-subscriptionsIn the response example, it shows `entitlement` with `product` details of that entitlement. But, from my testing, the `product` field is not in the response. I've tried experimenting with `expand` parameter with multiple values, but the `product` field is not showing. Is the documentation wrong? Can you tell me how can I get the `product` details? "entitlements": { "items": [ { "created_at": 1755827296320, "display_name": "Premium", "id": "entl861f....", "lookup_key": "premium", "object": "entitlement", "project_id": "proj8d....." } ], "next_page": null, "object": "list", "url": "https://api.revenuecat.c
Hi all, i’m very new to revenuecat paywall UI. i have implemented it succesfully in my flutter app for android, but i’m failing to use these listeners. onPurchaseStarted onPurchaseCompleted onPurchaseError onRestoreCompleted onRestoreError onDismissWhere do i listen for them? because when i click the restore button on the paywall ui, not is happening.
Context1I have an existing iOS app using RC for subscription and lifetime purchase of Pro features.I am about to roll out a Mac version (part of Shipaton).For both, I would like to implement virtual currencies. This is a long-planned feature to be used to buy content where a portion of the payment would be forwarded to content authors. I’ve implemented most of the local document model including content rights tracking all the way down, was holding off hoping you’d solve the rest for me.I have also considered allowing coins to be used to purchase short-term access to Pro features, for people who hate subs and don’t want to commit to the size of the lifetime purchase.These products (Touchgram) emphasis user privacy and preserve anonymity, requiring accounts only for people who will be submitting content for re-sale. Context2As a separate Shipaton submission, I’m building a Compose Multiplatform app. However, if virtual currencies prove problematic, I think the business model can work wit
I’ve been working with the API and noticed that in several endpoints where active_entitlements or similar objects are returned in a lightweight format, we only get the internal entitlement_id, like this: { "entitlement_id": "entl498b7a7b44", "expires_at": 1755783769000, "object": "customer.active_entitlement"}However, it would be extremely helpful if the lookup_key was included as well in these responses.For example, in:GET /v2/projects/{project_id}/customers/{customer_id}GET /v2/projects/{project_id}/customers/{customer_id}/active_entitlementsWe only get the internal ID, and in order to know which entitlement this refers to (e.g. "Pro", "Premium", etc.), we have to make an additional API call to:GET /v2/projects/{project_id}/entitlements/{entitlement_id} This adds unnecessary complexity and overhead, especially when managing entitlements for multiple users at scale.Would it be possible to include the lookup_key directly in all entitlement summaries across the API?It would make inte
I’m building an app where the user can make a purchase without creating an account. In this case, RevenueCat associates the purchase with an anonymous App User ID. Later, I prompt the user to create an account, and I call:await Purchases.logIn(newUserId)(Using Flutter SDK)This correctly links the original anonymous user to the new App User ID (an alias is created in the dashboard), but no TRANSFER webhook is fired.I’m relying on RevenueCat webhooks to keep my backend subscription data in sync, but in this case no webhook is triggered — so my backend doesn’t get updated.Questions: Is this expected behavior when logIn() creates an alias rather than transferring the purchase? If so, what’s the recommended way to update my backend in this flow?
Hello,Two of my customers have downgraded from an Annual (Trial conversion) to Monthly.It is my understanding that the down grade would only ‘apply’ at the end of the current subscription period (therefore in 12 months time for these candidates)However the screenshot here in RC is showing an immediate change and the Total Spent reflects the Monthly subscription price. When i check ‘View Details’ to see the events, i only see PRODUCT_CHANGE, i don’t notice any refunds. Can someone explain what is happening? Why is Total Spent reverted to a monthly value. I’d expect it to be for the Annual Tier (which is $99.99)
I am getting the V2 Paywalls setup. I have it working on my Simulator just fine. Now I am testing an actual device & my Paywall gets stuck.the `applicationId` is the same on both. I was originally calling `await Purchases.getOfferings();` so I could show my custom loading instead of the loading paywall UI. But that was getting stuck also.There are NO errors in my logs. I do have `MISSING_METADATA` warnings, but isn’t that OK because it’s a “DEV” bundle and will never actually be submited for approval. Plus, it renders on the simulator. That being said, I have added screenshots so they’re now “Ready to Submit”. Is there something different about my physical iPhone compared to simulator? Android is OK on both simulator & device
I setup the Revenue Cat Stripe SDK about 9 months ago when it was a “testing” environment in Stripe. Now I migrated it to their “sandbox”. None of the products I setup inside Stripe show up, but the production purchases are still valid as `rc_product_identifier` inside the transaction. And now, in my dev environment, when i `Purchases.getSharedInstance().getOfferings();` the offerings are not found...So I added 2 products in my sandbox. My offerings are still empty. What changed in this new Sandbox environment that caused products to not migrate over?Do we still NEED to have a product listed in Stripe?Is the documentation for the Web SDK correct still for Products & Sanbox configuration?
Hi there,I have an Expo 53 / react-native-purchases / react-native-purchases-ui 9.2.0 app which uses RC’s V2 paywalls in production, and I’m getting occassional Sentry reports about crashes on Android:IllegalArgumentException: Software rendering doesn't support hardware bitmaps at android.graphics.BaseCanvas.throwIfHwBitmapInSwMode(BaseCanvas.java:732) at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:82) at android.graphics.BaseCanvas.drawBitmap(BaseCanvas.java:140) at android.graphics.Canvas.drawBitmap(Canvas.java:1664) at u0.G.o(SourceFile:109)...(95 additional frame(s) were not displayed)This seems to happen when my V2 Paywall is triggered (I navigate to a react-navigation screen which uses RC’s `<RevenueCatUI.Paywall />` to display the V2 Paywall. Reports are most common on Pixel 6 / Pixel 7 devices running Android 15+ although I have a few reports on Samsung devices too. I haven’t been able to reproduce on my physical Pixel 7 test device, but S
In my paywall, certain things don’t update with package selection. I am using the React Native SDK and Expo. In the paywall, the user is able to select between either a monthly or yearly subscription period by tapping either of the correlating boxes. The selected box is checked, and the border is set to a width of 2, while the unselected product’s border width is set to 1. On Android: The border width does not change on selection, but the checkmark does.On iOS: Both the border and checkmark work properly.On both: There is a text field saying “Auto-renews for {{ product.price_per_period }} until canceled”, but the variable does not switch to reflect the monthly price, it’s always set to the annual price. Is there something specific I’m supposed to do to make it function correctly?
When linking RevenueCat to Mixpanel in iOS, the Mixpanel user City and Region fields become empty. I see reference to this in a prior post but no solution. This is the code I am using:Mixpanel.mainInstance().identify(distinctId: Purchases.shared.appUserID)
When I use {{ product.offer_period_with_unit }}, the paywall displays correctly in the bottom button, but the top button displays “1 year”, using the same variable. This is testing with TestFlight on iOS.
Hi RevenueCat Support Team,I’ve recently integrated the Meta Ads integration as per your documentation and triggered several purchase events while running the app in development mode. However, I’m not seeing any indication that these events are being sent to Meta—neither in the RevenueCat dashboard nor on Meta’s side.A few additional details: I haven’t implemented the ATT prompt yet, so users have not granted tracking permission. From the docs, it appears that the IDFA is optional and RevenueCat should still be able to forward events without it. The app is using RevenueCat’s anonymous ID and I’ve verified that purchases are correctly being tracked in the RevenueCat dashboard.Could you help clarify:Are events from development builds or sandbox purchases forwarded to Meta Ads? Is ATT permission mandatory for Meta Ads event forwarding in practice, even if IDFA is optional? Are there any known limitations or delays when viewing these events in the dashboard or Meta Events Manager?Let me kn
Hi, Does anyone ever encountered randomly this issue in the lasts few days ?I’m getting that using a Firebase Cloud Functions, never been able to reproduce using Postman... GET /v1/subscribers/{id} return 403 with : data: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n' +'<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">\n' +'<TITLE>ERROR: The request could not be satisfied</TITLE>\n' +'</HEAD><BODY>\n' +'<H1>403 ERROR</H1>\n' +'<H2>The request could not be satisfied.</H2>\n' +'<HR noshade size="1px">\n' +'Bad request.\n' +"We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.\n" +'<BR clear="all">\n' +'If you provide content to customers through CloudFront, you can find steps to troubl
Hello Revenuecatters:we are having an issue with Paywall layout, making the paywall not usable from a customer experience standpoint, after updating to Android API 35. Does anyone else have this issue? The issue is that the padding of the paywall is pushed down making the pay button below the fold on the screen and therefore the user cannot press on it.
Hello,I have an app that’s been live for about a year. When I first set up the project, I didn’t define my own user IDs, so RevenueCat has been assigning them automatically. Now I’d like to switch to using my own user IDs to make subscription granting and tracking easier.My question is: what happens if I assign new user IDs to existing users? For example, if a user currently has a premium subscription under their RevenueCat-assigned ID, will their premium status still be recognized after I set a new ID?This is crucial to clarify, as I want to avoid any risk of premium users losing access to their subscriptions. Thanks in advance for your guidance.
Live paddle webhook is trigger successfully but data is not coming at revenue cat side.For sandbox user data coming revenue side and it is working fine but not for live.I am verify Live api key all fine. then I added the API key in revenue cat then webhook automatically in my live Paddle account. And logs print in paddle as well. but LIve data not coming in RevenueCat sideplease help me what is wrong here
Hi!Is there anyway we could set a “default” entitlement for new users.The trial from Apple Store imply the activation of a subscription and it seems to repeal a lot of users.Is there any way we could have something to give new users the ability to try the app with an entitlement with a limited duration? Doing it through the Rest API induce a lot of latency and we have to wait for the app to contact the server, then the server to grant the entitlement and finally the local customer to synchronise and sometimes it takes a long time. It would be great to be able to assign a default entitlement when a user is created without relying on the various stores. Is something like this possible? Is it a feature you could consider? Thanks!
Hi!We have integrated Revenuecat with AppsFlyer for running ads on Apple Search Ads and Meta. The Apple Search Ads integrated is working, but we have some issue with getting attribution to work for Meta.We are doing these calls: await Purchases.collectDeviceIdentifiers() await Purchases.enableAdServicesAttributionTokenCollection()... if (appsFlyerConversionData) { await Purchases.setMediaSource( appsFlyerConversionData.data.media_source, ) }However, it seems that ‘enableAdServicesAttributionTokenCollection’ is only relevant for Apple. How do you collect similar data for Meta?
I’m integrating with RevenueCat webhooks to track subscription plan changes across iOS and Android. From the documentation, I can see the following events are emitted when a plan change occurs: Android: PRODUCT_CHANGE,INITIAL_PURCHASE iOS: PRODUCT_CHANGE,RENEWAL My questions: Can I rely solely on the PRODUCT_CHANGE event to handle corresponding plan changes in the backend for both iOS and Android? Does the PRODUCT_CHANGE event guarantee that the payment has been processed successfully, or is it just an indication of the plan change attempt? In the case of a payment failure during a plan change, what happens to the subscription? Does the existing subscription continue until the end of the billing period? Or would RevenueCat emit an EXPIRATION event for the new subscription?
Hi team,I try to open my existing paywall, but it won’t load, and multiple pages of the revenuecat site show this error, even after page refresh, cleared cache, log out log in again, tried with a different browser. please help!
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.