Get help with your SDK implementation.
Recently active
I’m integrating RevenueCat into an app with a custom configuration and AB testing system. I can mirror some of what my app does in RevenueCat by setting up different offerings in RC. Then RC can report its transaction centric view segmented by the cohorts that my custom client side code creates. But to achieve this I need the client/app to call a RC API to set the users current offering. Is there a way to do this?
Hello, If you get the error : TypeError: _reactNativePurchases.default.setup is not a functionThe getting started for RN is not up to date.The Purchases.setup("public_ios_sdk_key") is no more available.https://docs.revenuecat.com/docs/getting-started#7-configure-the-sdkYou should use Purchases.configure({ apiKey: "public_ios_sdk_key" }) instead.https://docs.revenuecat.com/docs/configuring-sdk#initialization
Hello, My app has 3 products, Monthly, Annual, and Lifetime packages in 1 offering. On launch I call getOfferings, take the current offering, and store the packages. My paywall is dynamically generated based on these packages. When I try and call purchase() on my Annual or Lifetime packages it works fine, but my Monthly fails with a weird error: 2022-08-23 11:00:18.932233+0930 Pestle[44020:4973217] [Purchases] - INFO: 💰 Purchasing Product 'mymonthlyoffering' from package in Offering 'Pro Upgrade'2022-08-23 11:00:23.562161+0930 Pestle[44020:4973974] [Default] [StoreKit] Received error that does not have a corresponding StoreKit Error:Error Domain=ASDServerErrorDomain Code=3502 "This item is not available." UserInfo={client-environment-type=Sandbox, storefront-country-code=AUS, NSLocalizedDescription=This item is not available.}2022-08-23 11:00:23.562331+0930 Pestle[44020:4973974] [Default] [StoreKit] Purchase did not return a transaction: Error Domain=ASDServerErrorDomain Code=3502 "Th
I am wanting to change a user’s current offering depending on how they answer certain questions in our onboarding flow (before seeing the paywall). I am able to successfully update their current offering using the REST API, but when the user reaches the paywall, the “standard” current offering is still shown, not the user’s customer current offering. I read somewhere that the current offering is cached on app launch. Is there any way to refresh this without having to restart the app?
We’re integrating RevenueCat to our Unity app, but we can’t seem to find the way to display the detailed logs I’ve seen around in the documentation and in this forum. Those described here. I’ve tried in both an Android and an iOS build.I am, of course, calling SetDebugLogsEnabled(true) before calling Configure(...), as prescribed in the docs. I can also correctly purchase sandbox subscriptions using the SDK, so the setup phase seems to be working fine. (We’re using RevenueCat SDK 4.0.0 and Unity 2021.3.8)
I'm using lib 4.1.2 purchases_flutter.My app requires login to be subscribed.Subscribe works correctly, the problem starts when I log out of the user and log in.When I login again the entitlements active comes empty, if I reopen the app it also comes with empty entitlements.I'm using test user on android with annual subscription renewed every 30 min.Any tips?
[React native IAP implementation]Hello! I’m implementing a redeem code button that will redeem discounted annual products in my app. The way i implemented to check it was add a purchasesListener when he clicks the redeem code button, the problem is I want to remove the listener when he goes from page A ( page with redeem code button ) to another page B ( meaning he did not reclaim the coupon ), or when he enters another specific page C in our app, that is se screen after the paywall if he did not claim any offer codesI don’t know if I agree with the interface of this purchases listener. Having to pass a function reference when i add and when i remove means i have to keep track of this function reference in some sort of global store or do some workarounds only to keep the exact reference i used to remove…Couldn’t the sdk accept a function and keep inside the sdk the reference to the function, making it immutable across app’s lifecycle?I thought it this way→ add purchasesListener ( cal
Is there a list of all the error code number? Ideally we could rely on an enum to decide what message to display or if we want to attempt a retry, but there is a code number in the SDK’s error that could be the next best thing:We could use that, but we can’t seem to be able to find a comprehensive list of all the errors with their codes, only this list of strings. Where can we find such a list? (We’re using RevenueCat SDK 4.0.0 and Unity 2021.3.8)
We have the combined issues of 1) purchase requests hanging and 2) PurchaseErrorCode.operationAlreadyInProgress for our flutter app. Haven’t been able to reproduce on our side but have several users recently report this.Example of a recent Android report: https://finch.hellonext.co/b/Bugs/p/can-t-sign-up-for-trial-with-monthly-billing. We always display the error code that is returned (like in the bug report screenshot) but it sounds like some users can have requestToPurchaseProduct effectively hang without an error code returned. Is requestToPurchaseProduct always supposed to throw an error to timeout, or are we expected to handle timing out purchase requests ourselves?After the hanging, users who close the app and retry again end up getting stuck with PurchaseErrorCode.operationAlreadyInProgress. The error documentation said to wait but the user has been stuck with PurchaseErrorCode.operationAlreadyInProgress for a while, so is there any recommended ways to debug/handle this state?
the problem is I get the web hooks on EXPIRATION, PRODUCT_CHANGE and CANCELLATION but I don’t get it on INITIAL_PURCHASE or RENEWAL so we can't update our database what am I missing, I set every thing right, I also set revenueCat web hooks on App Store Connect for Sandbox and production and I even get customer history in overview with sandbox checked
Hello all,I have setup real time developer notifications for my Android app, everything seems to be working fine and when I click the “Send test notification” in the developer console, the notification is successfully sent and no error is provided, however, all my Android purchases keep getting automatically cancelled 3 days after a successful purchase. My guess is that the purchase is cancelled because they’re not acknowledged by the SDK.I’ve followed the setup steps multiple times and the purchase flow and everything else works as expected, but it is really frustrating to see all my purchases returned because some misconfiguration on either mine or RC’s end that I haven’t been able to pinpoint.I also setup a new Pub/Sub subscription to the topic automatically created by the RevenueCat system and I successfully receive the base64 encoded notification with a payload similar to this one:{"version":"1.0","packageName":"com.my.app","eventTimeMillis":"1641511258205","testNotification":{"ve
I’m trying to set up our payment at my workplace and I encountered a problem I cannot find others are having.Everything works, in theory and practically which is weird, but I still get warning logs in console when clicking the purchase button in app.So as soon as I click the purchase button I get two warning/error in log:[Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction date - this is an issue with the App Store.[Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction identifier - this is an issue with the App Store.However, I still get the prompt to purchase and I fill in my sandbox account details and hit buy. Everything is successful. The customer and data shows up on RevenueCat list. However the billing shows up as an error in customer info in RevenueCat in the details of history for customer.I found this post on RC forums with same issue but the solution was to create a new sandbox user and to mak
When I tried to restore a lifetime access IAP on iOS with this code it did not detect a purchase. It seems to only work with subscriptions. Am I doing something wrong, or is there a different method to detect if a user has purchased a lifetime access IAP? Tried looking through docs but didn’t come across anything. Thanks for any help in advance.Purchases.shared.restorePurchases { (customerInfo, error) in //Check customerInfo to see if entitlement is active attemptingRestorePurchase = true // Bool that starts loading indicator if customerInfo?.entitlements.all[Constants.entitlementID]?.isActive == true { paidCustomer = true //Mark user as paid attemptingRestorePurchase = false //stop loading indicator } else { if networkMonitor.isConnected { // Alert toggle - checks internet connection attemptingRestorePurchase = false // stop loading indicator restorePurchaseError.toggle() // Alert toggle - Restore not successful } else {
Hello, I have some issues with the app review.I have tested it using an android and iOS simulators and I can fetch the entitlements without any issue, I can see the description, price etc and the subscription works.However after installing the app through the TestFlight application, when I fetch the entitlements, I only see the price.Any idea why could this happen?Thanks
Revenuecat team: Thank you for providing such a good service.ConditionSDK: react-native-purchases@^4.5.2: version "4.5.3" Restore setting: Block RestoreSDK login timing: at App initializing and before purchaseRuns restorePurchase internally before makePurchase to check if product is already purchased by different Member. (Shows message to re-login by purchased member)UsecaseiPhone user (App ID = X)log in to app as Member: A=app_user_id. Then purchase Monthly subscription. User log out Member: A. User log in as Member: B. User Try to purchase Monthly subscription (internally runs restore for checking before purchase), “Receipt already in use” error occurs and prevent Member: B from purchasing. This behavior is as we expected. But after above, When User try to purchase again as Member: B( internally runs restore for checking before purchase), this time “Receipt already in use” does not occur goes through restorePurchase and "Product already purchased" occurs AND SDK's APP_USER_ID IS C
I have the following issue:My app requires being logged in, otherwise I don’t make use of the RevenueCat SDK, meaning that when I init() the Purchases I always provide the userID. When the user logs out, I also call the logOut() method in the SDK.If I make a purchase with account A, then log out, create a new account B and make a new purchase, on iOS at least I get a pop up saying the I am already subscribed and no matter if I press Manage or OK, the SDK will return that I have an active entitlement and make the account B premium.This is really bad, since with one account you could create multiple accounts that automatically will get the premium status.Am I doing something wrong? Is this just happening when I use the simulator with the StoreKit? I don’t want to have this behaviour in production.Thanks!
Hi, I’ve configured Free Trial offer on both Monthly and Yearly Plans in Google Play Store.The free trial (14 days) shows up in payment sheet incase of Yearly plans, but not incase of Monthly plans.The configuration is exactly the same in both monthly and yearly subscriptions and when I fetch the product info I get the following object - {…,freeTrialPeriod:”P2W”,...} in Logcat. Following the eligibility criteria - I fetch all entitlements and allPurchasedProductIdentifiers to make sure that user has not subscribed to the plan beforehand So, I’m not sure why its not reflecting in pay sheet only in case of monthly plans.Any help regarding this topic will be appreciated.
Goal: I’d set up a monthly/yearly subscription plan for App Store users, and now would like to increase the price for new users. However, I’d like to grandfather the old users’ price (i.e. their subscription prices ideally wouldn’t change).Setup: I originally created 2 new products in Apple/RevenueCat, created a new RevenueCat offering pointing to those products, and then made the new offering the default. Within my app, the new price is as expected! However, if a user goes to their payment settings, they can see ALL of the pricing. I have paying users across all 4 subscription products. Question: As I understand it, if I untick “Cleared for Sale” on the old products, old users’ subscriptions will stop. Is there a way to do this without disrupting the user? Thank you!
Want object structure and demo values for return object of Purchases.getOfferings(). It returns an object of “current” and “all” keys. And don’t return demo values with which we can test in debug mode.
Hi,I am able to buy some consumable (on iOS Sim & Device) using my Sandbox account. I see : [Purchases] - INFO: 😻💰 Purchased product - 'xxxxxx' 15:33:28 DEBUG Purchase succeeded. Optional({ "bundleId" : "xxx", "deviceVerification" : "w97BiaZOSrXxTrvrR6wTZuT44AL39rFO+V0gTIoE45eIjLCz6d4KmmemegmqFect", "deviceVerificationNonce" : "39520f62-1cba-4ef9-a348-6523a7baeb17", "inAppOwnershipType" : "PURCHASED", "originalPurchaseDate" : 1655494381866.502, "originalTransactionId" : "11", "productId" : "xxxxxx", "purchaseDate" : 1655494381866.502, "quantity" : 1, "signedDate" : 1655494381867.5581, "transactionId" : "11", "type" : "Consumable"}) But Dashboard is still empty & [5 - Make a test purchase] is still unchecked.I configured the sandbox endoint in the AppStore.So I am stuck.Do you have an idea?
Imagine that my app crashes just after a successful payment. I want to know purchase to finish when my app restarts.I don’t see in the docs how to do it using RevenueCat. I was using this code: SwiftyStoreKit.completeTransactions(atomically: true) { purchases in for purchase in purchases { switch purchase.transaction.transactionState { case .purchased, .restored: if purchase.needsFinishTransaction { // Deliver content from server, then: SwiftyStoreKit.finishTransaction(purchase.transaction) } // Unlock content case .failed, .purchasing, .deferred: break // do nothing } }} Thanks
We’ve got an issue where the PurchaserInfo is empty when using same appUserID but different device/platform. We’re using the Legacy (Alias) mode because we want the user to share the entitlements across multiple devices.This scenario is: Android (paying Subscriber) -> iOS (new device)Is what we’re trying to do possible? Is there a reason why the PurchaserInfo would be empty on the iOS device.We checked to see if RC is throwing any errors when restore purchases is pressed, which it isn’t. Obviously, we don’t expect Restore Purchases to actually restore a purchase, but we do expect it to send the entitlements for the appUserID. Is our understanding correct?
I am using the flutter SDK to integrate IAP to my app and i am using the non renewable subscription model. I want to get a unique transaction ID issued by apple to send to my server to store it if the user wants to refund his purchase in the future.
There is another question out there marked as solved (see below) however I believe there is a need to re-open this as per recent changes to Google policy. Google is now requiring apps to allow for cancelling a subscription from within an app. An email was sent to app developers about a policy change: We’re updating our Subscriptions policy to state that users must be able to easily cancel their subscriptions from within the app. You’ll have at least 30 days from the date of this notification to update your app to comply with the following policy changes.As this is not currently possible via RevenuCat it means that apps are in danger of being in violation of Google policies and banned from the Play Store. We urgently need a way to cancel a subscription so that it does not renew but without refunding for purchases already made.
Through the Google Play API you can revoke, refund, and cancel a subscription. Through the RevenueCat API you can revoke and refund, not cancel. Is there going to be added support for canceling a subscription?
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.