Skip to main content

Hi Guys,

I am having an annoying issue in-app purchase payment with RevenueCat.

Purchase modal is properly displayed and I can always proceed with payment (). Problem is : about 4 times out of 10, the following callback is not called.

Purchases.shared.purchase(package: package) { {weak self] transaction, info, error, other in

Which means we cannot retrieve the transaction info or properly inform the user.

I am pretty confident the purchase worked, as the system displays a purchase confirmation an alert (see attached screenshot).

The following logs also suggest that both purchase and receipt were properly handled :

2023-01-11 19:08:23.124231+0100 XXXX4003:1210683] 3Purchases] - DEBUG: ℹ️ SKReceiptRefreshRequest started
2023-01-11 19:08:23.232600+0100 XXX14003:1206279] 0Purchases] - DEBUG: ℹ️ applicationDidBecomeActive
2023-01-11 19:08:23.675919+0100 XXX14003:1206279] <SKReceiptRefreshRequest: 0x28161e3e0>: Finished refreshing receipt with error: Error Domain=ASDErrorDomain Code=603 "Request throttled" UserInfo={NSLocalizedFailureReason=Unified receipt is valid and current, NSLocalizedDescription=Request throttled, AMSServerErrorCode=0}
2023-01-11 19:08:23.676101+0100 XXX04003:1206279] 3Purchases] - DEBUG: ℹ️ SKReceiptRefreshRequest finished
2023-01-11 19:08:23.676785+0100 XXX64003:1206279] [Purchases] - DEBUG: ℹ️ Loaded receipt from url file:///private/var/mobile/Containers/Data/Application/ZZZ/StoreKit/sandboxReceipt
2023-01-11 19:08:23.676934+0100 XXX:4003:1206279] Purchases] - DEBUG: ℹ️ Skipping products request for these products because they were already cached: y"YYY"]
2023-01-11 19:08:23.677362+0100 XXX94003:1206279] 0Purchases] - DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: sjbxHhdsP8hGMmlp38dzjlGJlfg2
2023-01-11 19:08:23.678806+0100 XXX14003:1210652] 8Purchases] - DEBUG: ℹ️ PostReceiptDataOperation: Started
2023-01-11 19:08:23.678962+0100 XXX-4003:1210652] .Purchases] - INFO: ℹ️ Parsing receipt
2023-01-11 19:08:23.681816+0100 XXX24003:1210652] 8Purchases] - INFO: ℹ️ Receipt parsed successfully
2023-01-11 19:08:23.682373+0100 XXXr4003:1210652] 1Purchases] - DEBUG: ℹ️ PostReceiptDataOperation: Posting receipt (note: the contents might not be up-to-date, but it will be refreshed with Apple's servers):
{
"opaque_value" : "GixbfjDCNh4lAsINHu6GHQ==",
"original_application_version" : "1.0",
"bundle_id" : "XXX",
"sha1_hash" : "zqAAieTWtQd3ZJZBjcgo8+LVfu8=",
"application_version" : "2",
"creation_date" : "2023-01-11T18:08:20Z",
"in_app_purchases" : 1
{
"product_id" : "YYY",
"quantity" : 1,
"transaction_id" : "2000000247660644",
"is_in_trial_period" : false,
"web_order_line_item_id" : 0,
"original_purchase_date" : "2023-01-11T18:08:19Z",
"original_transaction_id" : "2000000247660644",
"product_type" : 1,
"purchase_date" : "2023-01-11T18:08:19Z"
}
]
}
2023-01-11 19:08:23.682487+0100 XXX>4003:1210652] -Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request POST receipts
2023-01-11 19:08:23.684376+0100 XXXc4003:1210652] 3Purchases] - DEBUG: ℹ️ API request started: POST /v1/receipts
2023-01-11 19:08:24.387933+0100 XXX14003:1210652] >Purchases] - DEBUG: ℹ️ API request completed: POST /v1/receipts (200)
2023-01-11 19:08:24.402668+0100 XXXr4003:1210652] bPurchases] - DEBUG: ℹ️ PostReceiptDataOperation: Finished
2023-01-11 19:08:24.402900+0100 XXXp4003:1210652] hPurchases] - DEBUG: ℹ️ Serial request done: POST receipts, 0 requests left in the queue
2023-01-11 19:08:24.407313+0100 XXXe4003:1206279] ePurchases] - DEBUG: ℹ️ Sending updated CustomerInfo to delegate.
2023-01-11 19:08:24.407502+0100 XXX 4003:1206279] oPurchases] - INFO: 💰 Finishing transaction '2000000247660644' for product 'YYY'
2023-01-11 19:08:24.889837+0100 XXX04003:1210652] Purchases] - DEBUG: ℹ️ StoreKit1Wrapper (0x0000000283244600) removedTransaction: YYY 2000000247660644 1

I am using iOS 16.2, revenue cat version is 4.16.0 and usesStoreKit2IfAvailable is set to false.

I can reproduce the issue about about 4 times out of 10 on both Testflight and Xcode built version on my iPhone 13.

My app has been rejected about 5 times by Apple reviewers because of this. First I could not reproduce the bug the reviewer was reporting. I am suspecting this issue happens only with iOS 16.2 (I recently updated my device to try to reproduce).

