Get help with your SDK implementation.
Recently active
Why is clicking a subscription or IAP so slow on iOS. When I click on a subscription, it can take up to 20 seconds to even show the pop up modal to purchase the subscription. I am testing this on testflight and am wondering if there is a way to make this delay quick? The IAPs and subscription purchases eventually go through, just unacceptably slow. Is this due to Apples test flight servers being slow or something else? Will we see increased performance when we deploy a production build? For context, I am using `purchaseProduct` to buy both IAPs and subs.Thanks
This is the Crash Report I got from the Play Console: Typejava.lang.OutOfMemoryErrorException java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again at java.lang.Thread.nativeCreate at java.lang.Thread.start (Thread.java:976) at java.util.concurrent.ThreadPoolExecutor.addWorker (ThreadPoolExecutor.java:954) at java.util.concurrent.ThreadPoolExecutor.ensurePrestart (ThreadPoolExecutor.java:1610) at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute (ScheduledThreadPoolExecutor.java:351) at java.util.concurrent.ScheduledThreadPoolExecutor.schedule (ScheduledThreadPoolExecutor.java:569) at java.util.concurrent.ScheduledThreadPoolExecutor.submit (ScheduledThreadPoolExecutor.java:722) at java.util.concurrent.Executors$DelegatedExecutorService.submit (Executors.java:705) at com.revenuecat.purchases.common.Dispatcher.enqueue (Dispatcher.kt:69) at com.revenuecat.purchases.paywalls.events.PaywallEventsManager.enqueue (PaywallEventsManager.kt:89) at
Hello, Please after uploading the json key generated from googe console to revenue cat I get this errorIs there any way to fix this problem? thank you!
How can we show the subscription management sheet in-app for iOS using showManageSubscriptions? https://developer.apple.com/documentation/storekit/appstore/3803198-showmanagesubscriptions I know we can use the customer's management URL, but that opens the sheet in the app store instead of in-app. Thanks.
Hi,Within App Store Connect I changed the introductory offer from a 7 day trial to a reduced price for 6 months (pay per period). My changes are live. Within my app downloaded from the app store the price is shown correctly. In the simulator and TestFlight I still get the old trial shown within the “introPrice” object.I am using React Native. {"identifier": "$rc_monthly", "offeringIdentifier": "xxx", "packageType": "MONTHLY", "product": {"currencyCode": "EUR", "description": "xxx", "discounts": [], "identifier": "xxx_1m_xxx", "introPrice": {"cycles": 1, "period": "P3D", "periodNumberOfUnits": 3, "periodUnit": "DAY", "price": 0, "priceString": "0,00 €"}, "price": 19.990000000000002, "priceString": "19,99 €", "productCategory": "SUBSCRIPTION", "productType": "NON_CONSUMABLE", "subscriptionPeriod": "P1M", "title": "xxx"}} Is there anything I can do to get the updated introPrice? I already tried different phones, even a brand-new one.
I have noticed that for iOS, in the Offerings product, the Promotional Offer set up in App Store comes as a discounted price and for Android it comes as introductory price. I am using Flutter (Dart) and my code looks like the following: checkOffer(Offering offering) { if (Platform.isIOS){ if (offering.availablePackages[option-1].storeProduct.discounts == null) return false; return true; } else{ if (offering.availablePackages[option-1].storeProduct.introductoryPrice == null) return false; return true; }I only have one type of promotional/introductory setup, which is a 7 day trial. Anyways I will only talk about iOS here as Android works fine.So I used a totally new account with my released iOS app and tried to buy a subscription and I got charged immediately without the 7 Day Trial. What could I be doing wrong here please?
Hi, can you please provide me a full example of getting if Android user is eligible for trial in Flutter application. Your help will be highly appreciated.Thank you.
Hello!I’m integrating RevenueCat in a Unity app with several scenes.In the Scene 1 I have created a game object that includes the reference to the “Purchases” script. In this scene with have all the logic to manage subscriptions.This scene open another scenes where we don’t have a reference to “Purchases” script (it’s not needed).The usual user workflow is Scene 1 → Scene 2 → Scene 1 → Scene 2,…My questions is: Every time the first scene is loaded the “Purchases” script calls to Configure method but I have read that this is not a good approach. How are you guys doing this? Is it ok to call Configure method every time the user open the Scene 1? Thank you!
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
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.