Discussion and help from anything related to RevenueCat.
Recently active
Hi, how can i get subsciber attributes using APIThanks for help.
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) } } }
From webhook docs: With webhooks integrated, you can:Remind subscribers of the benefits of your app when they decide to unsubscribe, or let them know when there are billing issues And… that’s it. No more bullet points. Is that really all RC webhooks are for? Feels like someone accidentally trimmed the list of use cases. I’m looking to change my users documents in my database after certain events: subscription, cancellation, etc. Am I looking in the right place? PS: Now, I’m pretty sure I’m looking in the right place, but hopefully the team can take this feedback to improve that particular section of the docs.
The Google Play Services credentials documentation from Revenue Cat walks through a step (1) in the API Access page of the Google Play Console. However, that page no longer exists: Can step 1 be ignored now? PS: Google Play docs definitely need to be updated.
Good afternoonWe would like to understand better what you consider “Unsubscribe Detected At” in the documentation here: https://www.revenuecat.com/docs/customer-info If a user turn-off auto-renew, does that property gets enable with the date when the user turned it off? Thank you
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
After I implement RevenueCat with Swift Package Manager, everything works fine till user verification process. I create a checkStatus function: class SettingsController: UIViewController {static var subscriptionStatus = false Purchases.shared.getCustomerInfo {(customerInfo, error) in if let error = error { print("Get Customer Status Error: \(error.localizedDescription)") } else { if customerInfo?.entitlements[RevenueCatAPI.entitlementID]?.isActive == true { DispatchQueue.main.async { SettingsController.subscriptionStatus = true print(SettingsController.subscriptionStatus) } } else { DispatchQueue.main.async { SettingsController.subscriptionStatus = false print(SettingsController.subscriptionStatus) } } } }I need to reach t
I am getting the following warning in my application. I don't want to have any surprises when these dates arrive.https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html Start your migration to the monetization.subscriptions APIsIf you use the Google Play Developer API client libraries - available for Java, Python, and other popular languages - we recommend upgrading to the latest versions, which already include the monetization.subscriptions APIs. Base plans can be managed with the monetization.subscription.basePlans API, and introductory pricing and free trials can be managed as offers with the monetization.subscriptions.basePlans.offers API.I'm using purchases_flutter version: ^5.2.3.Should I be concerned?I await guidance.You're using the InAppProduct API to manage subscriptions, which is now deprecated and will stop being supported for new apps in January 2024, and for all apps in May 2024. Start using the new Subscriptions API to get ne
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?
Hello! New RC user here. 👋Regarding the practice of offering a default “standard” price on a paywall during onboarding only, and then offering a discount price when the paywall is triggered elsewhere within the app: 1st question: Obviously I can use the “current” offering for the onboarding process. However, after that I will need to hard-code the “discount offering” title into the app, correct? 2nd question: If I want to remotely remove the “discount offering” at a later time (and show default only), is it safe to delete the offering in the RC dashboard and just code my app to show the “current” offering on default?I would appreciate any thoughts or suggestions on this strategy. Thanks! Note: on iOS, using separate Subscription Groups for each product.
When creating multiple offerings (ie. for sales or A/B testing), I understand it’s recommended that iOS devs use separate subscription groups so that users only see one offering in iOS subscription management page. HOWEVER...Question: What happens when a current user reinstalls on a new device and hits “Purchase” instead of “Restore Purchases”? With the separate subscription groups approach, there is the chance they will be double-charged if get the “B offering” when they originally purchased the “A offering”, correct? 😬Comments? Suggestions? Thx.
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.
From what I saw on the document [https://www.revenuecat.com/docs/event-types-and-fields], can I confirm RENEWAL is the event that will be called monthly for a monthly subscription plan?
Hi,I’m wondering about MTR for Stripe purchases.We have some products in Stripe that we do not want to be recognised in RevenueCat as revenue. From my understanding the RevenueCat server notifications are not required:RevenueCat does not require server notifications from Stripe, however doing so can speed up webhook and integration delivery times and reduce lag time for Charts. And therefore is MTR for Stripe purchases based on the receipts created via the POST /receipts API operation?Thanks.
Adding RevenueCat to a new project that built okay without RevenueCat. I’ve tried the project IOS 17 & 16 with RevenueCat. Now get this type of error during linking:duplicate symbol '_OBJC_METACLASS_$_RCSubscriptionPeriod' in: /Users/username/Library/Developer/Xcode/DerivedData/project-gqirresgntulppesvshjgagnzupy/Build/Products/Debug-iphoneos/RevenueCat.o /Users/username/Library/Developer/Xcode/DerivedData/project-gqirresgntulppesvshjgagnzupy/Build/Products/Debug-iphoneos/RevenueCat_CustomEntitlementComputation.oduplicate symbol '_OBJC_CLASS_$_RCCustomerInfo' in: /Users/username/Library/Developer/Xcode/DerivedData/project-gqirresgntulppesvshjgagnzupy/Build/Products/Debug-iphoneos/RevenueCat.o /Users/username/Library/Developer/Xcode/DerivedData/project-gqirresgntulppesvshjgagnzupy/Build/Products/Debug-iphoneos/RevenueCat_CustomEntitlementComputation.oduplicate symbol '_OBJC_CLASS_$_RCPromotionalOfferEligibility' in: /Users/username/Library/Developer/Xcode/DerivedData
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?
Im using app subscriptions for long time but it is my first time I’m trying to test the IAP on a virtual device. Testing the android version on a virtual Pixel 7 pro (api 33) and Pixel 7 (api 34), the flow is working normally as expected until I get “ Something went wrong”, “Error code 3” however using the same testing account, the same code is working fine on a physical device. Im using flutter on a macbook device. I’m sure the Play store is updated on virtual devices.
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
hi, i was trying to set up a consumable products based on Non-Subscription Purchases doc recommendations from revenue cat https://docs.revenuecat.com/docs/non-subscriptions.but after calling purchaseProduct for a consumable product i can't seem to purchase this product again because it was bought as a non-consumable the flutter in_app_purchase package has two methods to buy product (buyConsumables or buyNonConsumables) does revenue cat have similar way or other to make sure a product can be bought again
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
I already searched my issue on this platform, but i still havent solved it yet.why does this mistake occure? Error fetching offerings - PurchasesError(code=ConfigurationError, underlyingErrorMessage=There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store.is it because of that? Credentials need attention Could not validate subscriptions API permissions Permissions to call inappproducts API Permissions to call monetization API
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.