Get help with your SDK implementation.
Recently active
I have set up app monetization on the Play Store, and here's what it currently looks like: There is a 'paid' option and free option. However, when I open the app on the Play Store in my closed testing environment, it appears to be set up for immediate payment through the Play Store. My intention is for the app to be installed first for free, and then during the installation and sign-up process, the integrated Revenue Cat functionality will handle the payment.Should I configure the app to be free on the Play Store. the first screenshot is from play store and second is from monetization setup in google dev console.? and i assume this is same for iOS aswell.also when i click make it free i see the below. if i proceed will this effect revenucat later for fetching offers etc.., ?
We seem to be getting a `Domain=RCPurchasesErrorDomain Code=23` error when trying to retrieve offerings on iOS 14. The full log is as follows:2021-12-03 10:22:16.648693+0200 Today[34769:534081] [Purchases] - ERROR: SKRequest failed: UNKNOWN_ERROR2021-12-03 10:22:16.649045+0200 Today[34769:491827] [Purchases] - ERROR: Error fetching offerings - Error Domain=RCPurchasesErrorDomain Code=23 "None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used).This could be due to a timeout, or a problem in your configuration.More information: https://rev.cat/why-are-offerings-empty" UserInfo={NSLocalizedDescription=None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used).This could be due to a timeout, or a problem in your configuration.More information: https://rev.cat/why-are-offerings-empty, readable
Hey, are there any examples how to implement footer Paywall in pure Kotlin without Jetpack Compose? I can’t find anything on the net :(
While in the process of setup.. Error enumerating unfinished transactions for first transaction listener: Error Domain=ASDErrorDomain Code=500 "(null)" UserInfo={NSUnderlyingError=0x28114e0d0 {Error Domain=AMSErrorDomain Code=301 "Invalid Status Code" UserInfo={NSLocalizedDescription=Invalid Status Code, AMSURL=https://mzstorekit-sb.itunes.apple.com/inApps/v1/history?REDACTED, AMSStatusCode=404, AMSServerPayload={ errorCode = 4040003; errorMessage = "App not found."; okButtonString = OK;}, NSLocalizedFailureReason=The response has an invalid status code}}, storefront-country-code=PRT, client-environment-type=Sandbox} After this error the following shows up: 🍎‼️ Error fetching offerings - Não foi possível concluir a operação. (RevenueCat.OfferingsManager.Error, erro 1.)There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). More in
I’m trying to implement RevenueCAtUI in ios, but i having this error‘Cannot infer contextual base in reference to member 'basedOnSize'This is my environment:-Mac Monterey 12.6-Xcode 14.1-Swift 5.7.1-RevenueCAT 4.26.0 Any Help, advise is welcome, thank you team.
I wanted to pick up on this older closed ticket if that is ok.I am also running into this issue, and my offering is made of multiple packages/products like in the rc example / documentation here. I am looking for custom metadata at the product or package to be able to put the “1 MONTH” and “1 YEAR” text somewhere. Even the “SAVE 38%” should be in custom data no?Just trying to replicate the rc example here below dynamically and flexibly.What is the currently suggested way to do this?
I’m looking at this chart, but why is there no option to forced an alias create in the Non-Anonymous App User ID. We’re migrating all our user IDs to a new system (new login, new backend), so we will have to force a restore purchase for all of them for them otherwise their subscription isn’t recognized. The problem is we have a few thousand stripe users, so a restore purchase doesn’t work for them. This will create a support nightmare for us when suddenly thousands of users can’t access their subscription. Why can’t I force create an alias for them to their new user IDs? Also - under what scenario does the user go from Non-Anonymous to Anonymous without calling logOut() ? Because in our upgrade flow: old app version passed userID to the SDK on int, in new version of app, we will still pass that old userID and then call logIn() once they have signed up with new backend. Can I still manually call the `createAlias` method even though it is deprecated?
Hi guys,I complete setup for product and introductory offers for it on AppStore connect. Now I check eligibility for new user (by checkTrialOrIntroductoryPriceEligibility), and completion block return dictionary with eligibility statuses and associated products. My problem is that status for all products is “Not eligible for trial or introductory price.” Why SDK return wrong status?
I think I’m doing something silly, but I cannot seem to get RevenueCat to show the correct eligibility for a subscription intro offer. If I bring up the RevenueCat Debug UI’s paywall, it shows the intro text properly mentioning you get 3 days in your trial. If I check with StoreKit 2, I get “true” for isEligibleForIntroOffer, as expected In RevenueCat, I get “unknown” for eligibilityHere’s my StoreKit 2 code that works: let storeKitProducts = try! await Product.products(for: ["myproductid"])let isEligibleForIntroOfferStoreKit = await storeKitProducts.first?.subscription?.isEligibleForIntroOffer// Returns true Here’s my RevenueCat code that seemingly doesn’t: if let monthlyProduct { let eligibility = await Purchases.shared.checkTrialOrIntroDiscountEligibility(product: monthlyProduct) let isFreeTrialAvailable = eligibility == .eligible print(isFreeTrialAvailable, eligibility) Logger.log("Checked if free trial was available and determined \(isFreeTrialAvailable)") // Retur
Hi. I created a new iOS project on AppStore Connect 2-3 weeks ago.I was almost finished with my app, but I realized a bug. I’m using the Flutter platform to develop my new app.The checkTrialOrIntroductoryPriceEligibility method returns introEligibilityStatusUnknown when I added an Introductory offer to my subscription.(If I have not added an Introductory Offer to my subscription, in this case the checkTrialOrIntroductoryPriceEligibility returns introEligibilityStatusNoIntroOfferExists. So it is working correctly in this case.)The checkTrialOrIntroductoryPriceEligibility method and code has worked in my previous projects.Has anything changed on the iOS side? Or is it a bug on the Revenuecat side?Revenucat package (Flutter): purchases_flutter: ^4.11.1I tested it on Testflight version, and debug mode also. Thanks for your help.
Hey everyone, I did use PricePerMonth method but it provides just the value without the currency code and was wondering if there is any straightforward approach within the SDK that I have probably missed?
In a test react native application on Android, I have made a purchase and am able to see that inside the customerInfo() response. The managementURL open the Subscription Play Store page where I can see it. Now I waited for it to expire and confirmed that it has indeed expired (got the Firebase extension to deliver the EXPIRATION and CANCELLATION same time). When calling customerInfo() a few minutes after this, it still shows active entitlements. Now the same managementURL point to an empty page in Play Store so it creates user confusion.Any idea how long or why the sync between EXPIRATION and customerInfo() exists?
Hi! We noticed a somewhat rare crash that we’ve only recently been able to reproduce. This affects all iOS SDK version up to 4.17.5 (the latest at the time of writing). Basically we get a hard crash on[[RCPurchases sharedPurchases] purchasePackage...];The call stack simply points to libobjc.A.dylib at objc_msgSend within our method that calls purchasePackage.We haven’t noticed this crash with the restorePurchasesWithCompletion call. The crash doesn’t happen with getOfferingsWithCompletion either. We were finally able to reproduce this crash in the past few days with our TestFlight builds (and ONLY with TestFlight builds). We are calling all 3 methods from a thread that is not the main thread. Since only purchasePackage crashes (and on Android there are no crashes at all on any of the methods when not called from the UI thread), we never considered this to be an issue. However, then we queued the call the the main thread in iOS like this:dispatch_async(dispatch_get_main_queue(), ^(void)
Link to original RC doc: https://www.revenuecat.com/docs/configuring-sdkFor the React Native Setup, it mentions the api keys (for Apple and Android).Code in the documentation:if (Platform.OS === 'ios') { Purchases.configure({apiKey: <public_ios_sdk_key>});} else if (Platform.OS === 'android') { Purchases.configure({apiKey: <public_google_sdk_key>});} What are these sdk keys exactly? Is it the App Connect Key or the Issuer Id? I searched the documentation and could not find more info.
Hello, On Android, using react-native, after upgrading the “react-native-purchases” lib from "5.13.1" to "6.7.0", I am having this error when a purchase action of an offering is triggered: “RNPurchases.purchaser got 7 arguments, expected 6”. I tried upgrading react native to latest version, but still got the error.Any clues on what that could be, or some steps on how to debug this error, please? Thanks a lot!
Hi Revenuecat team, I am new flutter developer and use firestore as my server, my question is for my flutter app I want to check user’s subscription status, so I can get it viaCustomerInfo customerInfo = await Purchases.getCustomerInfo();Should I then pass this valuecustomerInfo.entitlements.all[entitlementID]?.isActivedirectly to my cloud function to calculate different methods based on user’s subscription status, or I need to move revenuecat code part in cloud function, in case someone can hack my code and always pass TRUE value to my cloud function? Thanks!
Sorry for creating a duplicate of this, but it seems like the conversation stopped and maybe less details.I wanted to open back up the conversation to get an idea how to clearly show a price per month to the user in their local currency format. I know the SDK gives me the product with a formatted price, and I also see a raw value as well. Taking that value to divide by the right number based on subscription length is what I want to build. It means that we need a map of packageType vs integers. Where to get a list of all possible strings. I created one one month and six month packages and see the values (MONTHLY and SIX_MONTH), what are all the possible values?I see also a currency code like “USD” that maybe can use to derive a dollar sign. But how to do this for all possible scenarios/countries?Is there maybe a better way to implement this inside the SDK?thanks
Hi all,I'm building a macOS app with some renewable subscriptions.Everything is working fine when testing within Xcode on my mac, but now I have uploaded my macOS app to TestFlight, I see that the offerings are not working.If I inspect my network traffic with Proxyman, I do see that the app is trying to get the data, but the response is empty (or it says "invalid json").Any idea what might causing this?Kind regards,Frederik
I understand that the CustomerInfo data is cached for 5 minutes, and is cleared when an actual In App Purchase is made, so the user gains access to any new entitlements immediately, however I’d like to know if there’s a way to explicitly clear this cache when working with Stripe checkouts. Here’s my scenario:User is makes a purchase via Stripe for a product that is registered in RevenueCat. RevenueCat is informed of that purchase from my server using your Receipts API, and the users’ Customer ID is passed in. In the app, I call `Purchases.getCustomerInfo`, however because of the cached nature of this call, the user typically gets no new results. ← This behavior is jarring to the user, and I’m hoping there’s a way I can improve it I have verified that after the cache expires (on average, 2.5 minutes), that call successfully loads the new data asynchronously, so I am confident that this is due to the caching I understand the need for the caching, and how it can impact your servers - I’m
I am struggling to find documentation regarding how to best display what the user has purchased. I was hoping that the active entitlement has all the information but it is not for user display. There is an identifier, productIdentifier, and productPlanIdentifier. How do I take these and display user friendly information regarding the purchase. My requirement is to build a simple Subscriptions screen in the app that would resemble what the native OS shows. I would like to show what product was purchased at what price back then.The main goal here is to show as of the time of purchase. Meaning I might already change my offerings in the future but this should not affect the users who made purchases from previous offerings. I would like to make sure the information still shows even if the product, offer, or entitlement is not active anymore.What is the best way to do this?
I’m upgrading an old project (Ionic with Capacitor 5) from cordova-plugin-purchases 2.3.2 to the latest 3.13.0. I’m calling configureWith using a valid API key and user id, and 10 seconds later, I call getOfferings() and get a fatal error in xcode:PurchasesHybridCommon/CommonFunctionality.swift:21: Fatal error: Purchases has not been configured. Please configure the SDK before calling this methodUPDATE: I should have read the configureWith docs more carefully - I was calling it in the same style as Purchases.configure(apiKey, appUserId). Changing it Purchases.configureWith({apiKey, appUserId}) solves the problem! Leaving this here in case anyone else makes the same mistake. 🤦🙂
WARN: 🍎‼️ Unable to load receipt, ensure you are logged in to a valid Apple account.Error: Error Domain=NSCocoaErrorDomain Code=260 "The file “sandboxReceipt” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/private/var/mobile/Containers/Data/Application/F54CAA91-D67A-404A-9ED*-1D3180B2F577/StoreKit/sandboxReceipt, NSUnderlyingError=0x282eb8de0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}} Anyone able to to help me with this error please?
Is there a simple way to mock RevenueCat to return hardcoded responses for unit testing purposes? One option is to use the StoreKit Testing framework, but then RC still makes an outbound server call for every request which goes deeper than I'd like to for unit testing purposes.
After an apple subscription has expired, the iOS user can go to subscriptions and resubscribe there in the OS without going into the application directly. This usually takes a few seconds to complete, since immediately after resubscribe when going into the application the customerInfo() still does not show any active entitlement until after about ~30s.During those 30s the application will show a subscribe screen. What happens if the user tries to make another purchase in the app during those 30s (either same product or a different one)? Will they get double charged and how would the developer know?I am not sure if this is the same situation on Android yet.
Hello, I am getting the following crash regarding purchases I have upgraded to Google BillingClient 6.0.1 and 'com.revenuecat.purchases:purchases:7.0.0' Any advice
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.