I’m writing to understand how taxes are applied to our subscription revenue and to clarify a potential issue we’re facing.
For a ₹299 subscription:
Apple deducts a 30% commission, leaving us with ₹209.30.
After that, an additional tax of approximately 18% (₹36.11) is deducted by Apple, which reduces the amount further.
When we receive this ₹173.19 in our bank, we are required to pay 18% GST again on this amount in India.
This appears to result in us paying tax twice. Could you clarify why 18% tax is deducted by Apple, and if we are not required to pay it again, where can we see this adjustment on the GST portal?
In-App Purchase
RSS for tagOffer extra content, digital goods, and features directly within your app using in-app purchases.
Posts under In-App Purchase tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
In my app, book club owners can charge users to join their clubs. My platform ( company ) takes an application fee, while the club owners receive a service fee from these transactions. I have one to many live discussions, in the future I will add sell ticket feature. Can I use Stripe for these B2B transactions, or am I required to process these through Apple IAP?
If I am pushed to be use Apple IAP then how to split the user purchase between me and the club owners.
Regards.
Some paid users are unable to use the paid features unlocked by purchasing our subscription plan. It seems that this is due to StoreKit 2's Transaction.currentEntitlements not working the way we would expect it to work.
Are you also encountering this issue? Do you have any idea to improve this situation?
At launch, our app checks if the user is subscribed to the plan, using Transaction.currentEntitlements. As a result, the currentEntitlements array was empty.
Our app then fetches the products from StoreKit 2 using Product.products(for:). As a result, the Product.SubscriptionInfo.RenewalState value of the corresponding Product (product.subscription.status.first.state) is subscribed, which confirms that the user has indeed purchased our plan, but seems to contradict the absence of the corresponding transaction in Transaction.currentEntitlements.
Proactive in-app purchase restore and a restore purchase button calling the AppStore.sync() method are implemented, but using the button did not solve the issue.
Hello everyone,
I am encountering an issue with my Vision OS app "Travel Immersive" where it fails to load In-App Purchase (IAP) products in App Review version. The app works perfectly in the local Vision Pro environment which using StoreKit configuration, but when I submit it for App Review, it cannot load any IAP products.
Implementation Details:
We are using StoreKit 2 to load IAP products. Here is a summary of our implementation:
Product Identifiers: We define a set of product identifiers for the IAP products.
Loading Products: We use the Product.products(for:) method to load the products asynchronously.
Error Handling: We have implemented detailed error handling and logging to capture any issues during the product loading process.
Issue Description:
Upon launching the app, I receive an error indicating that no IAP products were loaded. Here are the details:
Environment: Sandbox
Network Connection: All tested URLs returned status code 200, indicating successful connections.
Additional Information:
The IAP products are currently in the "Waiting for review" status in App Store Connect.
I have verified that the product IDs in the code match those in App Store Connect.
The app's Bundle ID and Team ID are correctly configured.
I am using a valid sandbox test account.
Apple App Review Team's Next Step Suggestion:
The Apple review team provided the following suggestion:
"When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code 'Sandbox receipt used in production,' you should validate against the test environment instead."
My Understanding:
I believe this suggestion is not applicable to my current issue because the app is unable to load the IAP products in the first place, and therefore, we are not yet at the stage of handling receipts. Additionally, our app is a standalone client application and does not use a server architecture. The primary issue seems to be related to the IAP products not being loaded.
Questions:
Could the "Waiting for review" status of the IAP products be the reason why they are not loading in the App Review version?
Are there any additional steps I should take to ensure the IAP products load correctly in these versions?
Is there any other configuration or setting I might be missing?
Thank you for your assistance!
Hi team,
My app was rejected, and I believe there may be a misunderstanding regarding our business model. I have provided detailed explanations and examples of similar apps, but I continue to receive the following standard response:
“Regarding 3.1.1, the app still uses a paid key to unlock or enable paid content. To resolve this issue, it would be appropriate to remove these features from the app and any other feature that unlocks or enables functionality with mechanisms other than the App Store.”
I have submitted an appeal today, but I’d appreciate any advice in the meantime. It’s possible that I’m not communicating our business model clearly, and I wonder if there’s a better way to explain it to the Apple Review Team.
Our app is a universal Xray VPN Client. It does not contain paid content. The app is free and allows users to connect to any VPN provider or self-hosted VPN server using VLESS/XTLS/Xray technology. Users obtain VPN keys from third-party providers, which can be either free or paid. Our app simply allows users to input these keys to connect to the VPN servers. There are no purchases or features unlocked within the app itself—users acquire keys externally from VPN providers or by setting up their own VPN servers. In certain regions, keys may even be distributed offline via local providers.
Our app functions similarly to a web browser, where users input links (VPN keys) to access content. Many apps on the Apple Store operate in this same manner, such as:
Streisand: https://apps.apple.com/ru/app/streisand/id6450534064?l=en-GB
V2Box: https://apps.apple.com/ru/app/v2box-v2ray-client/id6446814690?l=en-GB
ShadowRocket: https://apps.apple.com/ru/app/shadowrocket/id932747118?l=en-GB
V2RayTUN: https://apps.apple.com/ru/app/v2raytun/id6476628951?l=en-GB
FoXRay: https://apps.apple.com/ru/app/foxray/id6448898396?l=en-GB
V2RayU: https://apps.apple.com/ru/app/v2rayu-vm/id1622785357?l=en-GB
NpV Tunnel: https://apps.apple.com/ru/app/npv-tunnel/id1629465476?l=en-GB
Potatso: https://apps.apple.com/ru/app/potatso/id1239860606?l=en-GB
Fair VPN: https://apps.apple.com/ru/app/fair-vpn/id1533873488?l=en-GB
And many others.
I’m feeling stuck :( If anyone has suggestions or can point me to a specific clause in the Review Guidelines that could help, I would be really grateful!
Hi,
I have implemented support for promo codes using StoreKit’s built-in SubscriptionStoreView and have created subscription promo codes in App Store Connect.
When pressing the “Redeem Code” button in the SubscriptionStoreView, the “redeem code view” is presented. However, when trying to redeem a code using a released version of the app (downloaded from the App Store), I receive an error message saying the code cannot be redeemed.
Does anyone know why this might be happening?
We are using method “Transaction.latest(for: productId)” to verify the transaction .
Steps to reproduce :
Step 1 : User made purchase for productId “product_id_one”
Step 2 : “paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])” api returns successful purchase for product_id_one .
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
let mProductId = transaction.payment.productIdentifier
Print(mProductId) // product_id_one
..
Step 3: Call “Transaction.latest(for: product_id_one)” api .
guard let verificationResult = await Transaction.latest(for: productId) else {
// Here some times its returning nil for valid transaction
return
}
switch verificationResult {
case .verified(let transaction):
// at time its working fine . we are getting verified purchase .
// Check the transaction and give the customer access to purchased
case .unverified(let transaction, let verificationError):
// Here some times its returning unverified for valid transaction
}
Issue :
For valid purchase , Sometimes Transaction.latest(for: productId) api is returning nil and unverified transaction . This is intermittent issue.
I've run into Guideline 3.1.1 in an app which I want to have as a one-time purchase, bring your own key, AI app.
Pay once for the app.
Insert your OpenAI/Claude key.
Do stuff with AI.
I have run into Guideline 3.1.1
Does anyone have any example of having an intention similar to what I had above and how you successfully reworked your business model to comply with 3.1.1?
Guideline 3.1.1 - Business - Payments - In-App Purchase
The app unlocks or enables additional functionality with mechanisms other than in-app purchase, which is not appropriate.
Specifically, the app uses API keys to unlock or enable functionality.
Next Steps
It would be appropriate to remove these features from the app and any other feature that unlocks or enables functionality with mechanisms other than the App Store.
You may also consider making this unlocked content available to your users as in-app purchases.
Hello,
I'm trying to clear the purchase history made with a sandbox Apple ID on my test device but it does not work. The past purchases are still returned by StoreKit. I've waited many hours but it seems to persist.
When I use for await result in Transaction.currentEntitlements { in my app, my non-consumable product is still here.
Is it expected?
How long should it take to reset the history?
Is is supposed to work also for non-consumable products?
Thanks
Axel
Hi everyone,
I'm currently working on testing in-app purchases for my app, and I'm having issues with logging into a sandbox account on my iPhone.
Here's the situation:
I created a sandbox account via App Store Connect.
I signed out of my regular Apple ID from the App Store and attempted to log in with my sandbox account during an in-app purchase.
I receive a verification code on my phone, and it seems like the login is working. However, after entering the code, I keep getting redirected back to the "Sign in with Apple Account" screen. It doesn’t fully log me in.
I’ve tried resetting network settings, restarting the device, and even creating a new sandbox account, but nothing seems to work.
I'm running the app through Expo prebuild and attempting to test purchases, but without being able to log into the sandbox environment, I can’t move forward.
Has anyone encountered this issue before or know how to fix it? Any help would be greatly appreciated!
Thanks!
In what cases does the transaction in the 'signedTransactions' property array respond with more than one transaction?
Is it the case that the in-app purchase product type is 'Auto-Renewable Subscription'?
https://developer.apple.com/documentation/appstoreserverapi/look_up_order_id
https://developer.apple.com/documentation/appstoreserverapi/orderlookupresponse
After successfully passing the review for version 1.0, I was consistently rejected after updating to version 1.0.1 with 4.3 (a). However, I only added some paid products to the original features, and did not make any changes to the layout or UI design. Why do you keep rejecting me.
Multiline
BlockQuote
hello,
Thank you for your message.
Regarding Guideline 4.3(a), we continue to notice that your app shares a similar binary, metadata, and/or concept as apps submitted to the App Store by other developers, with only minor differences.
Some factors that contribute to a spam rejection may include:
Submitting an app with the same source code or assets as other apps already submitted to the App Store
Creating and submitting multiple similar apps using a repackaged app template
Purchasing an app template with problematic code from a third party
Submitting several similar apps across multiple accounts
We hope that you will make the appropriate changes to your app to bring it into compliance with the App Store Review Guidelines and resubmit your app for review.
Best regards,
I recently submitted an App update, but it was rejected several times, because the free 3-day trial of the subscription product was not displayed, but the app interface advertised the free trial.
At present, this subscription product has been approved by AppStore. Previous versions have 3 days of free promotional information appeared.
This version was rejected after the update, after local testing found that even if we use the new sandbox test account test, always can not get free 3-day discount information. I then tested other apps that had already been developed and were unable to get the 3-day free offer.
However, my application update this time did not change the code logic related to in-app purchase, but the experience optimization of other functions.
I guess it is because of the new product conference of Apple on September 10th, and whether Apple's policies and systems have been updated?
Since this pop-up interface is StoreKit pop-up, the developer can not do anything about it.
I wonder if anyone else has had the same problem as me?
I hope relevant developers or technicians can provide technical help, thank you very much!
I recently submitted an App update, but it was rejected several times, because the free 3-day trial of the subscription product was not displayed, but the app interface advertised the free trial.
At present, this subscription product has been approved by AppStore. Previous versions have 3 days of free promotional information appeared.
This version was rejected after the update, after local testing found that even if we use the new sandbox test account test, always can not get free 3-day discount information. I then tested other apps that had already been developed and were unable to get the 3-day free offer.
However, my application update this time did not change the code logic related to in-app purchase, but the experience optimization of other functions.
I guess it is because of the new product conference of Apple on September 10th, and whether Apple's policies and systems have been updated?
Since this pop-up interface is StoreKit pop-up, the developer can not do anything about it.
I wonder if anyone else has had the same problem as me?
I hope relevant developers or technicians can provide technical help, thank you very much!
Hello there,
I understand that the "transaction_id" key is always unique whenever any transaction happens, whether it occurs due to auto-renewal of a subscription.
The "original_transaction_id" always remains the same across all transactions of a single subscription. But why does it stay the same when the subscription expires or is canceled, and we purchase the same subscription again with the same Apple account? Why does the "original_transaction_id" stay the same?
The reason I'm concerned is this: let's consider a situation where User1 purchases a subscription, and then their subscription is canceled or expires. Then User2, using the same Apple account, purchases the same type of subscription, and we get the same "original_transaction_id" for User2 as well. In this case, User1’s receipt also gets updated with the latest "expires_date_ms," which can cause one subscription to benefit two users.
I hope I explained my query correctly.
Regards,
Shivam
Hello,
Our project did not approve because of the in-app purchase did not work, i need help! (Guideline 2.1 - Performance - App Completeness)
We've done it several times in TestFlight and sorry the in-app purchase connection doesn't work, before getting the final output the in-app purchase debugging is done correctly in editor unity, i wanted to make sure before testing the in-app purchase whether the bank account form Should it be approved?
Because of the bank account form, I could not find the code and branch, so I sent a ticket to financial support and sent the bank documents and I am waiting for the answer.
Regards,
Hi, My account is a fee-waived account. I need to sign the Paid App Agreement for in-app purchases. But it doesn't appear in the agreements section. Not only that, it doesn't appear in the area where I enter my bank account information. Does anyone have any information?
We recently submitted an update to an existing app that already has an in app purchase for an annual subscription which works perfectly fine. However, the update has been rejected 5 times by Apple stating the in app purchase does not work. We have not made any changes to the update regarding the in app purchase AND the in app purchase works perfectly fine on device testing AND in flight test.
Can some one please help? Anyone know what is going on?
Dear Apple Development Team,
I would like to draw attention to certain aspects of working with Server Notifications for In-App Purchases that could be improved to enhance development convenience and API efficiency.
1. Lack of Information on Non-Consumable Purchases in Server Notifications
Currently, Server Notifications do not provide information about non-consumable purchases. This creates certain inconveniences when validating such purchases on the server. It would be extremely useful to have the ability to verify non-consumable purchases in the same way as subscriptions.
Moreover, there is currently no way to obtain information about the amounts paid for non-consumable purchases, even with additional API requests. This limitation significantly complicates financial reporting and analytics for apps that utilize non-consumable purchases. While we can obtain information about the amount paid by the user for a subscription, we have no equivalent capability for non-consumable purchases.
Adding this information to Server Notifications or providing an API endpoint to retrieve it would greatly improve our ability to track and analyze non-consumable purchase data without relying on client-side reporting.
2. Inconsistency in Token and Signature Handling
There is some inconsistency in the approaches to authentication and verification between various Apple APIs. For example:
When using Sign In with Apple, the approach with keyid is applied for JWT verification.
In Server Notifications for In-App Purchases, certificate information is repeatedly duplicated in each notification.
This leads to the need to implement different methods of JWT verification depending on the API being used. Additionally, the current approach with Server Notifications results in data redundancy: the useful payload is about 1.5 KB, while repetitive certificate information takes up about 17 KB in each notification.
Unifying authentication and verification approaches across different APIs could significantly simplify development and improve data processing efficiency.
We would appreciate consideration of these suggestions for API improvement. This could substantially simplify developers' work and increase the efficiency of integrating Apple services into applications.
Thank you for your attention to this matter.
Hey everyone 👋
I am wondering how to create a dynamic multiple subscriptions in the same app
scenario -> the app has multiple creators [Streamer] and user can subscribe monthly to each one as a separate subscription.
how to develop this approach using in-app purchases?
thanks