I am also considering opening a ticket on Github for this.

Any help on this would be greatly appreciated, a work-around if exists would also make my day as I lost many many hours trying to solve this.

Thanks,

Hey There,

 

Hopefully I can help you out here!

 

Two quick things:

  1. Does testing with a new sandbox user help? Maybe the user has a ton of sandbox purchases that are slowing things down by making the history for this users receipt very long?
  2. Does StoreKitTest give you the same behavior? That mocks out Apple's entire StoreKit framework, so it helps to isolate issues in your app or RevenueCat. If your app works find using StoreKitTest then it indicates the issue may be on apple's end

Hi Michael,

Thanks for looking at our issue.

I was stuck for a while so I had to ship a new version of the app with StoreKit directly (instead of RevenueCat). I could not reproduce the issue after that.

The delay after the system alert “You’re all set.” went down dramatically (I guess because no receipt is uploaded).

I could be linked with the amount of Purchase for my user, however I still don’t get why it happened 6 times our of 10 with RevenueCat, and why the callback is not called at all.


Hey Yannis,

 

If your app seems to be working fine using StoreKitTest then it indicates the issue here may be on apple's end. 

 

This seems to be linked with the amount of purchases on that user, causing the receipt to be abnormally large and messing up the request. 

 

If you are still experiencing this issue, can you please open a support ticket with us so we can look more into it!


Since 2 months, I’m having the same issue. I got rejected like 10 times and I published my app without purchases. Still, I’m trying, I’m getting the same error again and again.

I built my app with flutter and using the sample codes. This is the error I’m getting: 
<SKReceiptRefreshRequest: 0x280ae4b20>: Finished refreshing receipt with error: Error Domain=ASDErrorDomain Code=603 "Request throttled" UserInfo={NSLocalizedDescription=Request throttled, NSLocalizedFailureReason=Unified receipt is valid and current}


Many of our users are experiencing this issue right now but are on restore purchase and still no response nor solution. I opened a ticket but it didn’t help. You can’t just say it’s on Apple’s end. If you make massive requests or if there’s a bug in the SDK, it’s on YOU, not Apple. My app was working fine for a long time, but after integrating RevenueCat SDK, the restore purchase requests were throttled by Apple. What’s going to be now? This post has been open for 1 year without a solution. And I’ve seen posts like this more on GitHub and other platforms. RevenueCat was never stable since I started to use it about 4 years ago. What a shame


We have started experiencing the same issue over the past couple of days with both the local .storekit file and the TestFlight build. Our application has been live since 2021 and has been functioning well until now, but we are now facing this problem.

We have also tried the following possible solution:
we added the purchases(_:receivedUpdated:) delegate method, but we are still encountering the same issue.

Please review the attached information and update us as soon as possible.

please check below attached information and please try to update us as soon as possible.
Pod version information - 4.40.0

Logs:
DEBUG: ℹ️ API request completed: POST '/v1/receipts' (200)

DEBUG: ℹ️ Sending updated CustomerInfo to delegate.

DEBUG: ℹ️ PostReceiptDataOperation: Finished

DEBUG: ℹ️ Detected active subscriptions changed. Clearing trial or intro eligibility cache.

DEBUG: ℹ️ Serial request done: POST /v1/receipts, 0 requests left in the queue

DEBUG: ℹ️ PostReceiptDataOperation: Started

INFO: ℹ️ Parsing receipt

DEBUG: ℹ️ PurchasedProductsFetcher: invalidating cache

<RCPurchases: 0x105d1e2b0> Purchase

$RCAnonymousID:ad5b848e5e0e4161b89d1549da2f45a9 info

Purchases synced successfully with RevenueCat

INFO: ℹ️ Receipt parsed successfully

DEBUG: ℹ️ PostReceiptDataOperation: Posting receipt (source: 'purchase') (note: the contents might not be up-to-date, but it will be refreshed with Apple's servers):

{"bundle_id”:”X","application_version":"11","opaque_value":"5t6\/cgUAAAA=","sha1_hash":"Kmwoue0c3rvlY615uPeBiHovlHY=","environment":"Xcode","expiration_date":"4001-01-01T00:00:00Z","in_app_purchases":"{"expires_date":"2024-10-25T12:58:46Z","quantity":1,"transaction_id":"0","product_type":-1,"purchase_date":"2024-10-18T12:58:46Z","product_id":"spa_2899_1y_1w0","is_in_intro_offer_period":true}],"creation_date":"2024-10-18T12:58:48Z"}

DEBUG: ℹ️ There are no requests currently running, starting request POST /v1/receipts

DEBUG: ℹ️ API request started: POST '/v1/receipts'

DEBUG: ℹ️ API request completed: POST '/v1/receipts' (200)

DEBUG: ℹ️ PostReceiptDataOperation: Finished

INFO: 💰 Finishing transaction '0' for product 'spa_2899_1y_1w0'

DEBUG: ℹ️ Serial request done: POST /v1/receipts, 0 requests left in the queue

 


@Doug McArthur I ended up restoring purchases via RevenueCat customer info


Reply