Build With RevenueCat

Build a customized mobile subscription business with RevenueCat. We do the heavy lifting of normalizing subscribers from any source and maintain a single source of truth for subscription status, so you can get back to building your app.

RevenueCat is a powerful, secure, reliable, and free to use in-app purchase server with global support. All you need to get started is an API key.

Ask A Question



Free Trials before iOS 11.2

Hi, we plan to introduce subscriptions in our application and considering to integrate RevenueCat. Our current implementation (for testing) is using a JSON file on our own servers containing productIDs (and additional information like, which are active) instead of hardcoding the product identifiers to be fetched from StoreKit. The functionality and handling (especially for edge cases) of RevenueCat seems to be great. However, there are some things that are a bit unclear to me: 1) We plan to offer free trials for subscriptions and also support users before iOS 11.2. Free trails (in contrast to Pay as you go and Pay in advance) work before iOS 11.2, however the trial info (introductory price) is only available as a property starting in iOS 11.2. To show the trial information (e.g. duration) to users before iOS 11.2 I am storing these currently in the remote JSON file and only request these information from SKProduct for users running iOS 11.2 and higher. Where can I add this info in RevenueCat considering I want to get rid of the remote JSON file? 2) The current logic in RevenueCat applies that in an offering at least one product should be active. Let's consider an example where I have a monthly and yearly offering and want to temporarily not show the monthly offering in the app for new subscribers. As at least one product must be active in any offering, where can I store this info? Is this possible in RevenueCat or do I need to run my own remote server providing this additional information. Considering 1) and 2) maybe it would make sense to have a custom text field, where are plist or json string could be inserted for additional product info? Thanks for answering these questions in advance, Hendrik

Posted by Hendrik Holtmann 6 months ago


Something wrong in app review

I developed an iOS app that offers monthly subscriptions and I integrated RevenueCat. I tested the in app subscription before uploading the app for review. On RevenueCat's side I have set up a "monthly" entitlement, a "monthly offering" offering that has the monthly subscription product from AppStore. In my main view controller I have: func purchases(_ purchases: RCPurchases, receivedUpdatedPurchaserInfo purchaserInfo: RCPurchaserInfo) { let subscriptions = purchaserInfo.activeSubscriptions if !subscriptions.contains("GooGooLandMonthlySubscription") { // The user is not subscribed displayUpsellScreen() } } and in the Upsell view controller I check for the active product and I populate the buy button with the price and currency: if let entitlements = self.entitlements { // Get the monthy entitlement (we only have monthly... duh) let entitlement = entitlements["monthly"] let offerings = entitlement?.offerings let offering = offerings?["monthly offering"] let activeProduct = offering?.activeProduct if activeProduct != nil { ... } Also, when I populate the buy button I also populate some text fields with other info, especially the info Apple requires for subscriptions. In my tests, everything works fine, but Apple rejected my app and uploaded a screenshot with the Upsell screen and the texfields and the buy button are NOT populated with any info. They are just blank... well, with the dummy text I set in the interface builder. Any idea what's going on? Seems like the activeProduct is nil... Thanks, Bogdan Nistor

Posted by Bogdan Nistor 7 months ago


Error on Installing Cordova-Plugin-Purchases

Hi, I am receiving this error when I try to install the revenue cat plugin for cordova. I have updated cordova to V9.0.0 and NPM to V6.9.0 This is the error: 72 verbose stack Error: cordova-plugin-purchases@0.0.3 preinstall: `npm run fetch:ios:sdk` 72 verbose stack Exit status 1 72 verbose stack at EventEmitter.<anonymous> (C:\Users\Edawe_000\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\index.js:301:16) 72 verbose stack at EventEmitter.emit (events.js:189:13) 72 verbose stack at ChildProcess.<anonymous> (C:\Users\Edawe_000\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14) 72 verbose stack at ChildProcess.emit (events.js:189:13) 72 verbose stack at maybeClose (internal/child_process.js:970:16) 72 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5) 73 verbose pkgid cordova-plugin-purchases@0.0.3 74 verbose cwd C:\Users\Edawe_000\Desktop\Elapse\Swish v4\swish---basketball-shot-tracker 75 verbose Windows_NT 6.3.9600 76 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\Edawe_000\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "install" "cordova-plugin-purchases@~0.0.3" "--production" "--save-exact" 77 verbose node v10.15.1 78 verbose npm v6.9.0 79 error code ELIFECYCLE 80 error errno 1 81 error cordova-plugin-purchases@0.0.3 preinstall: `npm run fetch:ios:sdk` 81 error Exit status 1 82 error Failed at the cordova-plugin-purchases@0.0.3 preinstall script. 82 error This is probably not a problem with npm. There is likely additional logging output above. 83 verbose exit [ 1, true ] - Thank you

Posted by David 7 months ago