Discussion and help from anything related to RevenueCat.
Recently active
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,
We recently set up Apple search ad’s attribution through revenuecat and started testing new campaigns. For all of our campaigns except one the tracking has been great and super helpful. However for one of our campaigns that has been spending ~$75/day for the last two weeks there is zero data on it.. Very odd. Has anyone encountered something similar/have any solution ideas?
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,We are trying to create an offer code for a partner that gives their clients a month free and then 20% off our product. Is there a way to have an offer code or some combination of offer code and introductory offering that gives a user both a month free and a discount?Basically, the flow would be - a user comes on to our app referred by a partner. We to set up some relationship with the partner where THEIR users specifically get both: 1 month free 20% off our list price. For further context, we use the in-app offer code redemption sheet currently for offer codes. Are their better options than this for partner offer codes in an iOS app?
i have flutter app for android. I use a monthly subscription(3 days trial). one of the users saw the following story: Changed their renewal preference to MySubscId Started a subscription of MySubscId2023-04-08 4:02 AM UTC Last opened the app2023-04-08 4:01 AM UTC Had their subscription of MySubscId expire2023-04-03 3:06 PM UTC Had their subscription of MySubscId cancelled due to a billing error2023-04-03 12:26 PM UTC Entered a grace period of MySubscId due to a billing error.2023-04-03 12:26 PM UTC Started a trial of MySubscId2023-03-30 12:26 PM UTC First seen using the app2023-03-30 12:24 PM UTC Total Spent for user = 0. so the user used the trial for 3 days, then his subscription ended. but what does “Changed their renewal preference to” mean? Changed their renewal preference to MySubscId Started a subscription of MySubscId2023-04-08 4:02 AM UTCany hints - I will be grateful.
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
Using revenue cat in flutter.In ios side all is working fine ,but in android side getting empty list of offerings.Is there anything related to new updates that google added in io’22.Or it is some configuration error.Output :- DEBUG(32279): ℹ️ API request started: GET /subscribers/6273eb4bda327c735a4b20deD/[Purchases] - DEBUG(32279): ℹ️ API request completed with status: GET /subscribers/6273eb4bda327c735a4b20de 304D/[Purchases] - DEBUG(32279): ℹ️ PurchaserInfo updated, sending to listener.W/System (32279): ClassLoader referenced unknown path: system/framework/mediatek-cta.jarI/System.out(32279): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttpI/System.out(32279): [OkHttp] sendRequest>>I/System.out(32279): [OkHttp] sendRequest<<D/[Purchases] - DEBUG(32279): ℹ️ API request started: GET /subscribers/6273eb4bda327c735a4b20de/offeringsD/[Purchases] - DEBUG(32279): ℹ️ API request completed with status: GET /subscribers/6273eb4bda327c735a4b20de/offerings 3042D/[Purcha
Hello,I’ve just submitted a new app.The hap has 10 IAP (5 kind of products: 1,3,6,12 months + lifetime, each for 2 different groups/price points).I added all 10 products because I want to do price experiments.Of course, the current offering has only a subset of these products; presently one of the two lifetime IAPS is the only product in the active paywall.Apps rejected the app for “App Completeness”; when I asked for clarifications they wrote back:Regarding the guideline 2.1, you have submitted 10 In App Purchases for review but the app binary only includes 1 In App Purchase. If you do not want to include in-app purchase products in your app, it would be appropriate to remove any unused in-app purchase products from App Store Connect before resubmitting for review. So they complain I have 10 IAPs but I am showing just one.Of course I could easily set the current offering to one which has 4 or 5 products, but that still leaves 6 out.How do I manage this rejection? Is it kosher t tell A
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 want to stop offering a set of subscriptions in our app for our lower tier, but want to let existing users to continue to have access to the subscription. If we remove the subscriptions from sale, how do we let the users continue to get access to the features they paid for, and also be able to restore the purchases till their annual/monthly subscription expires?
I have an android app published to the google play store around 4 days ago and revenuecat is not working even though the products are active on the google play console. Everything is working on the dev build. Everything loads properly. But in production, with no settings changed, the revenucat part suddenly doesnt work anymore.I’ve tried doing some error checks and it seems that the code is not getting past the first line of purchases.configure (googleApiKey is defined, i have checked)await Purchases.configure({ apiKey: googleApiKey });const offerings = await Purchases.getOfferings();const customerInfo = await Purchases.getCustomerInfo();does anyone have any ideas?
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.
First off, I have read everything in this thread and was not able to resolve my issue.My user count (both “Active Users” and “New Customers”) counts on the RevenueCat dashboard appear to be roughly double the actual count as I am tracking it internally within my app. I am using anonymous user IDs. My app is pretty basic and all I do is call Purchases.configure once on app launch -- my understanding is that this is where the unique customer is either created or retrieved but I’m not exactly clear on the logic here or how it happens.Anyway I’m using React Native and so I call .configure() in the export default function App() { … } function. I have also added logs and searched my entire code base to confirm that this is the only call and that it only gets called once during usage of the app.I don’t ever call reset(), identify(), or any other such RevenueCat methods. The only other calls to the RevenueCat SDK after a thorough scrub of my code base are Purchases.getOfferings, Purchases.getC
What is the difference between “cancelled_trial” and “expired” statuses? In the lists of customers it’s showing me only the former - the latter are in a separate area, but I’m not sure how to count that. Would “cancelled_trial” eventually move to “expired”? Thanks!
My app has a multi-user login system. I’m offering ability to purchase individual subscriptions based on account. I need a way to pull current active device subscriptions so I can assign unique subscriptions to user accounts. Does revenue cat have a Swift SDK option to pull current active device subscriptions?
If a user is first identified with an anon ID, then logs in to my app and is signed in to revenuecat with a custom ID, does that custom ID always override as the app_user_id?The documentation explains how aliases are merged, but doesn’t say which ID is set as the main app_user_id (e.g. for webhook data). https://www.revenuecat.com/docs/user-ids#login-method-alias-behavior I’m using the Firebase RevenueCat extension, and I want to be sure that the app_user_id will always be my custom ID if one is set, because the extension syncs data to firestore via that id. If it uses the anon id, then the data will not be correctly synced. During testing it seems like this is the case, but I want to be sure. Will the custom ID always become the app_user_id?
Hello,we are trying to implement IAP in an iOS app and are running into weird behavior regarding transferred purchases.We are signed in on two different iOS devices with an apple sandbox account. On the two devices, we use different app user ids. Now, we first made a subscription purchase on one device and canceled it afterward again. Then, we made a second subscription purchase on the other device (different app user id, same apple sandbox account).Whenever the app is started, Purchases.shared.logIn is called with the app user id of that device. With that, each time in the revenue cat dashboard, the purchase of the second device is transferred to the app user id of the last device we started the app on.This does not seem to be the desired behavior here – at least not what we need. We would expect the purchase to always be associated with the app user id which was used to make the purchase. In this example, the two app user ids are not related to each other. The only connection is the
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.
Hello,I'm trying to monitor the validity of subscriptions based on data in Firestore using Firebase Extension. The monitoring process is intended to be integrated into a Flutter app.The documentation lists the following methods for verifying entitlement access: https://www.revenuecat.com/docs/firebase-integration#using-the-extensionUse the RevenueCat SDK Use custom claims in Firebase Authentication Retrieve the expires_date from the REVENUECAT_CUSTOMERS_COLLECTION document and compare it to the current date and time.However, for the following reasons, I would like to avoid using the above methods:With only the RevenueCat SDK, it is not possible to verify whether a user with the same user ID has entitlements on another device. If using custom claims in Firebase Authentication, the data cannot be obtained through a stream (real-time monitoring is not possible). While expires_date needs to be compared to the current date and time, on mobile apps, the current time can be changed by modifyi
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
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.