Discussion and help from anything related to RevenueCat.
Recently active
If you’re here, it’s probably because you’ve encountered an active issue related to Apple’s receipt verification.RevenueCat relies upon Apple’s `verifyReceipt` endpoint which is currently facing an outage: https://developer.apple.com/system-status/This seems to be affecting sandbox and TestFlight purchases only at this time, although Apple’s status page doesn’t mention it explicitly.Encountering this issue? Post below ⬇️ RevenueCat isn’t able to resolve this at this time from our end, but it may help bring awareness and ease to other developers facing the same issue.Update 2/8/23 19:20 UTC:Customers (and me 😃) reporting things are working as expected again - post below if you’re still having trouble, seems like a slow rollout of a fix from Apple.Update 2/8/23 17:40 UTC:Apple’s reporting the issue is fixed, but we’re still encountering errors. Will provide another update as soon as possible.
Expo Go doesn’t build native modules, so you may run into this error while trying to run your app with react-native-purchases in Expo Go. In order to use RevenueCat with Expo, you will have to create Development Builds, which can be done either by using EAS, or by making builds that are compatible with Xcode and Android Studio. There are detailed instructions for doing either one in this page:https://docs.expo.dev/development/build/ Easiest way to be able to debug is to just run either of the following:npx expo run:android -dnpx expo run:ios -d We also have a blog post that goes step-by-step into how to make an app with Expo and RevenueCat using EAS: https://www.revenuecat.com/blog/in-app-puchase-expo-managed-workflow/ Let us know if you run into any issues!
Hi! 👋🏻 We’re in the final stages of our testing of some StoreKit 2 features before fully calling it ready for production, and we’d love your help! Context: Starting with v4.0.0, our SDK already uses StoreKit 2 by default on compatible devices for some features where the StoreKit 1 functionality was problematic, buggy or unreliable, and StoreKit 2 is essentially guaranteed to be an improvement (like checkTrialOrIntroDiscountEligibility). For devices that aren’t compatible with StoreKit 2, it defaults to a StoreKit 1 implementation. However, we haven’t enabled StoreKit 2 by default for making actual purchases. We’ve tested it extensively in Sandbox and StoreKit Test (see our blog post on how we test our SDKs) but we need to see how well StoreKit2 behaves in production before calling it ready. How to help: Our SDK includes an optional flag in the configure method, called useStoreKit2IfAvailable. In order to help, all you need to do is to set that flag to true! With this flag set,
Will there be / is there out-of-the-box support for teams using Apple’s Advanced Commerce API?Team’s with potential hundreds of different SKUs that sell as one-time purchases through the new API, what will that mean in terms of RevenueCat? Currently there are products, synced/imported from the stores, that unlock entitlements. Is the flow still going to be the same? Any resources on this available?
Hello there,I’m attempting to set up a new RevenueCat account, and am unable to get past step 7/8 of the onboarding phase for an existing iOS app with existing consumable IAP and subscription products.After creating my App Store Connect API Team Key (w/ App Manager permissions) and IAP keys, I’m able to upload both of those to the onboarding flow. RevenueCat appears to be able to import my existing products into Step 7 of 8, “Define your products”, where I see my existing products accurately listed.However, when I attempt to advance to the next step of onboarding, I see a “Invalid authorization token.” error at the top of the page.This appears to be coming from the following URL:https://api.revenuecat.com/internal/v1/developers/me/onboarding/projects/{project_id}/apps/{app_id}/setupWhich returns:{ "code": 7224, "message": "Invalid authorization token."}I have attempted this on multiple browsers (Chrome and Safari) on MacOS, no extensions, and have regenerated keys to no avail. Pl
Hi all,My iOS apps are getting rejected more and more often because of “Guideline 2.1 - Performance - App Completeness” where they claim they do not find the submitted new subscription in the submitted binary.This is an interesting take because:I cannot put the new subscription in my RevenueCat default offering because it is not approved yet - so anybody who downloads the app now would not see it.But if I dont put the new subscription in my default offering obviously the App Review team will not see it during review. What would be the best practice to introduce new subscriptions, so it does not mess up the paywall for the existing users but also the App Review team sees it in the app. How you usually do it? (Depending on the paywall and the products in the default offering, you cannot really put the new subscription there before it got approved. For example if I have only 1 subscription product in my default offering, etc)(Also sometimes you just want to submit a new subscription to b
Hello,I’m trying to set the paywall dynamically inside of my app, and I have certain offers that do not yet have paywalls created.I was trying to create a fallback in this case, to prevent user error on our end, in the case we do not have a paywall setup for a specific offer, so that we dont present the user with a black paywall screen.I noticed there wasnt any event that triggers in this case that ` RevenueCatUI.PaywallError 0 ` fires.Wondering if there is a way to react to this error being fired, so I can handle it. Thanks
Is it possible for a paywall (SwiftUI) to show introductory / trial offers? I’ve browsed through documentation and the RC API. This seems like such a popular request I’m surprised that this is so hard to find.
Hello,I have connected RevenueCat and Stripe, and I have added the following events: • customer.subscription.updated • customer.subscription.deleted • charge.refunded • invoice.updated • customer.subscription.created • checkout.session.completedI have also configured the Stripe Webhook Secret, and the connection is working properly. However, I’m facing an issue: the Product IDs remain in “No Status” and do not connect.
For .NET MAUI developers that would like to use Android and iOS RevenueCat functionality we have created a wrapper that is really easy to usehttps://github.com/Kebechet/Maui.RevenueCat.InAppBilling https://www.nuget.org/packages/Kebechet.Maui.RevenueCat.InAppBilling/ The wrapper serves as an abstraction for both platforms and abstracts away the need for you to use platform-specific code. Bindings used by the wrapper are:Android: https://github.com/Kebechet/Maui.RevenueCat.InAppBilling/tree/main/src/Maui.RevenueCat.AndroidiOS: https://github.com/Kebechet/Maui.RevenueCat.InAppBilling/tree/main/src/Maui.RevenueCat.iOS This project was created because of the mobile app we created and thus it will be supported as long as the app itself.
In my app I use the webhook from RevenueCat to keep my backend in sync with customer entitlements and enforce the entitlement check on every request from the app.I know that webhooks are async and there might be some lag, so what I do is check the database first for the active entitlement, and if it is not found or inactive, I hit the RC API as a fallback.My question is on the front end - in the React Native SDK, when the promise resolves on the purchasePackage() method, can we assume at that point everything is in sync between the App Store or Play Store and RevenueCat? Even if the first webhook were delayed a little, would I immediately find the user’s active entitlement via the API in my fallback check? Hopefully this makes sense.
My paywall layout overlaps with iOS’s top bar and this looks awful, why don’t you give an access to a wider options of starting a paywall view with ability to disable ignore safe area??
I'm finishing my FlutterFlow app and want to protect content based on user subscriptions. I'll handle the protection with Supabase since there are certain situations where blocked content doesn't depend on whether the user is paying or not.To do this, I'll use webhooks to send RevenueCat changes to Supabase. The only thing I need to know is how RevenueCat registers users. Researching online, I found the following:Status: Active / period_type: Normal, Promotional, Intro, TrialStatus: Expired / period_type: Normal, Promotional, Intro, TrialStatus: Non-subscriptionI also need to know if these words are registered with the first letter capitalized or not.I'm asking this because in test environments I can't see how a real user behaves.Thanks
Hello!I am moving from my Stripe Web PayLink implementation to Revenue Cat. I want to have everything managed my RevenueCat.I have create an entire and simple Web PayLink configuration that duplicate (or similar to) the one I have on Stripe.However, just this no-code implementation is erroneous.The error code returned is: 16. The error is trigger just right after I entered / confirmed the billing email address.My PayWall address, where 1 is the user id, is the following:https://pay.rev.cat/yhhjrzrccqdonyxj/1 Screenshot of the error:Thank you!
Hi, it's my first time setting up RevenueCat. So I just want to be sure I won't face an issue on production.I have one subscription which can be monthly or annual, each being its own product. I've set up both products as an entitlement, while testing on sandbox environment I noticed a potential issue. When I sign up for Monthly plan then switch to Annual Plan and cancel the subscription, the `willRenew` flag remains true until the monthly plan reaches the expiration date, even though it won't renew since it's been cancelled. This is also reflected on the Dashboard so we see: - Started a subscription of `monthly` ✔- Changed their renewal preference to `annual`✔- Opted-out of renewal for `monthly` ✔And on the Entitlements card: `monthly.product.id`Subscription renews in X minutes it only updates the dashboard info and the willRenew flag once the expiration time has been reachedIs this just a sandbox behavior ? If this is the expected behavior, how can I check if it won't renew?I'd like t
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.
Hi, I have a flutter app without auth.On Android some users that have changed their devices or reinitialized their device, complains that when they hit the restorePurchase button in the app, nothing is restored.But they are on the same google account with valid proof of purchase, receipts, that they emailed me. The transfer to the new app user id, is not happening it seems when we call the await Purchases.restorePurchases()My account setting is configured on “Transfer to new App User IDs”I have updated to the last version of the sdk, and it’s the same. Restore purchase isn’t working anymore.Could you please tell why and how to fix this ?Thanks
Hi,Will there be any plan to add other currency and if yes will Malaysian Ringgit (MYR) be included in the update? Really hope you are guys will include MYR in the near future. We have a big event coming up in May this year. Hopefully you guys can include MYR in Web Billing before that.ThanksZulfadhli
We are offering the same subscription at different price levels through different subscriptions in Google Play.So instead of updating prices of a single subscription by country we have the same subscription at different price levels available in certain countries only.RC only allows one product per package, so we have to set up dynamic package selection in our code.We are wondering what data we retrieve from RC based on the user requesting an offering with multiple packages in their country.For the offering, when we explicitly request a package / store product that is not available in the user’s country will it return null or will it resolve?Currently we are getting mixed results from the api, but are not sure if some are just caused by some subscriptions being available to fetch for RC and others’s not bc they have been created at different times - thus this post.