Discussion and help from anything related to RevenueCat.
Recently active
The Overview metrics in v2 API MRR and Revenue are returning as whole numbers.This should be in double so that the values can be more precise.Example, real MRR is 16.82 but the API returns as 16 which is inaccurate.
I am currently using Android subscriptions in the sandbox environment. When a user makes a purchase, the initial_purchase event is received correctly. However, events such as renew, cancellation, and expiration are not being received. Is this expected behavior in the sandbox environment? For reference, below is the webhook I received:{ "event": { "event_timestamp_ms": 1724862639635, "product_id": "premium:5-monthly", "period_type": "NORMAL", "purchased_at_ms": 1724862633772, "expiration_at_ms": 1724862929764, "environment": "SANDBOX", "entitlement_id": null, "entitlement_ids": [ "premium" ], "presented_offering_id": "default", "transaction_id": "GPA.3346-5354-2391-53417", "original_transaction_id": "GPA.3346-5354-2391-53417", "is_family_share": false, "country_code": "KR", "app_user_id": "671e13db-492e-4779-a39e-a9f4cd89c245", "aliases": [ "671e13db-492e-4779-a39e-a9f4cd89c245" ], "original_app_user_id": "671e13db-492e-47
The paywall and offerings work perfectly in the test environment, and Apple's testing also shows everything functioning correctly. However, once the app is approved and goes live in production, the offerings no longer appear. This means I now have a live app, but users can't make any payments because they can't see the offerings. could this be a configuration issue. i followed all instructions
Offerings are working when I submit to the App Store on test flight and real device. , but once they are approved by apple and ready for distribution, the offering do not show. Are they changing some code? This makes no sense to me why this is happening. This is the 1st time submitting an in-app purchases for me. I feel like I'm doing something wrong but how would Apple approve this if it was not working for them. It's like once it goes into production something changes. The lay out is the user has 3 Searches (credits) once the 3 searches (credits) are used on the 4th search the paywall with offerings pop up. This works perfect in testing but once apple approves it, it just shows Loading which is my default when the offering do not load. Paywall comes up but no offerings Any help is appreciated. Thank you.
Hello,The new Placements feature looks great although I’m missing having metadata defined per Placement that I could read in the app. Currently metadata are only available on offerings.Imagine that you have 3 Placements, with different offerings eachPlacement1 → Offering1Placement2 → Offering2Placement3 → Offering3For each placement I’d like to dynamically define some behaviour using metadata, e.g. whether to show a success screen or subsequent better offer paywall. I could add such logic to the app by checking Placement, but it requires a new app release each time I want to change such behaviour. I could also add metadata to offering, but keep in mind the offering may be assigned to various Placements while the behaviour should be defined per place.What do you think?
I want to track app installs, but currently, I am not receiving any install information on iOS. I found the this for a solution in revenueCat document: https://www.revenuecat.com/docs/integrations/attribution/facebook-ads#track-install-and-usage-events Track Install and Usage EventsAs noted above, you'll need to disable all client side tracking of revenue to prevent double counting of revenue in Facebook Ads Manager. To continue tracking install and usage events, you'll need to call Facebook's 'activate app' event after configuration:-Swift// disable automatic trackingFBSDKCoreKit.Settings.shared.isAutoLogAppEventsEnabled = false// optional: call activateAppFBSDKCoreKit.AppEvents.shared.activateApp() What is the equivalent of this code in flutter?
I am developing my app with React native plus Expo.It provides an inapp subscription using RevenueCat.The app works well on my local PC and I could successfully purchase subscription plans.These are the commands I built the local version :$ npx expo prebuild$ npx expo run;android --device$ npx expo start --dev-client After the local test, I built a PRODUCTION profile of my app by the following command$ eas build --platform android --profile production Then I launched it on the close-test track of the Google Play console.But the app does not work for paywall screen.Actually, it displays the home screen, and it gets stuck when I click the purchase button whichis supposed to display packages, offerings, or whatever on the next next paywall screen. Any idea about where can I see to address this issue?Thank you in advance.
I'm just curious if I signed up for a sandbox API not a production API because the offerings work perfect in testing but when it goes to Apple production after approval, it does not work Does anyone know if there's that is two different environments?
I just released my app a couple of weeks ago and I had some issues but I think I have rectified those. I then installed the app on my phone and I went through the subscription process and it worked. I got the paywall and the apple payment went through etc. This was about 2 hours ago. RevenueCat is still not showing this subscription. How long does it take before I see this? Thank you.
I have a page withSingleChildScrollView where content is loaded. It’s infinite scroll view where data is dynamically added. For a given situation I would like to add PaywallFooter at the end of the page if the condition is not met. Is it possible? I am using flutter purchases_flutter: ^8.1.0purchases_ui_flutter: ^8.1.0
I want to use only custom app user id’s in my iOS SwiftUI app, but also delete users. Per the documentation, logging out will cause creation of anonymous app_user_id: To only use custom App User IDs, you must take care not to generate any anonymous App User IDs in the SDK. Anonymous App User IDs are generated when the SDK is configured without a provided custom App User ID, and are also created on logOut() as mentioned above.https://www.revenuecat.com/docs/customers/user-ids#how-to-only-use-custom-app-user-ids But in order to delete users in RevenueCat programmatically to comply with Apple’s User Deletion Policies, I must log out the user in addition to deleting them:There are two ways to delete a customer in RevenueCat – manually through the customer dashboard or programmatically via the REST API. With either approach, you should make sure that the customer is also logged out through the RevenueCat SDK in addition to being deleted or they’ll get recreated on the next app launch.https:
I’m currently testing in the sandbox environment. The INITIAL_PURCHASE webhook is being delivered correctly, but I’m not receiving the RENEW, CANCELLATION, or EXPIRATION events. What’s strange is that when I resubscribe, both the INITIAL_PURCHASE and the previous EXPIRATION events are delivered together at that time. Can you help me understand why this is happening and how I can ensure that the RENEW, CANCELLATION, and EXPIRATION events are sent as expected?
Flutter: When I used the sdk RevenueCat version 6.23.0 it worked perfectly, I have updated to the latest 8.1.0 and it does not show me the paywall, it shows me error 23, maybe the methods are different, I share how I call it.in the main.dart I initialize it and check if it is a subscriber.Future<void> initRevenueCat(BuildContext context) async {await Purchases.setDebugLogsEnabled(true);PurchasesConfiguration configuration;if (Platform.isAndroid) {configuration = PurchasesConfiguration('goog_xxxxxxxx');await Purchases.configure(configuration);}else if (Platform.isIOS) {configuration = PurchasesConfiguration('appl_xxxxxxxx);await Purchases.configure(configuration);}bool esPro = false;try { CustomerInfo customerInfo = await Purchases.getCustomerInfo(); List<String> entitlementIdentifiers = ["Monthly", "Annual", "Six Months"]; for (String id in entitlementIdentifiers) { if (customerInfo.entitlements.all[id]?.isActive == true) { esPro = true; break; } else { esPro = false; } }
How to detect automatically when InAppPurchase subscription expire or is cancelled by user ?My app show some feature on the home page and I want to display them only for subscribed users.If the user cancel the subscription in an other device how to detect that ?Firebase claims seems to not be automatically updated...I’m using flutter.
Hi there 👋🏻I am trying to use SubscriptionStoreView(for: offering) that is mentioned here:https://www.revenuecat.com/blog/engineering/storekit-views-guide-paywall-swift-ui/#h-using-with-revenuecat But I am not able to find this view, although I have imported both RevenueCatUI and RevenueCat.What am I missing?
Can someone help me with this ? I have attached two versions, one on my iphone 13 pro with ios 18 and another one on my old iphone 7+ with ios 15. I don’t understand how to control the font size and wraping that is happening on the older iOS version
I am trying to update my Android app but now getting following error on play store console Your app currently uses Play Billing Library version AIDL and must update to at least version 5.2.1 to make use of the latest monetization features on Google Play And its blocking me to create a release. Today I upgraded revenuecat sdk to ```implementation 'com.revenuecat.purchases:purchases:7.0.0'```And I have also added ```implementation "com.android.billingclient:billing:7.0.0"``` But Google play console not allowing me to create release. I am not sure what to do here. would appreciate any help. Thanks
Hi RevenueCat, I would appreciate some help here. I am developing an app in SwiftUI for iOS and using the RevenueCatUI PaywallView to display offers. When the paywall presents itself to the user, I would like to verify if the user has made an account with the app before allowing the purchase.Can you advise on how to make this change without altering the package dependency itself? I would ideally like to make an extension of the PayWallView or a superclass “CustomPayWallView” with custom functionality, but it is a lot of code to read through and edit.I understand if this is a big ask, but any pointing in the right direction would be a great help. Thank you! Edit: I would also appreciate a link to the PayWallView API Reference, I can’t seem to find one. Thanks!
My app don’t have any login or registration. User can simply come and use my app. My app is a chat bot and user can use it for free 3 times and after that user have to buy the subscription to keep using the app. Now the issue is that google is asking for login credentials to access to premium features of the app. How can I allow them to bypass this to access to features for free to test my app.
In the apple I configured - introductory offer - “$17.99 every month for the first 3 months”How in the paywall I can get this “3 month” or length of introductory period?{{ sub_offer_price }} for first {{ sub_offer_duration } return$17.99 for first 1 month
Hello,I integrated the FB SDK according to your documents and after the release I did not see AppInstall events in the FB Console.I assume this is because I disabled automatic FB event tracking and all RC sends is subscription events.I can't use the AppActivate event because it can't be related to ad campaigns.Can you explain if I might have made a mistake somewhere when linking FB and RC.
I am new to RevenueCat and just learning the basics of how to integrate it in Android app. As of now, I am continuosly navigating back and forth between various revenue cat webpages and I am facing this weird UI anamoly: RevenueCat has a great looking RC fabicon attached to its docs, and community pages. But on the app.revenuecat.com page, there is no favicon. Why is that happening? Is it just an issue at my end or anyone else is facing that?
HiI watched the video, I read many post but I didn’t find a solution and I’m still blocked Could not validate subscriptions API permissions My RevenueCat App ID: apped8cbf6a6e if someone from Revenuecat can help me please 🙏
Hi @Michael Fogel @Jens @kristineT ,As mentioned in the in this thread and also in this doc (https://www.revenuecat.com/docs/event-flows) in the billing issue flow section that if a billing issue is encountered, then the following events happen:-1. If grace period is enabled, then billing issue and cancellation event is dispatched simultaneously and when the grace period ends, then expiration event is dispatched immediately.2. If grace period is not enabled, then billing issue, cancellation and expiration is dispatched immediately.I have been testing the events in the sandbox environment for two products I created in play console in which I enabled grace period in one of them and disabled in the other one and I bought the subscription successfully and then I chose the test card always decline option before renewal to test the billing issue events. I observe that billing issue and cancellation event is dispatched in both scenarios but the expiration event is dispatched exactly after 10
Hey,Recently I switched my unlock check from look for entitlements in `active`, to looking in `activeInCurrentEnvironment`, in order to prevent people unlocking Pro in TestFlight and carrying it over to production.This went smoothly for them majority of users, but a couple of users have reported losing access to their Pro status, despite having active subscriptions/production lifetime purchases. I got one user to send through a recording of his error, and the purchase flow went as follows:Launches app, I call `getCustomerInfo` with a policy of `notStaleCachedOrFetched`, I then pass that to a function call `handlePurchaseInfo`, which determines the user does not have any active entitlements. They open the Pestle Pro screen, which determines they are ineligible for a trial. They hit ‘Restore Purchases’, which triggers the RevenueCat restore purchases flow, and I pass the result to the same `handlePurchaseInfo` method from before. In this case, `activeInCurrentEnvironment` is empty, so I
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.