Get help with your SDK implementation.
Recently active
I want to activate and deactivate an IAP for lifetime in Google Play Console (and NOT in RevenueCat) because I want to not to show up in any Google Play page.In order to detect in my app if that IAP is active or not - is there a flag that tells me “active/inactive”?I tried to find it in the Android SDK doc but couldn’t find anything.
I have set up the storekit configuration file as per your guide but when using it with the duplicate scheme the offerings fail to load:Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 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 information: https://rev.cat/why-are-offerings-emptyHowever id I use the original scheme in xcode the offerings load fine, which suggests there’s a problem with the storekit config file, but I don’t know what. The product ID seems to be correct and it’s target membership is set to Runner. Also if I edit the Runner copy scheme to remove the storekit config file it also manages to load the offerings. There’s so little to set up with the storekit config file I don’t know what could be wrong. Of course I also downloaded the certificate and uploade
Hello,I tried to test current MagicWeather and purchase_tester Flutter examples with iPhone 15, purchases_flutter: ^6.3.0I configured everything correctly; “paywall” shows in-app subscription, I click to buy, it opens native iOS screen where I input Email and Password and confirm purchase, then it goes back to “paywall”. It is in a loop. I tried to debug. After making purchase, it goes back to “paywall”; when I close “paywall”, I receive this output in debug console of XCode: metrics = { actionUrl = "sandbox.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy"; dialogId = "MZCommerceInAppBuy.ConfirmationNeededForBuyRecurringItem.CPS.Auth"; eventType = dialog; message = "Sign in with Apple ID"; mtEventTime = "2023-11-18 16:08:20 Etc/GMT"; mtTopic = "xp_its_main"; osloTitleType = text; osloTitleValue = "AbstractSalableInfoModule.SandboxTitle"; topic = "xp_its_main"; }; pings = ( "https://xp.apple.com/report
Looking at this guide and it makes sense but for data deletion I am still trying to understand what information RC is collecting that I am not providing via the SDK. I do not set any attributes or anything extra. Just the app user id which is a guid. Does anything still need to be deleted from RC when user deletes /requests delete their account?Also how does this work if user still has active subscription but delete is request and the delete would be made via the RC API?
This is the Crash Report I got from the Play Console: Typejava.lang.NullPointerExceptionException java.lang.NullPointerException: at com.revenuecat.purchases.PurchaseParams$Builder.<init> (PurchaseParams.kt) at com.xxxxxxxxxxxx.MainActivity.purchase (MainActivity.java:2103) at com.xxxxxxxxxxxx.MainActivity.lambda$showPaywall$33 (MainActivity.java:2014) at android.view.View.performClick (View.java:7792) at android.widget.TextView.performClick (TextView.java:16112) at android.view.View.performClickInternal (View.java:7769) at android.view.View.access$3800 (View.java:910) at android.view.View$PerformClick.run (View.java:30218) at android.os.Handler.handleCallback (Handler.java:938) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loopOnce (Looper.java:226) at android.os.Looper.loop (Looper.java:313) at android.app.ActivityThread.main (ActivityThread.java:8751) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodA
I am currently facing an issue with tracking subscription purchases in my iOS application using Revenucat. While I can successfully track in-app purchases, subscription purchases seem to elude the tracking mechanism. I have meticulously reviewed the relevant code and event tracking settings, but the issue persists.Has anyone encountered a similar problem before or can offer suggestions on how to correctly configure subscription purchase tracking? I would greatly appreciate any insights or assistance.
the below method has two handlers for the purchasepublic func presentPaywallIfNeeded( fonts: PaywallFontProvider = DefaultPaywallFontProvider(), shouldDisplay: @escaping @Sendable (CustomerInfo) -> Bool, purchaseCompleted: PurchaseOrRestoreCompletedHandler? = nil, restoreCompleted: PurchaseOrRestoreCompletedHandler? = nil)How can our application detect when the purchase is completed or restored when using a custom paywall?
I’m using the following code to set originalPurchaseDate: Purchases.shared.getCustomerInfo { info, error in if let error = error { print(error) return } if let date = info?.originalPurchaseDate { UserDefaults.standard.originalPurchaseDate = date } }However I noticed `info?.originalPurchaseDate` is nil (either the info or originalPurchaseDate) in production. (I extracted UserDefaults on my JB device, the app is installed from the AppStore and I can see the StoreKit/receipt is present as expected)In the debug build the info (CustomerInfo) is not nil, but as expected the `originalPurchaseDate` is not available.What could be the problem?I want to use this code in my second app which I’m moving from the paid-upfront to freemium, but it seems I might not be able to use it.Thank you.
I like the documentation how to display products, but is there a similar one of how to display active subscriptions?Once user makes a purchase, I would like to display information about this purchase in a Membership management screen. Currently I am relying on getCustomerInfo().entitlements.active, but that does not describe the products well. I would like to show the display title and description of the product(s) that was purchased at that point in time even if it is not offered anymore.Is there a way to get full information of the purchase like that is more than identifiers? PS: FIWI in react-native I tried calling getProducts(customerInfo.allPurchasedProductIdentifiers)but that errors out:Error: Unknown error. at Object.promiseMethodWrapper [as getProductInfo]
Hi!I’m trying to use RevenueCat as Observer to analyze and confirm the purchases in my mobile game… Unity IAP handling the process and I need the RevenueCat to read trustable data via being Observer…The documentation feels unclear to me so I’m here to ask my questions via these post:Do I need to add my store products (consumables and non-consumables) to RevenueCat dashboard as well while using it as Observer? Is there a function to call RevenueCat to collect the data of purchasing? When Unity IAP completes a purchase process, will RevenueCat handle the data automatically?Please don’t mind me if these questions are so cheesy but I had to ask to learn.Thanks!
I know this question has been asked sometimes, but I could not find definitive answers. I have three apps on the App Store, having auto-renewable subscriptions. I would like to create a subscription bundle, where user can purchase the subscription bundle from any of the three apps. Obviously, the user should get access to all three apps once the purchase is successful. Here is the link from Apple, describing what I’d like to do: https://developer.apple.com/documentation/storekit/in-app_purchase/original_api_for_in-app_purchase/subscriptions_and_offers/offering_a_subscription_across_multiple_appsIs there a way to implement this “easily” in RevenueCat? I once read that I would need to have my apps in one single RC project. At the moment, the three apps belong to three different projects. If this is the way to go, could someone give more details on this implementation (I cannot find it in the docs):If the apps are in the same project, will the user get assigned the same userID across the
Hi,I just wanted to let you know there is a typo in your documentation regarding the dependency for Debug UI on Android. Instead of:debugImplementation "com.revenuecat.purchase:purchases-debugview:6.9.2"releaseImplementation "com.revenuecat.purchase:purchases-debugview-noop:6.9.2"It should be debugImplementation "com.revenuecat.purchases:purchases-debug-view:6.9.2"releaseImplementation "com.revenuecat.purchases:purchases-debug-view-noop:6.9.2" Note the “s” at the end of “com.revenuecat.purchases” and “debug-view” instead of “debugview”.
Hello, I'm using RevenueCat on Flutter (purchases_flutter). Yesterday Google sent me a mail that the previous PBL version 4 will be deprecated so upgrade to PBL version 5.My using purchases_flutter version is 4.2.2. So I have to change version to 5.7.0.But there is no new version of purchases_flutter documentation.final purchaseInfo = await Purchases.purchaseProduct(REMOVE_ADS_ID);Previous I used this code. But now how I can fix it?
Hi!I have 2 paywalls configured - one with subscriptions and one with consumables. Is it possible to select which paywall to present using RevenueCatUI? Or the "default" one will always be presented?I would like to use them both (not in an experiment) - in different parts of the app. Thanks!
Hi,I’ve followed the tutorial to properly setup RevenueCat on Android via Google Play but I can’t figure out how to make it work when there are multiple packageNames from the mix of buildTypes & variants. For instance, I have two buildTypes (debug & release) and two productFlavors (default & staging). Which means I have the 4 followings configurations:com.mycompany.myapp com.mycompany.myapp.debug com.mycompany.myapp.staging com.mycompany.myapp.staging.debugI understand I have to create 4 different Android apps in RevenueCat to match these 4 package names.But does that mean I also have to create 4 different apps in Google Play, even if only the first one (com.mycompany.myapp) is meant to be published? That seems to be Is there a way to tell RevenueCat to map the correct subscriptions in the Google Play console with only one app?
Looking through the SDK, it looks like the application package name must exactly match the name provided in the RevenueCat dashboard. This makes sense, but it breaks the common practice of using Android’s applicationIdSuffix to install a debug version alongside of a release version, which is a really useful feature.Is it currently possible to manually specify an application package name rather than deriving it from the application context? If not, it would be really nice to be able to do so, or at least to allow specifying an applicationIdSuffix to the RevenueCat SDK. Something like this?PurchasesConfiguration.Builder(context, API_KEY) .applicationIdSuffix(“.debug”) .build()
Hi. I’m try to buy the product: const result = await Purchases.purchasePackage(this.selectedPackage);It’s resolves success, but result.customerInfo.entitlements.active is empty. In Xcode i receive following warning:Transaction '2000000463276919' will not be finished: it's a non-subscription and it's missing in CustomerInfo list: []What’s happening?
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!
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.