Get help with your SDK implementation.
Recently active
I want to use RevenueCat only with non-anonymous appUserIDs.I am using the CloudKit recordID.recordName of the user as a unique user ID. This recordName should be consistent across reinstalls and across devices as long as the user is logged in with his same AppleID.I am getting that userID async during launch of my app and it may not yet be available when I call Purchases.configure().My question: Will the customerInfo that gets created during .configure() be alway associated correctly with the customerInfo of the user with the appUserID (CloudKit recordName) if I call .configure() first at app launch and typically a few moments later .login() with the appUserID?Or does this create lots of “dangling” anonymous customerInfo records in RC that have no future use? I have read the login alias information in the docs: https://www.revenuecat.com/docs/user-idsBut I am still not certain about what happens. Especially line three in that table“Anonymous Yes Yes CustomerInfo transfers to
Hi all,I am currently playing around with the changes that come with billing client 5 implemented in the RevenueCat Flutter SDK version 5.0.0-beta.1, and I am getting an unexpected identifier on the StoreProducts:List<String> products = ['subscription_annual'];List<StoreProduct> storeProducts = [...await Purchases.getProducts(products, productType: ProductType.subs),...await Purchases.getProducts(products, productType: ProductType.inapp),];for (StoreProduct e in storeProducts) { print(e.identifier); // Prints subscription_annual:p1y}I would expect the identifier to be identical to the product that I am retrieving from Google Play, but it appears it defaults to something like product:basePlanId. The defaultOption and subscriptionOptions appear to be correct: productId has the product, storeProductId has the product:basePlanId.Am I missing something?What would it look like if I had multiple base plans? Would I receive multiple StoreProducts from RevenueCat or would I get a n
I have setup offerings and fetching them in my react-native app using getOfferings function.I do get all the offerings but all the offering only has the backwards compatible product in their product key.{ identifier: "$rc_monthly", offeringIdentifier: "premium", packageType: "MONTHLY", product: { currencyCode: "BDT", description: "...", discounts: null, identifier: "premium", introPrice: null, price: 23000, priceString: "BDT 23,000.00", productCategory: "SUBSCRIPTION", productType: "AUTO_RENEWABLE_SUBSCRIPTION", subscriptionPeriod: "P1Y", title: "Premium (Dating Vill)", },}{ identifier: "$rc_six_month", offeringIdentifier: "premium", packageType: "SIX_MONTH", product: { currencyCode: "BDT", description: "...", discounts: null, identifier: "premium", introPrice: null, price: 23000, priceString: "BDT 23,000.00", productCategory: "SUBSCRIPTION", productType: "AUTO_RENEWABLE_SUBSCRIPTION", subscriptionPeriod: "P1Y", title: "Premium (Dating Vill)", },}Both time returni
Hey Folks,My production application is not working, because Firebase extension version is not correct. I’ve updated my Firebase extension to v0.1.7 and I’m getting this error:`{"code":2,"message":"The version of this extension is not the same. Extension version 0.1.7, Api version: 0.1.6. Please retry the request with the correct version","extension_version":"0.1.7"}` Related Github issue: https://github.com/RevenueCat/firestore-revenuecat-purchases/issues/51I think this commit went wrong: https://github.com/RevenueCat/firestore-revenuecat-purchases/commit/522615658d01213484cfcf7aa55cb648792878f8#diff-e6a35fcf3c90f75b27c14eb559ddcf8cd259b4e1a2cf49f73d3ed9f91229fccdR31
Hi cool revenuecats and kittens,We have built an app and we are working with revenuecat to facilitate in-app subscriptions. We’ve set everything up correctly, but for some reason there is still something going wrong in getting the subscriptions for iOS. It works for Android. We have tried to debug and found the following:When we try to await Purchases.getOfferings(), this is the output that we are getting: [Error: There is an issue with your configuration. Check the underlying error for more details. 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-empty] If we try to send API calls directly to RevenueCat using postman, we do get offerings back from the API. Just like this code we tried in-app, that seems to work. const options = { method: "GET", headers: { accept: "applica
Hi ! I am configuring the SDK in a React Native app in Expo, using eas build.The doc indicates the following :To see your configured products in your Android app, you’ll need to upload this APK to Google Play. This APK does not need to be released to production—uploading it to an internal track is sufficient.But the APK built to test the app in the device can not be uploaded to the Play Store since they only accept .aab files Trying to get the offerings in my app triggers the following errors :There is an issue with your configuration. Check the underlying error for more details.at node_modules/react-native/Libraries/BatchedBridge/NativeModules.js:105:59 in promiseMethodWrapperat node_modules/react-native-purchases/dist/purchases.js:266:33 in __generator$argument_1at node_modules/react-native-purchases/dist/purchases.js:31:43 in stepat node_modules/react-native-purchases/dist/purchases.js:14:30 in <anonymous>at node_modules/react-native-purchases/dist/purchases.js:5:40 in fulfill
Docs say not to configure RevenueCat in -application:didFinishLaunchingWithOptions: when using custom user ids since iOS 15+ prewarming. Instead configure in your root view controller’s initialization method. Which ‘initialization’ method is that? The +initialization factory method, or the -init instance method? https://www.revenuecat.com/docs/user-ids#provide-app-user-id-on-configuration Provide App User ID on configuration ❗️iOS 15+ PrewarmingIn certain cases, iOS may prewarm your app - this essentially means your app will be launched silently in the background to improve app launch times for your users.If you are not using RevenueCat's anonymous IDs as described above, and are instead providing your own app user ID on configuration, do not call configure in application:didFinishLaunchingWithOptions:. Instead, call the configure method in your root view controller's initialization method.
In swift, when I purchase a consumable item, it sends a receipt to the server for validation. In storekit, I know that it checks the purchase history of the consumable item on the server and then calls the finishtransaction() function inside the app.So how can revenucat do this? When I use revenucat, I tried to check the purchase history on the server but there is no history. Please tell me how to do it.Thanks.
Suppose you don’t have any user registration or account system.Now, if the user downloads your app (let’s say with 1 week free trial), and deletes the app, and re-downloads it again, if they are using random/anonymous user IDs that are generated by RevenueCat, then they will be able to circumvent the subscription process by simply deleting and resinstalling the app to get another 1 week free. They can do this repeatedly. Am I correct?If so, then it seems important to use custom user IDs in this scenario (for example, UIDevice.currentDevice.identifierForVendor.UUIDString) which will generate a unique user ID for each device for the vendor/app. Then we can check if the user has already downloaded and installed the app and taken advantage of the free trial, and if so, don’t allow another. Correct?If we use this approach, the subscription won’t be available on any other devices. But that’s okay, since on those devices, we can always use the “Restore Purchases” button to get access to thos
Hi all,I am trying to integrate RevenueCat into my Managed Expo app to allow users to make a subscription purchase. I’ve followed all the guides on setting up my subscriptions in the Apple appstoreconnect as well as on RevenueCat’s dashboard.Now I am trying to `Purchases.getOfferings()`, but it is returning ERROR: [Error: There is an issue with your configuration. Check the underlying error for more details. 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). For context, my organization uses a separate internal distribution build for development.In the app store, our bundleIdentifier follows standard naming convention: `com.myorg.myapp.ios`. For our internal distribution development build, our bundleIdentifier is `com.myorg.myappdev.ios`.After reading this post, my hunch is that my development bundleIdentifier does not match the one in t
EXPIRATION event type with "expiration_reason"="UNSUBSCRIBE" is sent right after CANCELATION and isn’t sent when subscriptions are really expired according to expiration time.(Google Play subscriptions)It was ok before the release for Google Play billing V5...
The problem is that purchasePackage takes long time (over 60 sec) to complete its job and return value. Developed with Flutter, testing on iOS device with Sandbox environment. The related code is :CustomerInfo purchaserInfo = await Purchases.purchasePackage(selectedPackage); Is this something related to Sandbox and App Store Connect and no need to worry on production environment? If anyone advise on this issue, ,much appreciated. Thanks.
Hi there,My question is this: We have connected webhook events to our app and in the client side we have implemented only the configure part with userId and login method RNPurchase.configure({ apiKey: "xxxxxxxxx", appUserID: UUID-userIdHere }); RNPurchase.logIn(userID); So our app won't have anonymous users. According to documents, we should not call logOut() method for users because we don’t want anonymous users. However, we should be able to get TRANSFER type of events in the webhooks but we could not received it yet. In this case our users can change users with different logins. We have tried that: 1-) User logged in our application, sdk configure and login method is invoked.2-) Then we have deleted user in our system 3-) We have created new user with different userId but belongs to same Google Play user. 4-) SDK initialized configure and login method again but never received TRANSFER event. We get all events except TRANSFER events. So how can we g
I have in Revenue 1 Offer with 4 packages. 1 Premium Monthly, 1 Premium Yearly, 1 Plus Monthly, 1 Plus Yearly. All packages are connected with the product from the respective app stores. Everything works perfectly on Apple but Google does not show me a single subscription (Premium Monthly). Does it take until changes are visible in RevenueCat. We use the whole thing in a Flutter App.
I’m trying to use an offering with multiple packages (using custom identifiers), and the documentation is incorrect when it says you can access an offering and a package via its identifier in this section:https://www.revenuecat.com/docs/displaying-products#displaying-packages It says to use this code:offerings.all("experiment_group").package("<package_id>")But in the RevenueCat SDK, “all” is a property and not a method. See PurchasesOfferings interface:https://revenuecat.github.io/react-native-purchases-docs/5.13.1/interfaces/PurchasesOfferings.html#current Similarly, there is no “package” function on the PurchasesOffering interface:https://revenuecat.github.io/react-native-purchases-docs/5.13.1/interfaces/PurchasesOffering.htmlIt seems like the only way to get this is to search through the availablePackages array until you find a matching identifier.
Consider a situation where user had subscribed to any of the plans in one platform (assume ios) and later due to some reason user has to change to different platform (say android) or vice versa. How to best handle this situation ? User doesn’t seem to see active entitlement.
verbatim copy of code from the documentation: const sdk = require('api')('@revenuecat/v4.0#1yz2c0m2sl5v5md8q');sdk.auth('Bearer REVENUECAT_API_KEY');sdk.deleteSubscriber({app_user_id: 'app_user_id'}) .then(res => console.log(res)) .catch(err => console.error(err));produces this error:Error: Sorry, `deleteSubscriber` does not appear to be a valid operation on this API. at Proxy.<anonymous> (/workspace/node_modules/api/src/index.js:164:21) at processTicksAndRejections (node:internal/process/task_queues:96:5)
After i do purchasing using function : final result = await Purchases.purchaseProduct( "skuID", type: PurchaseType.inapp,);after successing do payment, revenueCat will trigger webhook and retrieve data just like : https://www.revenuecat.com/docs/webhooks#events-format what if i want to adding new key-value such as meta-data into webhook responsejust like : {key1: value1. . .meta-data: { recipe_id: id_recipe_1 }}do you have any idea with this case team?
XCode: Version 13.0 (13A233)macOS Deployment Target: 11.0Install via Swift Package ManagerWhen I compile it prompts: No such module 'Purchases'
I have an existing RevenueCat implementation in SwiftUI using the Purchases SDK 3.14.1 in production.I am currently in the process of upgrading to the latest RevenueCat SDK 4.17.8 and am therefore reconsidering my design choices and looking for best practices / guidance on how to implement an ObservableObject for SwiftUI with Swift concurrency (async/await) using the latest RevenueCat SDK.I have a single entitlement (“premium”) in my app for which I want to broadcast its subscription status through a @Published boolean variable in the ObservableObject, similar to the ‘MagicWeatherSwiftUI’ example provided by RevenueCat:@MainActorclass PurchasesManager: NSObject, ObservableObject { static let shared = PurchasesManager() @Published var customerInfo: CustomerInfo? { didSet { subscriptionActive = customerInfo?.entitlements[Constants.RevenueCat.premiumEntitlement]?.isActive == true } } @Published var subscriptionActive = false private override init()
This seems to be a common ask for help, but Purchases.getOfferings() is not working for me with the error `None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect`. It’s a situation like this other thread (among others), but I think I’ve double-checked all the things to watch out for.Specifically, I had RevenueCat working with my app, which right now is in beta so at most some folks are testing it via Testflight - RevenueCat could retrieve the products then. I then decided to create a dev version of my app using a different bundle ID so that I could simultaneously have the Testflight version and the Expo development build on my phone.Now, Purchases.getOfferings() is working fine on the Testflight version (which has my original bundle ID) but not on my development version (with the new bundle ID). Things I’ve checked:The development build of my app has the new bundle ID I have created a new app in App Store Connect using that new bundle ID I h
Hi,I’ve had two crashes from removedTransactions. Any thoughts on what it might be?thanks16.3.1 (20D67)iPhone 11
I just wanted to report an incorrect code snippet in the iOS subscription offers documentation. I spent several hours trying to debug why it wasn’t working for me in React Native, so it would be helpful if this could be fixed so it can benefit others in the future. Here is the documentation page in question The error is only present in the React Native code snippet provided:This function is undefined because it does not exist in any version of react-native-purchases. I uncovered this issue when I checked the other tabs of the code-snippet and searched inside the /src/purchases.ts file of the react-native-purchases package, and found that there is no method called “getPaymentDiscount”. This line is supposed to be:const paymentDiscount = await Purchases.getPromotionalOffer(product, product.discounts[0]);Note: getPaymentDiscount is replaced by getPromotionalOffer. I have tested this code and after providing the product and discount from the package, I was successfully able to call:Purchas
Hello everyone!I’m facing an issue that everyone has faced, I can’t fetch any of products(subscription) that is registered on app store connect and even in revenue cat. I had checked all my code, no errors, I even read this article but anything has solved my issue.I’m using React native to code the app, and I don’t know if Purchases.configure is working correctly.I want to know where can I read logs to debug, I set this method : “setLogLevel(Purchases.LOG_LEVEL.DEBUG)” because another method(“setLogenabled” something like this) was deprecated but I don’t know where do I could check for every logs with revenuecat and debug the code.Kinds regards.
Hello! I have published my subscriptions in Google Play store recently.During the testing - the subscriptions appear correctly in RevenueCat sandbox. The subscription also appears in RevenueCat when I use release version of the application that’s downloaded from the Play Store with my test account.On the 31th of Oct there was a first subscription purchase by a real user and the purchase appears in Google Play. But there is no sign of this purchase in RevenueCat and also no sign of this purchase in my analytics where I log the purchase when it is received from RevenueCat callback in Android. I’m afraid that the user has paid for the subscription and didn’t receive its value due to RevenueCat not receiving the info about the purchase.I’d value some suggestions for investigating the issue and understanding what exactly is happening. Thanks in advance.
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.