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



Flutter: purchaserInfo.originalAppUserId initially incorrectly set to an alias: Can I force Purchases.getPurchaserInfo() to refresh?

Hi, I'm using originalAppUserId to uniquely identify users. I'm finding that with a new app installation it initially returns an alias: 1) User has been seen before (i.e. they've used the App with the same Google Play id, whether on the same device or not) 2) User re-installs the app, causing RevenueCat to create a new alias I'm expecting originalAppUserId to return the original id, allocated when they first started using the app, but what actually happens is this: - PurchaserInfo instance from the first call to Purchases.getPurchaserInfo() has originalAppUserId populated with the NEW alias. This persists on subsequent calls, presumably because the instance is cached (as per your documentation). - If I force PurchaserInfo to refresh by putting the app into and out of the background the new PurchaserInfo instance has originalAppUserId correctly set. Calling restoreTransactions seems to force PurchaserInfo to refresh, but this can be a very expensive operation on Flutter, taking multiple seconds where the user has a lot of history. Is there a way I can work around this? Perhaps by marking the PurchaserInfo cache as dirty? I can afford to wait a second or so on first startup since the user is greeted with a welcome screen, but at the moment I can make use of this time because however many times I call Purchases.getPurchaserInfo() it always returns the cached copy with the incorrect id. James

Posted by James Ormrod about a month ago


Question about Apple review rejection: verifyReceipt

I was using this package for one month subscription before revenuecat and I got a rejection mail as following. I wasn't using verifyReceipt method and the user app review team used was always subscribed. So I would like to learn if you handle this scenario? """ Guideline 2.1 - Performance - App Completeness We found that your in-app purchase products exhibited one or more bugs when reviewed on iPad and iPhone running iOS 13.2 on Wi-Fi. Specifically, the subscription launched to a message that we have an existing membership even though we have not processed any in-app purchases. Thus we were unable to subscribe or review the subscription process. Next Steps When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead. Resources You can learn more about testing in-app purchase products in your development sandbox environment in App Store Connect Developer Help. For more information on receipt validation, please see What url should I use to verify my receipt? in the In-App Purchase FAQ. Learn how to generate a receipt validation code in App Store Connect Developer Help. """ Also how long sandbox test user stays subscribed?

Posted by Figen Güngör about a month ago


What is an Entitlement?

In iOS there is a thing called an Entitlement Certificate that is added to the project once IAP, Notifications, iCloud, etc are added to the project. In AppStoreConnect when creating IAP you have to add a Product ID, a Display Name, and a Description. -productId: com.acmeinc.oneDollarTip -displayName: One Dollar Tip -description: Many Thanks! -productId: com.acmeinc.tenDollarTip -displayName: Ten Dollar Tip -description: Many Many Thanks!! On your Entitlements page in the "Creating Entitlements" section I don't know what to put where. -you use the name "Entitlement" as the name of thing to create which is similar to the name as an iOS "Entitlement" Certificate which is confusing. It almost seems as if I'm supposed to add my iOS Entitlement Certificate to RevenueCat -the example pic has 4 columns: Product ID, Store, Active, and Offering yet the page to create the Entitlement only has 2: Entitlement Identifier: and Entitlement Display Name: -the example pic has productID: monthly_id. Is this the same thing as the iOS IAP productId (com.acmeinc.tenDollarTip) or is it just a random name that I make up? -I don't know what the Entitlement Display Name is because the example pic doesn't reference it. -the example pic shows Store: play_store. After I create an Entitlement is this auto added later on or should I do it (if so at which point)? Since the example shows play_store do I need to later add something like app_store or does it do it on it's own to the Store column? Using the above examples from "One Dollar Tip" and "Ten Dollar Tip" can you please show me what to add in these fields so that everything will be correctly routed: Entitlement Identifier: ??? Entitlement Display Name: ??? Sorry for the confusion but from an outsider looking in the example pic in "Creating Entitlements" adds more questions than answers.

Posted by Lance Samaria about a month ago