I don't know what caused this. Just happened yesterday. Alert From Sentry Exception CoreFoundation 0x216ea527c __exceptionPreprocess libobjc.A 0x21607f9f4 objc_exception_throw CoreFoundation 0x216e1ece4 _CFThrowFormattedException CoreFoundation 0x216d99d5c -[__NSDictionaryM setObject:forKeyedSubscript:] NSInvalidArgumentException: None File "/Users/myice92/Documents/xcode projects/ProjectName/Pods/Purchases/Purchases/Public/RCPurchases.m", line 464, in -[RCPurchases purchaseProduct:withPayment:completion:] File "/Users/myice92/Documents/xcode projects/ProjectName/Pods/Purchases/Purchases/Public/RCPurchases.m", line 436, in -[RCPurchases makePurchase:withCompletionBlock:] File "/Users/myice92/Documents/xcode projects/ProjectName/Project/UpgradePurchaseViewController.m", line 506, in -[UpgradePurchaseViewController buy:] File "/Users/myice92/Documents/xcode projects/ProjectName/Project/main.m", line 14, in main ... (23 additional frame(s) were not displayed) device = iPhone10,5 device.family = iOS handled = no level = fatal mechanism = nsexception os = iOS 12.3.2 os.name = iOS os.rooted = no dist = 1.060 Best regards,
Posted by Apikrit Panichevaluk 6 months ago
We are wondering about the differences of these events. From the docs: CANCELLATION: reason BILLING_ERROR Apple or Google could not charge the subscriber using their payment method. BILLING_ISSUE There has been a problem trying to charge the subscriber. This does not mean the subscription has expired. So how to deal with this? I guess cancellation stays a cancellation. But the Billing issue does not cancel the subscription. So is the BILLING_ISSUE just for information only? Are we supposed to pause the subscription? Also we received the following cancellation events in sequence (for the same user) CANCELLATION: UNSUBSCRIBE + CANCELLATION: BILLING_ERROR How can there be multiple cancellations? Should it be treated the same as BILLING_ISSUE + CANCELLATION: BILLING_ERROR ? Thanks in advance
Posted by Thomas Ranker 6 months ago
Hi everyone, We ran into a strange scenario where a customer did an in-app purchase through Google Play, but with a delayed charge. Google Play's Orders area shows status updates of "Payment Pending" and "Chargeable" at time stamps that are 4 minutes before the status of "Charged". We were relying on a successful callback from the purchase API call to upgrade the account in our database. From the customer's point of view, they got charged but they did not get upgraded through our app, and so we did a manual workaround in this case. Is this a vary common scenario of a delay of several minutes between customer payment and a successful charge? It happened with a UK-based customers. We're on the basic Revenue Cat plan... as we scale up volume, would you recommend using webhooks to deal with this type of situation? Thanks
Posted by Tom McLellan 6 months ago
Hi I am new to RevenueCat and finally making good progress on IAP. My question is; how do I recognise a purchase has been made / validated etc by RevenueCat? So after the purchase is made I want to transition the view or change the UI (eg buttons) to reflect this change. I have copied, pasted and adapted to my app the Cats tutorial for Swift and I now have working in app purchase method, the product is shown correctly, pricing etc and a receipt ID for the purchase is shown in the console and on RevenueCat dashboard, but I cannot change the view. This confuses me because the sample App Cats shows that this should be automatic, as it simply calls, self.showCatContent() which is a func which changes the view to the next view. But this doesn't work in sandbox. Any tips or ideas for what I am missing and how to make this work as shown? I have tried getting the receipt information to save to my dB but I can't find this available to do it this way. Thanks
Posted by James 6 months ago
Hi I wanted to find out how if it would be possible to verify user receipts. so for example I'm worried that someone sharing their login information for my app would give unwanted access to other users. I was considering using some features on my app/database to track the signed in users but apple requires that you let a user have access to the app on all devices that are connected to their Apple ID
Posted by deji 6 months ago
Hi! I am using RevenueCat in the Android beta version of my app with great success. Thank you for such a great product! For the Android app it was super easy since it had accounts and subscriptions from the start. Now it is time to add RevenueCat to iOS too and here it is a little more complicated since it started as a paid app, then was a free app with a one time in app purchase and now moving to subscriptions. I have the following rules for the purchase 1: IOS users that purchased the app when it was a paid app should remain unlocked on iOS by checking the originalpurchase version 2: IOS users that purchased the one time in app purchase should stay unlocked on iOS, and get a special offer if the switch to Android 3: Subscribers should be able to access premium featrues on both platforms if they are signed in If a user is not signed in the user is asigned an anonymous id. I use firebase authentication and followed your example with the auth state listener and resetting purchases when signing out. The problem I have is that it also removes the originalpurchase version from purchaser info, so if a user that has purchased the iOS or unlocked the one time in app purchase uses an account and then signs out, it will loose the in app purchases. As I see it there are two possible solutions. 1: If the singed in user had premium access, restore purchases after sign out is completed. 2: Keep the legacy in app receipt validation and use that to validate the paid/one time fees. Which one would you recommend? I'd love to go with 1 since it removes the need for having multiple restore variants. Are there any downsides I should be aware of?
Posted by Simon 6 months ago
https://www.revenuecat.com/2019/03/12/subscription-offers I followed the above url guide to get the signature for SKPaymentDiscount using python code. I got a signature and when I purchase with the signature it verifies in apple and returns with error SKErrorInvalidSignature. Have anybody got this error before ? Any idea what could be the reason ? I followed the steps correctly as given in the guide. Your help will be much appreciated.
Posted by Jaff 6 months ago
Hi, I am working on an iOS app and I integrated RevenueCat with Apple's In App Subscriptions. All works perfect except the fact that I would like to know when a subscription is cancelled. I'm implementing RCPurchasesDelegate's didReceiveUpdatedPurchaserInfo method in AppDelegate but it doesn't seem to be called at all. Am I missing something? Respectfully, Bogdan Nistor
Posted by Bogdan Nistor 6 months ago
Hi! The webhook docs says that it retries 5 times after failure with increasing delay. But it don't specify how long it will wait until the last try. In other words, I would like to know how long does my system has to recover before start losing events. Thanks!
Posted by Hugo Roque 6 months ago
Hi, Apple lists various scenarios for auto-renewable subscriptions like below Scenario 1. payment info not valid, renewal date lapses, Apple keeps trying renewal and renewal takes place after payment info update even after subscription had expired. There is a new expiry date now. Scenario 2. DID_CHANGE_RENEWAL_PREF where customer changed the plan that takes affect at the next subscription renewal Scenario 3. Cancellation by user Scenario 4. Renewal after expiration. (may be scenario of #1) Scenario 5. INTERACTIVE_RENEWAL where customer renewed after expiration So i wanted to know when will didReceiveUpdated delegate function be called for Scenario 1 - can i assume RevenueCat backend will keep waiting until receiving decisive status of renewal or abort from Apple? Or will delegate be called in-between too, if so what info will it have that i need to handle? Scenario 2 - Will i get update after new plan comes into effect or immediately? If immediately then looks like i will have to remember to activate new plan in my app? thanks Ashish
Posted by Ashish Naik 6 months ago
Hi, I tried to read the API reference and searched through the discussions but could not understand how to handle status changes such as renewal, cancellation, purchase from store or how to get hold of updated transaction. i read this thread and think SKPaymentTransaction, transaction id are available from API but unable to comprehend. https://docs.revenuecat.com/discuss/5b8f653009b18400039208db I am using iOS SDK. Do i have to other SDK also? Please help. Thanks Ashish
Posted by Ashish Naik 6 months ago
I know, I should have migrated months ago, but I haven't. IIRC there was a migration guide in the guides but I no longer see it in search results or in the document guides navigation. Going to 2.0 is a breaking change, no? If there are resources to help me know what I need to do it would be much appreciated.
Posted by Tim Wise 6 months ago
Hello. I am having a hard time figuring out what are the active subscriptions owned by the user after he/she has cancelled the subscription from Play Store. On app start, I get the active subscriptions in the callback to `Purchases.sharedInstance.getPurchseInfo(callback)` using `purchaseInfo.activeSubscriptions` Here are two scenarios where I am unsure if the received active subscriptions data is correct or not. Scenario 1: 1. I subscribe to a subscription 'X' which renews every month. (a test subscription renews every 5 minutes) 2. I immediately cancel the subscription from Play Store. 3. After 5 minutes the subscription expires. And is not visible on Play Store subscription tab anymore. But I still keep getting the cancelled subscription as an active subscription on my app start for a few minutes even after it has expired in the play store. Expected: The subscription shouldn't be active on the app once it is expired on the Play Store. Scenario 2: 1. I subscribe to a subscription 'X' which renews every month. (a test subscription renews every 5 minutes) 2. I immediately cancel the subscription from Play Store and do a fresh install of my app. 4. It's still not been 5 minutes and the subscription on Play Store has still not expired. But I do not see this active subscription on the app. Expected: The subscription should be active on the app since it has not expired yet on the Play Store. Android RevenueCat SDK version: 2.1.2
Posted by Jayesh Solanki 7 months ago
We have a situation where a user bought a free trial and opted out of free trial by cancelling (reason UNSUBSCRIBE) Immediately after that, another CANCELLATION webhook with reason BILLING_ERROR came in. Is this a bug or is it normal? If there is a billing error, will there be always multiple Cancellation hooks? Best Regards, Thomas
Posted by Thomas Ranker 7 months ago
Hey guys, Quick question: has anyone experienced this error message on Android when attempting to make an in-app purchase? When we first published our app, everything was working fine and users could make subscriptions. But something changed/broke (pretty sure it wasn't us but you never know). When invoking a subscription purchase on Android, a user is now presented with an error pop-up on the bottom of the screen that says "Error Something went wrong on our end. Please try again" with an OK button. [You can see a screen shot of it here](https://i.imgur.com/QpAQUbW.png?1) We have obviously tried again - no dice. And we are troubleshooting now with Google but still wanted to throw this out there in case anyone had any experience. Our iOS app works just fine and we have not made any RevenueCat config changes for quite some time.
Posted by sth admin 7 months ago
I've noticed that I only obtain this information after the purchase. But I can't seem to find how to obtain it during restoring/checking for active subscriptions
Posted by Tony Nguyen 7 months ago
If i buy a monthly subscription and it has a 7 day free trial period will expiration date take that into account? I.e. is the expiration date 5 weeks from the moment i purchased it or is it 4 weeks? Specifically from the method PurchaserInfo.expirationDate(forEntitlement: String) Thanks!
Posted by Tony Nguyen 7 months ago
We were trying to get a revoke/refund hook from apple, but they did not let us revoke our 3 month subscription. They say: "We've determined that your purchase does not meet the conditions for a refund." But we need to test that webhook. Any ideas on how to do that? Did anybody experience similar problems? PS: German law allows you to revoke anything within 14 days of purchase.
Posted by Thomas Ranker 7 months ago