Get help with your SDK implementation.
Recently active
Got an issue during build of application after installing of SDK via SPM in Xcode 15.0 (MacOS 14.0)Compile issue in RevenueCatUI → ViewExtensionsAny suggestions on how to fix or workaround would be helpful!Thanks! Update: so the workaround is not include RevenueCatUI package in dependencies (only RevenueCat package out of 4 that suggested )
I have set up Products, Packages, and an Offering in RC and can see it in my app (using Expo + react-native-purchases SDK). When I complete a sandbox purchase it is neither appearing in the Purchases.getCustomerInfo() response nor the RC admin console.I also have ensured that I set the user ID with Purchases.logIn().(I did not set up a sandbox user in App Store Connect but I presume that using my actual Apple account for sandbox transactions is okay.)What am I doing wrong?Sandbox purchase was successfulShould sandbox transactions appear here?
Hi, I’m using async await and would like to cancel a network request when the app goes background. However, it seems that when calling `cancel()` on the Task for Purchases.shared.customerInfo for example, the network call doesn’t actually get cancelled. Is this by design?
Hi, I am trying to view the offerings for our product. We are running on the xcode simulator via the xcode command. I have configured a storekit file and have confirmed I am using it in xcode. I uploaded the certification to revenuecat as well. I also confirmed that the products in xcode match those in revenuecat. I waited >24 hours as well for any servers to sync, yet I still get that offerings are not available. I’ve looked everywhere in the forums to figure out what I am doing wrong but am unable. Is there anything else I can do? We are looking forward to hopefully integrating this platform in our product.
Hi there, i’m trying to use new RevenueCat Paywalls. Can i present my custom paywall using revenuecat paywall without using revenuecat template paywalls?
I'm implementing a new version of my paywalls using the new (beta) feature of RevenueCat Paywalls. I'm using the paywall with the footer modifier and I do not understand why is this bottom line even exist. It displays the same text as the package subtitle and there is no way to remove it. In the web preview, this text is not shown. Is this a bug or is this a strange behaviour that I'm not getting it? Thanks for your time, this new feature is awesome!
Hello.My env:"react-native": "0.68.2","react-native-purchases": "^6.6.5", I get offering by using Purchases.getOfferings().Btw are there any way to get entitlement together according to the product?
Hello!Could anyone please explain to me how does restoring purchases for anonymous user IDs work? I’m usingfor await customerInfo in Purchases.shared.customerInfoStream { let hasNoActiveEntitlements = customerInfo.entitlements.active.isEmpty Superwall.shared.subscriptionStatus = hasNoActiveEntitlements ? .inactive : .active}to sync subscription status between RevenueCat and Superwall, but it works inconsistently, sometimes it never gets inside the for loop and sometimes it works without issues. Maybe I don’t get the idea and this code needs to be called after the app is in some specific state?
I have created a consumable product and it works so far. Now when the user wants to purchase the same consumable product again, it gives it to them wether they paid again or not because their entitlement exists? How do I fix this? here is the code I have: if let package = self.offering?.availablePackages[packageNumber] { Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in print("user cancelled: transaction", userCancelled) if customerInfo?.entitlements["gems (consumable)"]?.isActive == true { // Unlock that great "pro" content } else { print("Error for payment", error) } } }
I am buying a subscription on a device connected to my computer. The expirationDateMillis returned by the SDK is wrong. It is the same date the subscription was done. According to the docs, shouldn't this be the date, when the subscription expires?Looking at this"originalPurchaseDate": "2023-05-08T13:11:37Z","expirationDate": "2023-09-13T07:00:58Z" this is wrong. TheoriginalPurchaseDate should be Sep 13 2023 (when I subscribed) and theexpirationDate should be a month ahead in the future (thus Oct 13 2023). Additionally, originalAppUserId is "$RCAnonymousID:5933b0b7733a400fbc2f60b38733a23f" eventhough I do a await Purchases.logIn(userId);. I expect that to be my Apps user id?!try { await Purchases.logIn(userId); const {customerInfo} = await Purchases.purchasePackage(pckage); const activeEntitlementInfo = customerInfo.entitlements.active[ REVENUE_CAT_SUBSCRIPTIONS_ENTITLEMENT_IDENTIFIER ]; if (typeof activeEntitlementInfo !== 'undefined') { const {expirationDateMillis
I have following scenario in my app: Each file creation should be an in-app purchase. I have an entitlement “create a new file” User buys this entitlements User creates a new file After that I want to take this entitlement back from the user so that next time they will need to purchase “new file” againIs that possible or I have a wrong understanding of how it works? Thanks!
Hello. I want functionality in my iOS widgets to only be available for subscribers and it’s not clear at all to me how to accomplish that.This page describes how to “enable data sharing between the main app and extensions”. So I’m assuming, but am not 100% sure, that means that Purchases.configure would be called by both the main and the widgets. And since they share a UserDefaults area they’ll know the same things. The SwiftUI Magic Weather app doesn’t seem to have widgets so I have nothing to go on. If this is correct where do I call Purchases.configure from the extension? The @main struct for WidgetBundle doesn’t seem to use a .init like a standard struct for a SwiftUI View. Maybe in an .onAppear attached to the WidgetEntryView? I also have another question. In the scenario where the subscription expired BUT it auto-renewed would calling Purchases.shared.customerInfo() be sufficient for checking entitlements or is it a requirement to call Purchases.shared.getCustomerInfo instead?
I’m currently using v5.6.6 and want to use 6.x with absolutely minimal changes.Is it possible to simply upgrade to 6.x or are code changes and even changes in Google Play subscription setup needed?I’ve read the guide here https://www.revenuecat.com/docs/android-native-5x-to-6x-migration but still I’m not sure if I can simply use the newer SDK if I’m fine not using the new capabilities.
Hello,Testflight subscription window takes around 10 seconds to pop-up on all devices; we also tried it on high performance phones such as iphone 12,13,X.Is this a chronical issue? We read some entries who share the same problem but could not yet find the solution. We will appreciate having your earliest reply.Thanks in advance.
Context: Playstore & Flutter.I have created 3 base plans (monthly, half-yearly, annually) in a subscription in Playstore.The monthly base plan is marked as “Backwards compatible” and the others not marked.In my app, only the monthly plan is showing up. I’m using internal testing to test the app and base plan created 3 days ago.How to show both plans?
Hi, Im trying to test staging and production apps separately on iOS. To do this, I created separate targets with separate bundle ids. I then followed the guidelines here:Since I only need to test locally on device and on the simulator, I created a StoreKit configuration test file and downloaded the cert. I then created a separate project in RC with the staging app bundle ID (I already had one with my production app), the app secret from AppStoreConnect, the Storekit cert, and the products setup to match the Storekit configuration file.I’ve double checked to ensure that in the bundleID matches the bundleID in XCode. I’ve also checked to ensure that the products setup match the products in the StoreKit config file. But, when I try to complete a purchase in my staging app, I get the following errorERROR: 💰 Product purchase for '(product' failed with error: Error Domain=RevenueCat.ErrorCode Code=8 "The receipt is not valid."If I click the button a second time it tells me I have already ma
In swift when I sign out and then try to purchase a subscription again it fails with a generic store error. Yet in the underlying error there is more data: Error: Optional(STORE_PROBLEM)Message: There was a problem with the App Store.Underlying Error: Error Domain=SKErrorDomain Code=0 "An unknown error occurred" UserInfo={NSLocalizedDescription=An unknown error occurred, NSUnderlyingError=0x2833c8ea0 {Error Domain=ASDServerErrorDomain Code=3532 "You’re currently subscribed to this." UserInfo={NSLocalizedDescription=You’re currently subscribed to this.}}} Purchases.ErrorCode is of no use and I couldn’t figure out the magic incantation to get to the useful bit. Any ideas? thanks
I can see in docs how to make Purchases with Kotlin like this:Purchases.sharedInstance.purchaseWith( PurchaseParams.Builder(this, aPackage).build(), onError = { error, userCancelled -> /* No purchase */ }, onSuccess = { storeTransaction, customerInfo -> if (customerInfo.entitlements["my_entitlement_identifier"]?.isActive == true) { // Unlock that great "pro" content } })But how can I can the attribute of (aPackage) on line.2? Please answer with code if possible.N.B: I have a 1 monthly subscription and I need to make when click on a button it directly opens Google default Paywall to make the purchase. So any other way to achieve this threw RevenueCat is appreciated.
Hi,I’ve just added RevenueCat and am trying to do some local testing with storekit. I’ve:Linked all the App secret and server to server notifications Created a storekit file synced with app store connect Added all storekit and other certificates in revenuecat Run the app connected to storekitWhen the app runs, I can call getOfferings and getCustomerInfo, and purchase the offering. When I purchase the offering, the transaction shows up in XCode, and my app gets a notification that customerInfo was updated, and I have the active entitlement.My issue is that I can’t seem to test anything past that. If I refund the purchase in Xcode, or delete the transactions, they are removed from Xcode but getCustomerInfo is never updated. RevenueCat keeps telling me the user is subscribed, even though they are NOT subscribed anymore. In fact, I can call purchase again and purchase the app, even though I was already entitled. There is some issue where RevenueCat does not realize that the subscription wa
a user deletes the app and data off their device. They previously purchased some non-consumable items. The reinstall. I run syncPurchases one time in the app delegate. I get this error ERROR: 🍎‼️ The receipt is missing.I expected it to return the non-consumable entitlements in the customerinfo. Any idea what I am doing wrong?
I am using custom promo codes for users of my app. My server checks if the code a user has entered is valid and if so, it sends a request to revenuecat, as stated in the documentation: const options = { method: 'POST', headers: {accept: 'application/json', 'content-type': 'application/json'}};fetch('https://api.revenuecat.com/v1/subscribers/app_user_id/entitlements/entitlement_identifier/promotional', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));My code is waiting for a “Subscriber” response, to check, if the promotional entitlement was successful. This all works fine, however it often takes around 60 seconds until I receive a response, varying between 10 and 60 seconds. Am I doing something wrong in my code, or is this behaviour expected? Thanks so much already in advance!
Hi guys,I'm configuring all products for my app. I have all of them imported from google play and my entitlements configured.In the docs you say that offerings are optional, but that's not true, because the sdk can't get product data without offerings and packages. I'm using unity sdk.What's the point of this? If I already have the products, I should be able to get all the data of each specific product, even if I don't have any offering.But right now, for me to get the products data and display them on muy app, I have to create an offering and a package for each product. And to be honest that's horrible, because I'm just duplicating products into packages for no reason at all, and also because the UI to attach products to packages it's very very bad, specially if you have lot's of products.So, is there in the roadmap and update to fix this?If not, at least update your documentation that you HAVE to have products, offerings and packages for revenuecat to work at it should.Thanks!
In this scenario, users have subscribed to a service using the same Gmail or Apple email on their mobile devices but have logged in with different email addresses and passwords on each device. The objective is to restrict access to the subscription service to only one user at any given time, while preventing others from using the same Gmail or Apple email on multiple devices. To address this, implementing robust user authentication mechanisms, allowing only one active session per user, implementing session timeouts, providing user notifications, offering account management options, and communicating a clear subscription policy are key strategies to ensure that only one user can utilize the subscription at any given time.
First I want to thank you for the great platform! What happens if an anonymous user purchases on device A, then restores (still as an anonymous user, but presumably with a different anonymous user ID) on device B? The docs say, that if my app “Does not have any login mechanism and only relies on RevenueCat anonymous App User IDs.”, I should choose “transfer purchases”.I want to make sure, that in the case described above, the user has access to the purchase on their Devices A and B (both logged in with the same App Store User that performed the original purchase on device A).So will device A lost access to subscription? Or both devices will have access to the subscription?if so, does this mean that one person can buy a subscription with one account and distribute it?What happens if an anonymous user purchases on device A, then restores (still as an anonymous user, but presumably with a different anonymous user ID) on device B and then restores to device A again?Thank you
In Android, a method called "showInAppMessages" was added from PBL4.https://developer.android.com/google/play/billing/subscriptions#in-app-messagingThis feature allows users to receive notifications once a day during a grace or account suspension period and request payment method corrections within the app.This feature allows developers to restore a certain percentage of users who unintentionally cancel their subscription back to purchasing status.Is there no method in the RevenueCat SDK that calls an equivalent of this method?Or is it possible to use this method while coexisting with the SDK by implementing and calling it natively?
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.