Discussion and help from anything related to RevenueCat.
Recently active
When testing purchases on Sandbox with StoreKit config specifying a 30 second subscription interval I quite often get an entitlement that has equal latestPurchaseDate and expirationDate therefore rendering it invalid immediately and deadlocking my purchase flow. Logica::Store::update_state: entitlements: ["base_content_access": <EntitlementInfo: "identifier=base_content_access,isActive=false,willRenew=true,periodType=PeriodType(rawValue: 1),latestPurchaseDate=Optional(2022-05-21 13:58:39 +0000),originalPurchaseDate=Optional(2022-05-21 13:58:39 +0000),expirationDate=Optional(2022-05-21 13:58:39 +0000),store=Store(rawValue: 0),productIdentifier=fivesysdev.logica.renewable_subscription,isSandbox=true,unsubscribeDetectedAt=nil,billingIssueDetectedAt=nil,ownershipType=PurchaseOwnershipType(rawValue: 0)>]Sometimes happen for 5 minute intervals too, but significantly less often. I was fine with this but Apple rejected my app, most probably due to them testing my app on sandbox with low
Hi there,We have started seeing a really weird issue on our production app since about mid April where sometimes the offering data is returning 7 under the introPrice.periodNumberOfUnits value for ios. As far as I understand it is impossible to get a 7 for this value from the app store because Apple only offer certain distinct introductory offers as shown in the screenshot I sent. Currently for the product being displayed it should be a 1 week free trial and some of the time it is returning 1 as expected but sometimes it returns 7. This started happening after no changes on our side suddenly about in the middle of April (according to our data). I was wondering if your team has been making any changes around this as we just dispplay the value that we get from Revenuecat SDK, we don’t fiddle with it or hardcode any values.Thanks,Lyia
Steps:User A logged in with App User Id A. User A make purchase and a transaction created against user Id A on revenue cat. User A logged out from the app. User B logged in to the same app with the User Id B. User B make purchase and a transaction created against user Id B, But User A’s transaction app user Id updated to B.My issue is I want both the transactions with separate App User Id and to updated with latest one.Where and What I am missing here? Is there any configuration I need to do?
Hi, I'm testing in the Play Store sandbox environment.When I receive a BILLING_ISSUE webhook, its expires_date and grace_period_expires_date is 2 weeks later. (The grace period is set to 2 weeks on on the Play Store)However, I receive an EXPIRATION webhook 15 minutes after BILLING_ISSUE. Is this a sandbox specific issue? Or am I configured incorrectly?I want to receive the webhook after the end of the grace period. Thanks
Hi. There are other posts about transferring apps, but they don’t have enough details and don’t answer my questions.I’m going to transfer my app to another App Store account and I’ll have access to it as a developer or even as an Admin. When should be a new App Specific Shared Secret created? How can I update the Shared Secret? What else should I do?Could you provide me with step by step guide? Thank you.
Hi,A quick question.I’m using RevenueCat with the sandbox user. I have two same-level subscriptions, one is monthly and the other one is annual. I added them into one entitlement. When I try to purchase each of them separately, everything works as expected. But the issue is, I subscribe to the annual plan, after that I try to subscribe to the monthly plan, and its purchases monthly without any alert, like I have not subscribed to the annual plan. I’m expecting the alert which says, “Do you want to modify your subscription to monthly, and it will begin and you will be charged after x date...”. This alert pops up when I try with the StoreKit, but not popping up with the RevenueCat. Is this normal, will it work when it is in production? My app is v1.0 and has not been accepted yet.My purchase function like;Purchases.shared.purchasePackage(package) { transaction, info, error, userCancelled in …Any idea?Thank you.
Hiya, I’m looking to add trials to my existing in-app subscriptions, but had some questions regarding the webhook events. I noticed that when starting a trial in the sandbox, the INITIAL_PURCHASE event is triggered, which is great. I was wondering:If the user continues with the trial and the trial automatically converts to a paying subscription, is another webhook event sent? We have a trial status against users on our API, so we would be looking to update this status based on the data that comes from the webhook. Would the RENEWAL event be sent here? If the user cancels the trial, am I correct in saying the the CANCELLATION webhook event is triggered?Thanks in advance,Joe
Hello,We have set up our apps perfectly with RevenueCat and are currently testing in the SANDBOX mode.A customer purchases an in-app subscription from the app andAfter sometime cancels it directly from the app store / play store. Re-subscribes it directly it from the appstore.In both the cases revenue cat is informed by S2S notifications but still these events are not updated in revenue cat.Are we missing something? How do we do this??
What happens if my app exceeds $10k MTR in a month on the Free plan, and miss to upgrade to the Starter or Pro plan after period . the IAP feature will still work?
Hello,I have a question.What is the difference between ‘total revenue’ and ‘proceeds’ in the revue chart?Why are there so many differences between the two? Thank you.
My react native app has been in production for over a year. Without submitting a new release, payments are failing on Android. This should mean that the issue is either on your side (RevenueCat) or Google Play. Already lost 40% off my subscribers in a couple of days. I haven’t changed anything, however this suddenly came up in development:“[Error: There was a credentials issue. Check the underlying error for more details.]”Doesn’t say anything more detailed than this. On Android payments go through, however, then there is no active subscriptions to be found when requesting in from the SDK.No issues on iOS. Would be great to sort this out ASAP, loosing subscribers as we speak:/
Hi all, I could not find much information regarding syncPurchases in SwiftUI.I am releasing a big upgrade to my app and have changed my RC SDK from V3 to V4 to take advantage of StoreKit2To make the transition smooth I wish to sync my users purchases and am doing so via my AppNameApp.swift file .onAppear method.is calling Purchases.shared.syncPurchases {} on the first launch of my upgraded version sufficient for this? Thanks so much
When I test the /subscribers/{app_user_id} endpoint on the API reference page using my public key, I get a 200 response.However, when I run the same code from my Node cloud function, I consistently get back a 401.Any ideas as to why this is?
I noticed that even on a device running iOS15, Purchases.showManageSubscriptions() loads the subscriptions UI via Safari rather than a native action sheet. This seems to be because we have: SystemInfo.appleSubscriptionsURL = URL(string: "https://rev.cat/manage-apple-subscription")This url never passes the isAppleSubscription() test, therefore we always fallback to the openURL() method.Is this by design?
We are migrating from sdk v3.x for android (java).The isBillingSupported method is not marked as deprecated in the new sdk, it is just gone. What is the replacement for this functionality? from v3.1Purchases.isBillingSupported(this, new com.revenuecat.purchases.interfaces.Callback<Boolean>() { @Override public void onReceived(Boolean isSupported) { if (isSupported) { // Billing Services are available queryStoreInventory(); } else { openPurchasingOffDialog(); } } });
I just noticed the new docs have: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.This is a fairly major change, since my app has a complex init sequence. It would be helpful to know more about what's going on here, so that I can correctly adjust my init sequence.I have read about the unavailability of the KeyChain during prewarming, but what exactly is requiring this change?
Error 404 When I try to access the sample using android java
I’m submitting an update that add subscriptions. We offer full price, and sale price. A user only sees 1 at a time, controlled by our logic. So when Apple tests, they will only see full price.Do you have any advice how to get Apple to approve? I’m concerned that they will reject the subscription at the sale price that they won’t be able to see in the app. (This is an app that already has many approved IAPs.)Do I need to submit with 1 of the subscription IAPs, get approval, and then submit again with the other subscription IAP? (I can control server side which price point they see.)thanksMark J
Hello RevenueCat community!I work in a company where we are integrating RevenueCat in our React Native application. I have a scenario where a user are able to buy a monthly subscription, but also several products. At the moment a user adds items (can be consumables or subscriptions) in a cart and then does a checkout. This flow results in us looping over all items in the cart and using PurchasePackage(package) for each individual item in the cart, this flow causes one popup (on iOS) per item which in a UX world is quite annoying. My question is: Is there a way to do some kind of a bulk purchase so that the user only has to accept on the pop-up once instead of “times equal to products in cart”?Best regards,Emanuel
I’m building an iOS app with a backend providing user accounts. Not sure what the best practice to integrate it. Each user is supposed to have an active subscription (with a free trial in the beginning). I set this up in App Store Connect. The backend includes a webhook that is triggered by RevenueCat. When anything happens, I refresh the latest customer info and update the User table. In the iOS app, I use the RC API to retrieve the customer info and active subscriptions. I set the Transfer behavior to Block to make sure one subscription is good for one user account only. Whenever the user logs in, I updated the RC id with the proper user id. Do I miss something? How to properly handle Restore purchase?
We’ve recently started developing a React Native app and are now at the stage of looking to configure IAP and integrate RevenueCat. However we’re running into the following issue when building the app with react-native-purchases to our Google Play testing track via fastlane:Google Api Error: Invalid request - Release uses an old version of Google Play Billing.I’m aware this is likely to be a result of the recent update to version 5 which isn’t currently supported with RevenueCat, but is there a workaround for this in the meantime? Or is it only possible if the app already had subscriptions under version 4 of the billing library?
I’m running on a real device connected to Xcode, and I’m getting this error when first launching my app:Invalid Product Identifiers - ( "rw_beta_elite_19_1m_2w0", "rw_beta_elite_99_1y_2w0")2021-09-05 17:43:04.367091-0400 Rewire Beta[29316:9415860] [Purchases] - DEBUG: ℹ️ 2 completion handlers waiting on products2021-09-05 17:43:04.367210-0400 Rewire Beta[29316:9415594] [Purchases] - WARN: 🍎‼️ Could not find SKProduct for ( "rw_beta_elite_99_1y_2w0", "rw_beta_elite_19_1m_2w0")There is a problem with your configuration in App Store Connect. I’ve verified that my identifiers match up to what’s in App Store Connect:https://share.getcloudapp.com/04uxEz42 I’ve also verified API key is correct, iTunesConnect App-Specific Shared Secret is correct, etc. Made sure the in-app purchase capability it enabled in Xcode for my target. Any ideas?
How to check the status of a subscription suspended to block access to the application content because even when a subscription is suspended the right is still active. With the free plan.
I have a question about the StoreKit 2 isEligibleForIntroOffer behavior when testing with a sandbox user. On my iPhone I’m logged in with a sandbox user (via Settings > App Store > Sandbox Account) where I’ve cleared the purchase history via App Store Connect > Users.When I run my code on the device, the “StoreKit 1” way of determining if a user is eligible for a free trial for a renewable subscription (see “Determine Eligibility” section in Implementing Introductory Offers in Your App) works as expected. However, when I use the product.subscription.isEligibleForIntroOffer or Product.SubscriptionInfo.isEligibleForIntroOffer(for:) function with StoreKit 2, they both return false, even though this should be true since the receipt has been cleared. I was wondering if anyone has come across this too when testing with a Sandbox User...where isEligibleForIntroOffer doesn’t return the correct value.Code-wise, I’m using very similar logic found in RevenueCat’s project: TrialOrIntroPr
Hello, I have a case that I can’t seem to handle. Currently, if User1 with an alias logs in to the application from a device and buys a subscription he will get it just fine. Next, User1 does a logout and User2 will login on the same device and then something strange happens. The subscription is being transfered from User1 to User2. Is there any way to avoid that and link a subscription to the User ID alias?Also, is there any way to get a purchaseinfo by alias? 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.