Get help with your SDK implementation.
Recently active
I’m using customerInfo.AllPurchasedProductIdentifiers to check purchased products. Some consumable products I bought multiple times has only 1 reference in this AllPurchasedProductIdentifiers list. Is there a way to see how many times a product is bought?
try { const { purchaserInfo, productIdentifier } = await Purchases.purchasePackage(package); if (typeof purchaserInfo.entitlements.active.pro !== "undefined") { // Unlock that great "pro" content }} catch (e) { /* No purchase */ } Is it possible to add a custom field to the package variable?I would like to access the field data through a webhook.
Hello,First time app developer and my app is targeted to iOS 17 only, but for some unknown reasons, appstoreconnect reviewer is testing my app on iPad and getting error below and app has been rejected. I tested the purchases on Sandbox and never got the error. I do not have more details on the error. I use new “Paywall” feature and I was expecting this to be handled automatically. Can anyone help please? Their response is as below
Hello, In my iOS app the user IDs are RCAnonymousIDs since there’s no sign up to purchase a subscription. Since there’s no sign-up, when they install the app on a new device they have a new RCAnonymousID and they do not have immediate access to their subscription. There’s a restorePurchase button, but would like to have an automatic restoring purchase feature on a fresh install. I read through a similar question in this community (link) and it seems like calling `syncPurchases` on a fresh app install will do the trick. My only hesitiation of using it is if there will be an Apple ID sign-in alert if there’s no receipt on the device? I had a similar issue to this when implementing `checkTrialOrIntroductoryPriceEligibility` awhile ago (link) and want to make sure it just returns silently if there’s no receipt. Any help is greatly appreciated and thank you in advance!
Everything is configured correctly on RevenueCat and the app stores, and I’m able to fetch and display my offerings using `Purchases.getOfferings()`. console.log(offerings.current.availablePackages);LOG [{"identifier": "pay_black", "offeringIdentifier": "default", "packageType": "CUSTOM", "product": {"currencyCode": "KRW", "defaultOption": null, "description": "Test1", "discounts": null, "identifier": "pay_black", "introPrice": null, "presentedOfferingIdentifier": "default", "price": 10000, "priceString": "₩10,000", "productCategory": "NON_SUBSCRIPTION", "productType": "CONSUMABLE", "subscriptionOptions": null, "subscriptionPeriod": null, "title": "Black"}}, {"identifier": "pay_blue", "offeringIdentifier": "default", "packageType": "CUSTOM", "product": {"currencyCode": "KRW", "defaultOption": null, "description": "Test2", "discounts": null, "identifier": "pay_blue", "introPrice": null, "presentedOfferingIdentifier": "default", "price": 30000, "priceString": "₩30,000", "productCategory
Hello all,I use a React Native SDK. I have several plans, all with free trial. When I change a plan, while in free trial, I use IMMEDIATE_WITHOUT_PRORATION prorationMode as recommended in https://www.revenuecat.com/docs/managing-subscriptions#google-play when upgrading, so that free trial is not expired.But this removes the TRIAL flag from the entitlement.When I subscribe for the first time with the free trial, I see that "periodType": TRIAL for the active entitlement. But when I change subscription with IMMEDIATE_WITHOUT_PRORATION mode, the periodType becomes NORMAL, even though trial is still going on Thank you!
Hello, my app is only targeting iOS, but appstore reviewer is tessting it on iPad and seeing product names are empty. I am using “Paywall” feature of RC. The products show up fine on iOS. Any idea what is causing this?
Hi, I just changed my whole app from native IOS to React Native, but it seems altough we have subscriptions in App Store, we can’t get the subscription status in React native app in testflight or locally. Is this something usual?
Hi RC team! First of all, many thanks for all hard work you have been doing developing such an amazing tool! We are happy with RC but we have some complains in our dev team about how the tool works in Unity. The main issue for us is not being able to see real prices of IAPs in the Unity Editor, you already makes this clear in your documentation here that the SDK is not supported in the Editor.So the question here, is there any plan or public roadmap to see if you will work on this feature and offer better support for Unity games in general in the mid-short term?I know that native apps are the main focus of RC and makes sense, but working on improving the Unity plugin will open a huge market for RC, almost all game dev community are tied to UnityIAP and I guess the developer experience by the time they try to integrate RC will stop them to using your tool.Many thanks in advance for your support.Kind Regards!
Hi there,we have an one-time IAP in our app. Additionally we want to experiment with short-time (weekly) subscriptions. We thought that would make sense in our case, since some of our users are using the app just 1-2 weeks in a year.So we created and submitted a subsription on the store, but it got rejected, because it is not visible in the app. To attach it to an entitlement it has to be published in the store, which again not possible, because it is not visible. How do we solve this chicken-egg-situation? We have begun the review of your in-app purchases but aren't able to continue because your submitted in-app purchases indicate a change of business model for your app. Specifically, your existing Non-Consumable business model has changed to include a auto-renewable subscription in-app purchase business model type.Therefore, we need to verify the implementation of your submitted in-app purchases in the app to ensure your app, and its in-app purchases, are in compliance with the App S
Hello, I recently was having trouble handling the “Restore purchases” button that can be added to a RC Paywall.There is a native alert being presented each time the restore was successful, however the restoreCompleted closure only executes once. I see the purpose behind this was preventing unnecessary processing as the user has already indeed restored his stuff, nonetheless it’s completely intuitive.On a side note, the native alert showing up is prompt to conflict with some UI logic passed in restoreCompleted. i.e.: If you want to update the binding on a fullScreenCover(isPresented:) to dismiss the View it will not take effect, the binding will be updated but the View remain visible, un-syncing the binding hence making it unusable. This is the result of the native alert being shown and interfering with SwiftUI.I propose a boolean value to decide if an alert will be shown when the restoring process completes.
Hey,I am currently integrating the Facebook SDK with RevenueCat in my project and have followed the instructions as per documentation. I recently updated to the latest version of the Facebook SDK using the package manager. However, I encountered an issue while setting up the Facebook anonymous ID.Here is the snippet of the code I'm using:Purchases.shared.attribution.collectDeviceIdentifiers()Purchases.shared.attribution.setFBAnonymousID(FBSDKCoreKit.AppEvents.anonymousID)The compiler throws the following error:"Instance member 'anonymousID' cannot be used on type 'AppEvents'; did you mean to use a value of this type instead?"I'm wondering if there have been any changes in the SDK or RevenueCat's integration process that I might have missed. Could you please provide some guidance on how to resolve this error or suggest an alternative way to correctly implement this functionality?Regards
Hi all,I use a React Native SDK. I have several plans. When I want to downgrade to a cheaper plan, I use a DEFERRED proration mode. The change is successful on Google Play's side, but `purchasePackage` method hands forever.Also, when I use `restorePurchases` method, I do not get any update about a change in the plan.Similarly, I do not see any changes in my dashboard until the moment, when the plan actually changes (when the old plan expires). Thank you!
Hello,I want to use multi-quantity purchases in a Unity app on Android with RevenueCat. I've looked through the RevenueCat documentation, but I couldn't find any info on this.Can anyone clarify if RevenueCat supports multi-quantity purchases, particularly within Unity? Any guidance or additional resources on this topic would be greatly appreciated.For reference, here's the link to the Google documentation on handling multi-quantity purchases: https://developer.android.com/google/play/billing/integrate#mqThanks in advance.
One of our customers opted out of automatic renewal. She subscribed previously to a yearly subscription, and after a couple of days opted out of renewal. This means her entitlement to that yearly subscription should still be active, just the `willRenew` property of the entitlement should be false. However, the `isActive` property of the entitlement was false. Only after asking her to restore her purchases, the entitlement was isAcgive again. Code for checking if subscribed:Purchases.shared.getCustomerInfo { (customerInfo, error) in if let customerInfo = customerInfo { if let entitlement = customerInfo.entitlements[PurchasesManager.entitlementPremium] { if (!entitlement.isActive) { // Not subscribed, but was subscribed? if (premium.premiumFromAppStore) { // Logic for ubsubscribing user and informing they're unsubscribed } } } }} Code for restoring purchases:func restorePurchase() {
Just switched to RevenueCat and added some code (React Native) to sync past purchases. It works great, but synced customers don’t have all of the attributes I’ve set up for new purchases.First thought was to check if syncPurchases returns something, and use that to call Purchases.setAttributes.purchaseInfo = await Purchases.syncPurchases();if(purchaseInfo){ console.log(purchaseInfo); }For me, it’s only returning “undefined”. Does it return something if there’s a valid receipt? If not, can I just throw in a Purchases.setAttributes before or after calling syncPurchases, so that these synced users get the proper identifiers?
I have an offering containing a monthly and a weekly subscription option.I want to test replacing weekly with yearly so I created yearly products with Apple and Google and attached them to RevenueCat.Then I created a new offering with my existing monthly and added my new annual. However, the annual product is not showing up as a part of my offering from the client (both by checking `.yearly` and `.availablePackages`.The store status is listed as “Ok” for the associated product.
Dear RevenueCat Support,I am currently developing a React Native application that uses the react-native-purchases library for handling in-app purchases. I have encountered an issue where the session related to the purchases remains active even after a user logs out.I am using Firebase to authenticate, and the SDK is not generating anonymous ID like (RC: …). But the same ID stored in (originalAppUserId: '8NG2...') which is the same as the firebase User, is forever stored in the cache unless the app is deleted and redownloaded. I am wondering what the best practice is that is not .logOut, due to creating anonymous ID. I am aware of restorePurchases but I am gearing away from a button to pass the conditional renders. Also, is it appropriate to leave the .logIn in the authStateChange function for logging in with saved authentication data or to use the login just during the initial login part of the code. Thanks for your guys help. I hope to hear back soon! APP.js function onAuthStateChang
Hi all,Hi all,Today, I installed an SDK in my brand new project. After receiving the app API, I configured the instance of Purchases:Purchases.logLevel = .verbose Purchases.configure(withAPIKey: "my app api here")During my first few runs, I noticed that the console outputted a lot of information, which was good. However, after I added the following code, the console stopped outputting anything:// Using Swift Concurrencydo { let offerings = try await Purchases.shared.offerings() // Display current offering with offerings.current} catch let error { // handle error}// Using Completion BlocksPurchases.shared.getOfferings { (offerings, error) in if let offerings { // Display current offering with offerings.current }}I added print functions in all brackets as a test to see if they would output anything, but they did not. Additionally, all the output that I had seen at the beginning was absent as well. I removed the second block of code (the one with concurrency) to see if
purchased_at_ms The time is not accurate We found a problem and ask if the value purchased_at_ms is correct. We tested purchases-ios SDK version 3.14.4 and found the problem. We tested an iPhone 13 Pro Max, iOS 15.1, without a SIM card. With iOS 17.1, purchases-ios SDK 4.31.6 has the same problem ”event_timestamp_ms": 1704269598747, "expiration_at_ms": 1737447173000, "purchased_at_ms": 1705824773000, three times are incorrect. Test Procedure Set the system time to 2024-1-21. A subscription purchase succeeds. purchased_at_ms's time is 2024-01-21 16:12:53 Using version 3.14.2 purchased_at_ms is 2024-01-03 15:35:06 Would you like to ask what is the problem caused by this? This one uses version 3.14.4This one uses version 3.14.2
We have been using RevenuCat Paywall 4.31.5. Not able to see Close button on Paywall.Please help on it. It happens only on Landscape mode. Portrait is good.
Hi guys, I'm trying to understand how to deal with "App User ID" and user accounts. All good if I have the next flow:A user downloads an app. The user register in the app Based on the registered user account, I can generate an "App User ID" and send it to RevenueCat. Then, based on the registered user account, I always have access to the user "App User ID" because it is stored in my database and mapped to the registered user account. Later on, users can restore purchases anytime after they log in to the app. Because again, I have his "App User ID" stored in my database.But what should I do if I have no user registration in the first place? Is it possible? For example:A user downloads an app. I generate some random "App User ID" based on the device UUIDD The user goes through onboarding screens with a PayWall in the end. The user makes a purchase. All that I have now, it's his "App User ID" mapped to his device UUID, and that is it. If the user changes the phone or tries to log in on
Hello,I am using revenuecat sdk for flutter, and i configure the sdk using the android and ios public sdk keys and the user id corresponding to the user.I am trying to understand what will be the impact if someone decompiles my app and gets hold of the public/private keys? Could they connect to the revenuecat on my behalf and make operations like cancel subscription or request refunds..etc? From my understanding there is nothing holding them back to perform these operations.Also I am interested to know, if in our systems we identify the user with a standard auto increment primary key like 1,2,3...etc, could this be an issue for someone to mess with us if they also have the private/public keys? I am thinking decompile the app, retrieve the public keys, initialise the sdk with random ints that represent the app users ids and try to cancel, refund their subscriptions. Is this something that would be possible?Thanks!
I want to discuss strategies for enhancing the trial conversion rate of my Android app.Recently, I've noticed a trend in our dashboard where a significant number of users are opting to cancel their trials. This observation has led me to consider the importance of understanding the reasons behind these cancellations.To gain better insights, I am interested in exploring methods to solicit feedback from users at the point of trial cancellation. Could someone advise if there is a mechanism within Revenue Cat’s SDK that triggers a callback when a user cancels their trial? If such a feature exists, it would be beneficial to implement a dialog box or a feedback form that prompts the user to share their reasons for cancellation.Understanding the factors contributing to trial cancellations is crucial for us to address any underlying issues and improve the user experience. Your guidance on how to effectively implement this feedback collection process would be greatly appreciated.
I'm relative new to revenue, and I moved from Google play because I have some issues with people not get the purchases recognized, that's why I decided to go with revenuecat, however I have some issues now, some users seems that they don't have "premium" or the purchases are not recognized, then if they go to restore purchase, everything works, and seems that this is only for some users, apparently in some headunit, tablets and made Xiaomi/Chinese brand, probably the play store is doing something weird but they can restore the purchases without a problem, so I'm wondering if there is something that revenuecat can do, or any suggestion?I initialize RC in the main application, and it doesn't seems like a sdk setup issue since this only happens to some users, what else I can try? Thanks a lot
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.