Get help with your SDK implementation.
Recently active
I have similar question like this one herehttps://github.com/RevenueCat/purchases-android/issues/82When using slow test card on Android in-app purchases all I get is purchase error with message='The payment is pending.'. Is there a way to get notified when transaction has been completed? If not, what options do we have, we can iterate through purchaserInfo.nonSubscriptionTransactions to get all in-app purchase?
Hello, i came across a weird behavior using the offer code with url redirecting to app storeEnvironment: TestflightI was charged for the offer, and when it clicked to open my app, nothing happened and revenue cat did not track the purchaseI already call sync purchases when the user returns back to the appI was wondering if there is a time where the offer code redemption is not active yet and i call sync purchases in that time, or that maybe testflight does not track purchases, but i got charged, which is weird
I have a mobile app ready to go using RevenueCat, I want to hook up a web equivalent of checkout. I can see a guide on how to connect stripe, but purchasing isn’t the only thing RevenueCat is concerned with, what about getting user entitlements? I can do something like: const res = await fetch( `https://api.revenuecat.com/v1/subscribers/${user.id}`, { headers: { 'Authorization': `Bearer ${'appl_x'}`, 'Content-Type': `application/json`, 'X-Platform': 'ios', 'accept': 'application/json', }, },) .then((res) => res.json()) .then((res) => { const entitlements: Record<string, PurchasesEntitlementInfo> = {} if (res?.subscriber?.entitlements) { Object.keys(res.subscriber.entitlements).map((v: string) => { const value = res.subscriber.entitlements[v] const activeSubscription = res.subscriber.subscriptions?.[value.product_identifier] entitlements[v] = { expirationDate: value.expires_date,
I’m trying to download the IAP Key file, but it opens in a new browser tab. If I copy the key to a file and upload, it’s rejected for having the wrong file name. I need to know (1) What should the name of the file be, or (2) How to download the file instead of opening in the browser.
If I call ‘restorePurchasesWith’ and there are no purchases to restore, I see an error out of the google billing wrapper: “Error acknowledging purchase. Will retry next queryPurchases. DebugMessage: Item is not owned by the user.. ErrorCode: ITEM_NOT_OWNED.” But this error does not bubble out of the wrapper up to the error handler provided to the ‘restorePurchasesWith’ call. How can I tell if restore fails in this manner.
Hi, we’ve been able to get IAP working on Google and Apple, but are stuck on Amazon:We have Amazon App Tester set up with the .JSON file for our IAP products coming up as per the Amazon documentation. Making a purchase however, does nothing. I’m monitoring the trackers and RevenueCat is called as with the other two platforms. There’s is just no purchase pop-up.Debug Logcat gives me this:AbstractCommandTask: On Exception!!!!: com.amazon.a.a.o.b.a.a: DATA_AUTH_KEY_LOAD_FAILURE: CERT_NOT_FOUND: nullSimpleTaskPipeline: KIWI_COMMAND: Task finished executing: com.amazon.a.a.f.b@808d4c4Unable to start service Intent { cmp=com.amazon.mShop.android.shopping/com.amazon.mls.config.internal.sushi.uploader.BackupUploaderService } U=10: not foundError executing JobStatus{24cb9cd #u10a478/426136249 com.amazon.mShop.android.shopping/com.amazon.mls.config.internal.sushi.uploader.BackupUploaderService u=10 s=1010478 TIME=-18h7m43s58ms:-16h59m54s716ms NET PERIODIC READY}From what (very little) I could fi
Hi,I have been sandbox testing for a while with the same sandbox user. Though when I used another sandbox user I ran into the error “There was an unknown backend error. The subscriber has reached the max number of Apple receipts allowed (7636). Then I cleared all sandbox users purchase history in App Store Connect, but ran into the same error when trying to subscribe with the new user. Though I could make a subscription using the original sandbox tester. My next move was to delete the original sandbox user in App Store Connect, but I still ran in to the same error (7636) when using a new sandbox tester. But the new sandbox users had a subscription, as I could see in App Store on the test device. After reinstalling the app and restoring the new sandbox users subscription the app worked as intended.So my questions are:Is the error originating from RevenueCats backend or App Store?Can you clear the sandbox purchase history in RevenueCat?I realise it is highly unlikely to run into thi
I’m trying to delete a user as part of a UI test flow and I’m using this API - https://www.revenuecat.com/reference/delete-subscriberAfter entering my V1 api secret token and the user I want to delete’s ID, I get the following bas script curl --request DELETE \ --url https://api.revenuecat.com/v1/subscribers/my-user-id \ --header 'accept: application/json' \ --header 'authorization: Bearer sk_token' This however returns just {"code":7227,"message":"Content-Type not application/json"} My token is for V1 of the API and the user id is right, I’m not passing in any JSON. Why am I getting this error?
We are hitting the same issues many others on this forum are seeing with multiple App Store rejections trying to get our new app approved. We are on submission #8. Everything works fine for us in Sandbox (and XCode) testing across multiple devices over multiple weeks. We get successful purchases that show up in the RevenueCat sandbox.The App Reviewer is getting the same error message on the multiple devices they are trying: Our code is Swift with min iOS 16 support. We are using v4.15.0 of the RevenueCat API (purchases-ios imported using Swift Package Manager)This error occurs after we call: Purchases.shared.purchase(package: package) In the above screenshot, the RevenueCat error is “Unknown error” with Code 0.The only useful part of the error message is “The receipt is missing”, which is coming from the localizedDescription of the underlyingError if let underlying = err.userInfo[NSUnderlyingErrorKey] as? Error{ errorToShow += underlying.localizedDescription} So far, we have be
Where can I find the RevenueCat SDK documentation in Objective-C? I’m not using Swift directly (though I link to several Swift libs) and I’m having a difficult time integrating without Objective-C docs.
Hello, we’ve recently implemented ios subscription offer codes, to give user a free trial for a certain amount of time. While testing the testflight version (ready to submit), and trying out those production offer codes, the user is redirected to the app store (https://www.revenuecat.com/docs/ios-subscription-offers) and purchases the subscription successfully...but when returning to the app it seams like RC does not catch that purchase and therefor user has no premium content access (I suppose RC does not receive the users track receipt and therefore can not send webhook for this event). We were being advised from your support to sync the user (call syncPurchases method before the user leaves the app and after the purchase (on foreground)), but I’ve came across the docs saying that we should not call sync purchases progammaticaly () so can you please expain how to use it the proper way inside our React Native app. thanks
Please assist as I am a bit lost:I am trying to wrap my head around upgrading and downgrading users, however I am not dure how to actuallky do this. I am aware the documents say: that you need to pass the UpgradeInfo object to either purchaseProduct or purchasePackageWhere do I get this UpgradeInfo ? I am using flutter.Applogies for the noob question.
We get a number of errors related to “Purchase already in progress for this product.” → is this an issue or does this just let us know that a user has tried to trigger a purchase twice?
We used to configure revenue cat like thisPurchases.configure({apiKey: XXX})And we changed it to thisPurchases.configure({apiKey: XXX, appUserID: ourAppUserId})I am not sure of what happend after this:Do all our users now have an alias, in this case greate. Or was a new user created for each user and we need to call syncPurchases In this case can we remerge them ? As we know that both users have the same deviceId
Hi Our app is using Revenue Cat’s Cordova Android Plugin (latest version) and even though everything works fine when deploying on the development mobile devices and also the purchases succeed (and pretty much any SDK/API interaction), when trying to publish the bundle we are getting the deprecation error (with link to https://developer.android.com/google/play/billing/deprecation-faq).Now, the com.google.android.play.billingclient.version is missing indeed from the AndroidManifest.xml and if I tried adding it manually and specifying 5.0.0 (just trial and error) it failed (merge error - so it seems to be trying to merge something!) and I finally ended up adding this line:<meta-data android:name="com.google.android.play.billingclient.version" android:value="4.1.0" />And it works! Google accepted our bundle, but I’d really like to get this fixed properly.Any suggestions?
I have a Flutter app running that uses the RevenueCat SDK. I install the app on my iPhone and make a purchase which utilizes the devices assigned Apple ID to track purchases.Thus works.Then, I assign a fresh unused AppStore sandbox userID in Settings/AppStore/SandboxAccount. When I run the app thru VSCode development tools, the Purchases.configure call accesses the RevenueCat cache for the device Apple ID. It does not recognize that the assignment of a Sandbox ID and running through the development tool invokes a different Apple ID and the cache is invalid. I am trying to use the fact that there is no RevenueCat customer entitlements for my app to recognize a new user, but the return of old invalid cached customer info for a different customer is making tis impossible. I tried using invalidateCache with this code, but it does not ignore the cache……. static Future<void> configure( ) async { if (Platform.isAndroid) { configuration = PurchasesConfiguration("public_google_
This piece of Swift codePurchases.shared.getCustomerInfo { [weak self] info, error in guard let info = info, error == nil else { return } if info.entitlements["monthly_access"]?.isActive == true {Is always returning isActive == true, even though the entitlement has expired.Since I have the original app user ID, I checked with the v1 API and this is what I get:{'request_date': '2023-04-19T09:03:03Z', 'request_date_ms': 1681894983925, 'subscriber': {'entitlements': {'monthly_access': {'expires_date': '2023-04-18T11:14:37Z', 'grace_period_expires_date': None, 'product_identifier': 'subscription_basic', 'purchase_date': '2023-03-18T11:14:37Z'}}, …As you can see the monthly_access exists but its expiration date is older than the current date so I would not expect this to return isActive trueThis is a big issue because it allows people to access the app even though they are not paying (I would say very essential feature of the SDK is to prevent people from accessing features they are n
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.
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.