We are currently experiencing an issue in accounting for the income obtained from the App Store. As stipulated in the Paid Agreement, the App Store is responsible for collecting and remitting VAT tax to the relevant tax authorities in Vietnam. We seek your assistance in addressing the following concerns:
Do we still need to remit VAT tax for the income deposited into our bank account?
If VAT tax remittance is not required for the income deposited into our bank account, how can we provide documentation to support this in our accounting records?
StoreKit
RSS for tagSupport in-app purchases and interactions with the App Store using StoreKit.
Post
Replies
Boosts
Views
Activity
Dear StoreKit Engineers,
I recently migrated my app to freemium model from paid and am using AppTransaction to get original purchase version and original purchase date to determine if user already paid for the app before or not. It seems to be working for normal AppStore users but I am now flooded with complains from VPP users who previously purchased the app. It seems AppTransaction history is absent for these users and these users are asked to sign-in using Apple ID.
What is the solution here?
I don't often get CONSUMPTION_REQUEST or indeed REFUND but when I do I receive the same CONSUMPTION_REQUEST 3 times, 8 hours apart, before I do get the REFUND notification several hours after the 3rd and final CONSUMPTION_REQUEST.
The response I get from the PUT of /inApps/v1/transactions/consumption/{transactionId} is 202 so I can only assume it was accepted and good.
Is the fact I received it 3 times an indication that it was poorly formatted or incorrect somehow?
Is there anyway to test the consumption PUT?
I've yet to see an in-app consumable that I received a CONSUMPTION_REQUEST for, that was 100% consumed, and wasn't REFUND_DECLINED.
They have all been refunded to date.
This makes me suspicious that I'm doing something wrong even though all the information I'm getting says otherwise?
User purchased the initial subscription and transmitted the relevant data to our server, where the receipt is stored for subscription validation.
As per the documentation, the "Original Transaction Identifier" is expected to be unique across all receipts in a chain of renewals for an auto-renewable subscription. Specifically, for subscription "S1," all auto-renewed receipts consistently share the same original transaction ID.
However, following several auto-renewals of the first subscription (User 1), information from Apple's response revealed details about a second subscription (S2), and remarkably, the second subscription (User 2) has the same original transaction ID as the first one.
Is there a potential connection with Apple's test environment? We currently lack any information or clues regarding the differentiation of accounts.
Webhook Request from App Store (iOS Payment Notification)
For Subscription (S1) - For User 1
{
"id": "***",
"auto_renew_adam_id": "***",
"auto_renew_product_id": "com.globalmed.loveeveryday.monthlysub",
"auto_renew_status": "true",
"unified_receipt": {
"id": "",
"environment": "",
"latest_receipt": "",
"latest_receipt_info": [ {
"id": "***",
"expires_date": "2024-01-19 05:47:24Etc\/GMT",
"expires_date_ms": "1705686444000",
"expires_date_pst": "***",
"in_app_ownership_type": "***",
"is_in_intro_offer_period": "***",
"is_trial_period": "true",
"is_upgraded": "false",
"offer_code_ref_name": "",
"original_purchase_date": "2023-05-19 03:54:26Etc\/GMT",
"original_purchase_date_ms": "",
"original_purchase_date_pst": "",
"original_transaction_id": "580000785864406",
"promotional_offer_id": "",
"product_id": "com.globalmed.loveeveryday.monthlysub",
"purchase_date": "2023-11-19 04:54:20Etc\/GMT",
"purchase_date_ms": "1700412860000",
"purchase_date_pst": "",
"quantity": "",
"subscription_group_identifier": "",
"transaction_id": "580001118634891",
"web_order_line_item_id": ""
}],
}
}
For Subscription (S2) for For User 2
{
"id": "***",
"auto_renew_adam_id": "***",
"auto_renew_product_id": "com.globalmed.loveeveryday.monthlysub",
"auto_renew_status": "true",
"unified_receipt": {
"id": "",
"environment": "",
"latest_receipt": "",
"latest_receipt_info": [ {
"id": "***",
"expires_date": "2024-02-19 05:47:24Etc\/GMT",
"expires_date_ms": "1708364844000",
"expires_date_pst": "***",
"in_app_ownership_type": "***",
"is_in_intro_offer_period": "***",
"is_trial_period": "true",
"is_upgraded": "false",
"offer_code_ref_name": "",
"original_purchase_date": "2024-01-08 04:37:02Etc\/GMT",
"original_purchase_date_ms": "1704731822996",
"original_purchase_date_pst": "",
"original_transaction_id": "580000785864406",
"promotional_offer_id": "",
"product_id": "com.globalmed.loveeveryday.monthlysub",
"purchase_date": "2024-01-19 05:47:24Etc\/GMT",
"purchase_date_ms": "1705686444000" ,
"purchase_date_pst": "",
"quantity": "",
"subscription_group_identifier": "",
"transaction_id": "580001139103833",
"web_order_line_item_id": ""
}],
}
}
I've apple developer account, i already agreed all agreements, tax, and banking in appstore connect.
I'm trying to create an imessage app that support in app purchase, but I'm unable to find the In app purchase in the list of capabilities, in both the main target and MessageExtension target.
step to reproduce: new project -> imessage app -> choose MessageExtension target, try to add capability.
We have a cycling studio/ bike gym. We offer classes and you need a membership to reserve a class. This is very similar to a gym membership.
I just need to make sure how the payments will work.
According to the guideline 3.1.3(e) Goods and Services Outside of the App I think we can offer payments with a traditional credit card entry.
Is this so?
Because in the forum I found answers stating you need to use in-app-purchase.
I really need to make sure before beginning the app development.
Thank you.
We are implementing offer code with subscription. I am wondering if we can redeem an offer code over another offer code? Let's say i have offer code "SUMMER24" and redeemed that code for monthly renewable subscription and if i am going to apply again another offer code "WINTER24" with monthly renewable subscription. Is it possible to do so? And if yes then presentCodeRedemptionSheet is not giving receipt for "WINTER24" code.
I'm getting really frustrated with emails from my App users who believe they've been charged for a free in-app purchase when they haven't.
My App offers many in-app purchases of digital items and I give 4 of these away for free to let users get comfortable with how it works in-app.
Over the last couple of years I've had a steady increase in angry emails from users who accuse me of fraud by charging them for a free item. I couldn't figure out for a while what this was as they would leave a 1 star rating, delete the app and ignore my emails for more information.
Recently I had someone a bit more patient engage and explain it to me.
The purchase for some reason popped up on my notifications right when I bought the [Free Item in my app]. It was from a movie I bought and the bill was delayed.
The timing of that notification is what is misleading users about the free in-app purchase.
Can someone take note of this please and perhaps delay any payment notifications so they aren't sent when the in-app purchase is for FREE?
Thanks!
Hi, we are thinking of having monthly/yearly subscription for a financial product that offers a account and card. As this relates to an account fee and the fee will be debited directly from the other accounts the bank customer already has with us will there be a commission charge from apple?
According to the documentation: https://developer.apple.com/documentation/storekit/transaction/3749696-id
Transaction.id is a unique identifier. However, something that is not clear to me is:
Is the ID unique worldwide? In other words, will there never be any other transaction with the same ID?
Or is it unique only within the context of my app?
Thanks!
I'm getting multiple times rejections for the same reason:
Regarding 3.1.1, the subscription can be purchased in the app using payment mechanisms other than in-app purchase.
To resolve this issue, it would be appropriate to subscriptions included in or accessed by your app must be available for purchase using in-app purchase.
My app is providing subscription-based video content exclusively in Tunisia (already indicated in the App review process), this region does not support IAP (based on this https://support.apple.com/en-us/102775), It's not possible to make IAP work consequently and I'm forced to provide local payment methods through a webview, this is still rejected for the same reason: make it IAP compliant ..
I've also provided similar app in the same region providing alternative payments and not implementing IAP and these app are in the app store already.
Hello everyone,
I'm the developer of a small e-learning platform and (hopefully) soon an iOS app.
We developed a cross-platform app that offers paid online video courses and question trainers to learn and practice for the theoretical and practical exams for various German boating licenses.
We launched our service back in December 2023 on the web and on the Google Play store without any problems. The App Store on the other side presents us with major problems. Our app got refused so many times that I forgot to count, so that I'm seeking for a little bit of help from the community.
Apple's main problem with our app is that we're not offering options to purchase access to these courses within our app, but instead only offer them through our website.
In the submissions, Apple always rejects our app with the reason Guideline 3.1.1 - Business - Payments - In-App Purchase and writes:
Your app accesses digital content purchased outside the app, such as online courses, but that content isn't available to purchase using in-app purchase.
We understand that we have to comply with Apple's guidelines for the App Store, which includes providing an option to buy access to these courses within our app. To solve these problems they suggest:
The paid digital content, services, or subscriptions included in or accessed by your app must be available for purchase using in-app purchase.
Apps that offer paid digital services and content across multiple platforms may allow customers to access the content they acquired outside the app as long as it is also available for purchase using in-app purchase. See Guideline 3.1.3(b) Multiplatform Services for more information.
We understand all these rules, but our problem is, we cannot implement IAP because our service is not of a digital-only nature. Our packages for training for the boating licenses contain more than access to these video courses and question trainers. Our customers also get physical content like a welcome package containing nautical charts, drawing tools, a compass and ropes for training knots. Moreover, our service includes practical boating lessons on-site at a partner boating school with 1:1 instructions.
We have tried to explain that our business model consists of a physical and digital unit whose components cannot be sold separately. We wrote in our conversation with Apple:
It is important to note that our services are sold as a complete bundle. Customers cannot purchase individual components such as the 1:1 sessions, physical materials, practical lessons, or digital content separately. This integrated approach is crucial to the efficacy and educational integrity of our program.
Apple always wants us to implement IAPs, obviously not understanding our business model. Wouldn't it be against the guidelines if we offer IAPs that provide access to the courses, but also send physical packages? Our understanding of the guidelines for IAPs is, they are only allowed for digital content inside the app like consumables, subscriptions and full access, but not for physical goods.
We asked if we could publish our app when implementing "purchase methods other than in-app purchase to collect those payments, such as Apple Pay or traditional credit card entry" as cited in § 3.1.3(e) "Goods and Services Outside of the App". But they ignored these issues and continued to ask us to implement IAP.
We then reached out to Apple providing us help on how to implement IAPs with physical goods. For example we would need to link an IAP to an account within our system and collect user data like name and address to send the physical content to. They did not provide us information on how to to this (as we haven't seen any apps out there on the App Store doing similar things) and if that would be allowed at all.
We wrote:
However, this leads us to a significant operational predicament. The in-app purchase system does not provide us with crucial customer information, specifically billing addresses, which are vital for us to deliver the physical components of our service. This gap in the process is not just an inconvenience; it is a critical flaw that hampers our ability to fulfill our commitments to our customers.
We require your immediate assistance and a practical solution to this problem. How can we gather the necessary shipping details within the constraints of your platform? This isn't just a minor detail; it's a fundamental requirement for our business to operate effectively.
Your prompt attention to this matter and a workable solution would be appreciated, as it is essential for us to continue offering our service on the App Store.
Has anyone experienced similar problems and knows how to deal with them?
Do you have any general suggestions on how we could solve the problems described?
Does Apple not understand our business model correctly or do we not understand Apple's guidelines correctly?
We would be very grateful for any help, as we are at our wit's end.
Got a question that I can't seem to find a conrete answer on.
If I have an app selling ebooks, and a website also selling the same ebooks, can users who purchase the ebooks on my website then view them for free in the app?
I have apple web payment integrated on website, and it work fine when i test it using real cards. I wanted to test it using apple TEST cards, so i invited SANDBOX test user from here https://appstoreconnect.apple.com/access/users/sandbox and logged in to test device using this test id. but it fails to start a merchant session.
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream.
at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Net.Http.HttpClient.d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Gateway.MobileWallet.Domain.ApplePay.Clients.RequestPaymentSession.ApplePayPaymentSessionClient.d__3.MoveNext() in
Hi Everyone,
my company developed an App for back pain. The app is designed for patients (end users) that can use it to do excercises to get some relief. Patients can purchase extra-exercises or services.
I want to explore the possibility that third parties (eg. Hospitals, Gyms, Assurances) can purchase the extra-contents on behalf of patients.
I know there is VPP but it is only for paid apps not for free apps with in-app purchase.
There is a way to give credit or voucher spendable only for my app?
any other suggestion?
I thank anyone who can help me
Hi, some day ago I got these webhook events for a subscription:
2024-01-06 10:40:47 SUBSCRIBED subtype INITIAL_BUY
2024-01-20 03:02:29 DID_RENEW subtype BILLING_RECOVERY
2024-01-20 03:52:08 DID_CHANGE_RENEWAL_STATUS subtype AUTO_RENEW_DISABLED
2024-01-20 10:41:03 DID_FAIL_TO_RENEW (no subtype was received)
When I get the subscription status form appstore server API, status is 1 (active). We don't have grace period enabled in our app. I'm not sure how to interpret this result; from our perspective we should remove access to the user.
Enviloment : TestFlight
AppleAccount : sandbox
The problem that is happening :
Unable to get receipt with storeKit.requestReceipt
Prerequisite :
The form to input ID and password is displayed even if the user is already logged in to AppleAccount (not displayed when normal).
The same operation is not reproduced by using the sandbox during debug builds.
- (void)requestReceiptWithBlocks:(ReceiptCallback)callback
{
self.receiptCallback = callback;
SKReceiptRefreshRequest *receiptRequest = [[SKReceiptRefreshRequest alloc] init];
receiptRequest.delegate = self;
/** When start() is executed, iOS displays the "Sign in to iTunes Store" dialog if you are not yet logged in to the iTunes Store */
[receiptRequest start];
}
storeKit.requestReceipt { success, receipt in
guard success, receipt != nil else {
if success {
// receipt nil
} else {
// requestReceipt failed
}
}
}
Does anyone know why the receipt would be in a state where it cannot be retrieved?
Thank you.
Hi everyone, we are trying to incorporate a usage-based payment system in our app, quite similar to how AWS charges users. It would ideally be a monthly recurring payment, but the amount charged would vary by user and by month.
Looks like we can't do this through in-app payments, so what is the best way to do this?
If we incorporate an external payment method like Stripe, would that be an issue during the app review process? We just can't seem to find a way to execute this through in-app purchase, and must go with another method. We would really appreciate an advice or past experience!
ERROR: 💰 Product purchase for '***' failed with error: Error Domain=RevenueCat.ErrorCode Code=2 "There was a problem with the App Store." UserInfo={source_file=RevenueCat/SKError+Extensions.swift:64, NSUnderlyingError=0x600000c91890 {Error Domain=SKErrorDomain Code=0 "An unknown error occurred" UserInfo={NSLocalizedDescription=An unknown error occurred, NSUnderlyingError=0x600000c68570 {Error Domain=ASDServerErrorDomain Code=1003 "No Token Available When Expected." UserInfo={NSLocalizedFailureReason=No Token Available When Expected.}}}}, readable_error_code=STORE_PROBLEM, NSLocalizedDescription=There was a problem with the App Store., source_function=asPurchasesError}
And, I have also tested with SwiftyStoreKit and encountered the same issue.
Description:
I am facing an issue with the in_app_purchase Flutter package, which is the official package for handling in-app purchases. After successfully making a purchase on iOS, the 'Purchased' stream is not firing as expected.
Steps to Reproduce:
Request a purchase by buying a consumable or non-consumable product.
Enter necessary credentials if required (e.g., email, password).
Click on Sign In.
Expected Results:
The 'Purchased' stream should fire after a successful purchase on iOS.
Actual Result:
The 'Purchased' stream is not firing after a successful purchase on iOS.
Bottom sheet to purchase the product is popping up again after the purchase is complete.
Environment:
Flutter version: 3.16.8 on channel stable
Package version: in_app_purchase 3.1.11
Operating System: iOS 17.2