In-App Purchase

RSS for tag

Offer extra content, digital goods, and features directly within your app using in-app purchases.

Posts under In-App Purchase tag

200 Posts

Post

Replies

Boosts

Views

Activity

Purchase Intent does not work when app has been launched
I'm implementing PurchaseIntent.intents for App Store in-app purchase promotions, following Apple's WWDC guidance. The API only works on cold launch (killed→launch), but fails on background→foreground transitions, making App Store promotions unusable. Sample code as followed from WWDC23 video "What's new in StoreKit 2 and StoreKit Testing in Xcode". In the StoreKitManager observable class, I have this function which is initialized in a listening task: func listenForPurchaseIntent() -> Task<Void, Error> { return Task { [weak self] in for await purchase in PurchaseIntent.intents { guard let self else { continue } let product = purchase.product await self.purchaseProduct(product) } } } where purchaseProduct() will perform the call to: try await product.purchase() ISSUE: When the app is in background (after previously launched), and the purchase intent is initiated from Xcode Transaction Manager or using the "itms-services://?action=purchaseIntent" method, the system foregrounds my app but the purchase intent is never delivered to the waiting listener. The intent remains queued until the next cold launch (quit app and relaunch app). This could mean that if a user has installed the app, and has run the app, then tapped the promotional IAP from the App Store, the purchase intent will not show up until the next cold launch. If the app is in quit state, then the system will foreground the app, and purchase intent is delivered correctly. STEPS TO REPRODUCE Launch app (listener starts in StoreKitManager.init()) Background app Add purchase intent via Xcode Transaction Manager Foreground app Result: No purchase sheet appears, no intent delivered Workaround attempts: Using this either in a view or the main app: func checkForPurchaseIntents() async { for await purchaseIntent in PurchaseIntent.intents { await storeKit.purchaseProduct(purchaseIntent.product) } } Applied to .onChange(of: scenePhase) - Doesn't work, nothing happens. Using UIApplication.willEnterForegroundNotification - Only works on the first time the app goes from background to foreground when purchase intent is sent. Doesn't work on second time or third time. • Attempting to creating fresh listening task on each foreground - Does not work. The question is: How are we supposed to implement the PurchaseIntent API? I have checked Apple sample projects like BackyardBirds, and sample projects from WWDC on StoreKit 2 but they never implemented Purchase Intent.
3
1
124
14h
StoreKit 2 subscription: “Continue to Purchase” does nothing in App Review, works in TestFlight
Hi, I’ve been struggling for a while with an issue around an auto-renewable subscription using StoreKit 2 and I’d like to double-check here whether I’m missing something, or if anyone has seen similar behavior. Context • iOS / iPadOS app, first release • 1 auto-renewable subscription (only product in the app) • Using StoreKit 2 only (Product, Transaction, AppStore) • Review device according to the message: iPad Air 11” (M3), iPadOS 26.2 • I keep failing on Guideline 2.1 – App Completeness • The App Review message is always the same: “The In-App Purchase products in the app exhibited one or more bugs which create a poor user experience. Specifically, no action occurred when we tapped on the Continue to Purchase button.” In App Store Connect, the subscription is properly configured, is in the state Ready for Review, and is correctly associated with this app version. What I see (locally + TestFlight) In TestFlight and local builds, the behavior looks correct: • Product.products(for: […]) returns the product, the price and currency are displayed correctly on the paywall / subscription card. • The user taps “Get PRO” → my overlay is shown (“Preparing purchase…” → then a screen with confirmation and price). • After tapping the “Continue to Purchase” button in that overlay, I call await product.purchase(). • On my devices, the system StoreKit purchase sheet always appears. • In the sandbox logs I can see: • a successful result from purchase() • a verified transaction via VerificationResult • the “user has PRO” flag being set correctly after refreshing entitlements (Transaction.currentEntitlements + fallback Transaction.latest(for:)). I’ve tested this on multiple real devices and with several sandbox Apple IDs – I cannot reproduce the “nothing happens after tapping” problem. What App Review reports App Review repeatedly claims that “no action occurred when we tapped on the Continue to Purchase button.” From their screenshots and description, the flow is: 1. They open Settings → subscription card. 2. They see the loaded price, so the product has clearly been fetched successfully from the App Store. 3. They tap my “Get SalonFlow PRO” button. 4. My overlay appears with the subscription name and price. 5. They tap “Continue to Purchase” (in my UI this is “Pokračovat k nákupu”). 6. According to them, nothing happens – no system StoreKit confirmation, no error message, no visible action. Important: this overlay did not appear as an extra complication, but as a reaction to their earlier feedback: • Originally, I had a simple flow: button in the card → directly calling purchase(). • App Review at that time said that after tapping the button “nothing happens”. • I added the overlay specifically to make it obvious that the button does react and that the app is preparing the system purchase: I show the product, the price, and a text explaining that a system App Store confirmation will appear next. • Only from that overlay do I call purchase(). So: in their environment they obviously do reach the overlay (meaning the button definitely does “something”), but the actual StoreKit purchase sheet never shows up. Additional changes and “safety belts” From the App Review video it was clear they were tapping the purchase button roughly 3 seconds after launching the app. So I tightened the flow even more: • The “Get SalonFlow PRO” button is now: • disabled until the product has been loaded from the App Store, • visually dimmed, with a spinner and a short text like “Loading subscription information, please wait…”. • The button only becomes active once the product is actually loaded and ready. • After that, the user goes through a two-step process: 1. tap “Get SalonFlow PRO” → overlay with details, 2. tap “Continue to Purchase” → this is where I call purchase(). On my devices, after that step the system purchase confirmation always appears. But App Review still says that after tapping “Continue to Purchase” nothing happens. What I’d like to ask 1. Has anyone seen a situation where Product.purchase() with StoreKit 2 works fine in TestFlight and sandbox testing, but in the App Review environment the system purchase sheet never appears (no error, just “nothing”)? 2. Are there any known edge cases on iPad (iPadOS 26.2, iPad Air M3) where the StoreKit purchase sheet might fail to show even if: • AppStore.canMakePayments == true, • the product is valid and loaded, • and no error is thrown from purchase()? 3. Could App Review consider my two-step flow (button → overlay → confirm button calling purchase()) problematic in itself, even though the overlay is there precisely because of their initial complaint that “nothing happens” after tapping the button? 4. Is there anything concrete you’d recommend: • adding to the logs, • changing in the timing/order of the purchase() call, • or adjusting in the UI, to make it absolutely clear what is happening in their environment if the system sheet never appears? From my point of view, the implementation follows the StoreKit 2 documentation, everything works correctly in real tests and TestFlight, but the App Review environment behaves differently and I keep getting stuck on Guideline 2.1. I’d really appreciate any experience, tips (“we had exactly this and fixed it by X”), or even a recommendation to radically simplify the flow back to a minimal “button → directly purchase()” without any intermediate overlay. Thanks a lot for any help – this review loop has been going on for weeks and I’d really like to finally resolve it.
0
0
64
19h
In-app purchase changes waiting for review for 1 week
Hello Apple Developer Community, It's been almost a week since I submitted an update to an existing In-App Purchase and specifically a text change to the "Display Name" field. All my new localized strings are stuck in "Waiting for Review" status, and the IAP itself shows "Updates Pending Review" (although its status is "Approved"). Do I need to submit a new app version for these metadata changes to be reviewed, even though the IAP was previously approved? Thanks in advance for any insight.
2
0
119
1d
Request for Clarification on Repeated App Review Rejections – Kids Category
Hello App Review Team, I am writing to seek clarification regarding repeated review feedback received via App Store Connect (Resolution Center) for my app: App Name: Animal Sounds & Insects 90+ App ID: 6741077718 Team ID: 24MTF8NJ6Q Over the past two weeks, this app update has remained in review with multiple rejections referencing similar concerns, despite detailed responses and clarifications already provided in the Resolution Center. Unfortunately, I have not received follow-up responses or specific guidance there, which has prevented me from releasing even a minor update. To ensure clarity and avoid further delays, I am summarizing the key points below. Parental Gate (Guideline 1.3 – Kids Category) The review feedback indicates that the app may include links, commerce, or ad interactions without parental permission. I would like to clarify that the app implements a mandatory, non-dismissible parental gate, which is required before: Opening any external links Engaging in any form of commerce, including in-app purchases Interacting with any advertisements This parental gate cannot be bypassed or disabled and is triggered consistently across all applicable user flows. No child user can access links, purchases, or ad interactions without successfully completing the parental gate. If there is a specific screen, flow, or scenario where this behavior was interpreted differently during review, I would greatly appreciate precise details so I can verify and address it immediately. Advertising Experience (Guideline 4.0 – Design) The review also notes that users are required to view advertisements prior to using the app. I would like to clarify that the app does not require users to view advertisements before accessing its core functionality. Specifically: There are no forced ads No launch or entry interstitials No ads that block or gate access to the app’s main features Advertising within the app is passive and non-intrusive. This setup has been live for over one year, and no recent changes were introduced that would alter this behavior. Request for Guidance I fully respect and support the App Review Guidelines and am committed to complying with them. Given the repeated rejections and lack of actionable feedback so far, I kindly request: Clear and specific guidance on the exact screen, flow, or behavior being flagged Confirmation on whether the current parental gate implementation is being detected correctly during review My goal is to resolve any remaining concerns as quickly and accurately as possible so the review process can move forward. Thank you very much for your time and support. I appreciate the work of the App Review team and look forward to your guidance. Kind regards, Jiyan Aslan Developer, Animal Sounds & Insects 90+
1
0
59
1d
StoreKit 2: is there a way for an app to be informed in real time if an auto-renewable subscription is cancelled by the user?
Hello, In my iOS app, I have a customer center where the user can see some details about its current subscription. I display things like the billing period, the price, the introductory offer state, the renewal date if it's not cancelled or the expiration date if it's cancelled, etc. From this screen, the user can open the subscription management sheet. I want to detect if the user cancels the subscription from this sheet or from the App Store (when the app is running) so I can refresh the information displayed on my customer center. I checked the asynchronous sequences provided by StoreKit 2 like Transaction.updates or Product.SubscriptionInfo.Status.updates and tested with a Sandbox account on my physical device with the app debugged using Xcode. But I noticed these sequences don't emit when I cancel the subscription in Sandbox. Is this the expected behavior? Is there a way to observe in real time if a user cancels the subscription? I can still manually check when the sheet is dismissed but it's not ideal because I want to know even if the user cancel from outside of the app with the app running. Thank you, Axel
0
0
56
4d
IAP not available in new version
Hello, I have an app approved and available on the app store, which one IAP approved and available on the app store. I want to update the app, and I followed the instructions which are to click on the "+" and chose a new version number. I did that, but I have an issue. When selecting the build (which was tested on testflight), I cannot select the in-app purchase that was already on the last version and already approved. Also, i'm wondering, why is it mandatory to put new screenshots of the app for a new version, is there a way to pick the screenshots of the last version ? Thank you !
0
0
43
5d
Storekit product not loading in TestFlight testing
Hello everyone, I achieved my MacOs app and distributed for "App Store Connect" and I already have setup the Product In App Purchase in the App Store connect, and I even tested the purchase flow using the local .storekit file using the "Edit Schema". And now, when I remove the edit scema's storekit file and archieved the app and used the Internal testing and installed the app using Testflight, I see that the product is not showing, an empty product array is being returned and there is no option to purchase. I don't want to sumit the full app until I test the StoreKit integration in real test
1
0
181
6d
IAP not available on iOS but on Mac Catalyst (Invalid IAP ID)
After adding furhter IAP Items to my app, none of the products are available for purchase an more on iOS. But it works just fine on the Mac Catalyst app. Logging the request shows that all product IAP IDs are "invalid", even those who already were on sale. Any idea what this can be caused by? Ive already double checked the obvious things like the product IDs on appstoreconnect, bundle ID, tested on different devices, Test Flight etc... Has anyone experienced this already?
1
0
89
6d
Advanced Commerce (Sandbox) – Generic Product Still “Ready to Submit”
Hello, Our app is approved for the Advanced Commerce API and we are currently testing in the Sandbox environment only. We have created generic product identifiers and have already submitted them via the Advanced Commerce API Access form. However, the generic product status in App Store Connect is still “Ready to Submit.” For Sandbox testing, is this status expected, or do we need to submit an app build or the generic product for review before Advanced Commerce works correctly? Thank you.
2
0
120
6d
Free trial for one-time purchase: Is the $0 IAP workaround still recommended in 2026?
I have a $4 USD, one-time-purchase app (Dash Calc) and sales have been rough. In a crowded category, an paid-upfront app feels like a tough sell without a way to try it first. I’d like to offer a simple 7-day free trial followed by a single lifetime purchase, but App Store Connect still doesn’t officially support trials for paid apps. In Jan 2023, an App Store Commerce Engineer recommended the $0 non-consumable IAP + paid non-consumable IAP workaround: https://developer.apple.com/forums/thread/722874 I haven’t implemented it yet, but the subsequent discussion suggests the approach is overly complex. Handling refunds, reinstalls, activation timing, and purchase history requires non-obvious logic, and some developers report customer confusion and drop-off when presented with a $0 trial IAP. Has anything improved since 2023? Any new StoreKit APIs or App Store Connect changes that make this simpler or less error-prone? Is the $0 non-consumable IAP still the recommended approach in 2026? Any updated guidance for time-limited access on one-time purchases? I’m happy to use the workaround if it’s still the official path—I just want to confirm there isn’t a better option now.
2
0
211
6d
Billing Problem while subscription renewal.
Hello, I'm currently experiencing issues with IAP subscription setup. The following error appears: "Billing Problem, There was a problem with your subscription renewal. To resolve, turn on Allow Purchases & Renewals, or leave off to test failed in-app purchase attempts and subscription renewals." I'm testing with a sandbox account, and automatic subscription renewal is turned on in the sandbox settings. A notification screen appears at the OS level, and consequently, a DID_FAIL_TO_RENEW error occurs on our payment server. I cannot determine the cause at all, so I would appreciate your assistance in checking this issue.
21
15
1.5k
1w
Subscription Group Remains as Prepare for Submission
I'm ready to submit a new app with 3 subscription plans. But the status of the group remains 'Prepare for Submission.' And it won't change. All the individual subscription plans have the 'Ready to Submit' status. I have triple-checked individual plans to see if there is anything missing. No. Nothing is missing. There are no pending business contracts to review, either. I have even deleted an existing group and created a whole new subscription group. And I still end up with this prepare status. Am I the only one having this subscription group difficulty? One thing that I realize is that the status appears as 'Ready to Submit' on individual subscription plans. But their respective localization pair of display name and description get the Prepared status. The display name and the description fields are both filled for all three plans. What a nice, merry, merry Christmas. I don't know what else I can do to resolve this Prepared madness. I've been stuck for 4 hours.
2
1
189
1w
HELP! "In-App Purchases and Subscriptions" section unavailable.
I’m attempting to resubmit my app after a few unsuccessful review submissions (first time dealing with this process). Previously, when I resubmitted (the last two times), the “In-App Purchases and Subscriptions” section was available on the version page, and I could select the appropriate IAPs and subscriptions prior to submitting for review. However, on the resubmission attempt, this section is no longer visible anywhere on the version page! I’ve tried several troubleshooting steps, but it still won’t appear. Current status: All IAPs/subscriptions: Waiting for Review App version status: 1.0 Prepare for Submission It has been suggested that I "deleting all my subscriptions and [do] them over again..."; however, this workaround is completely unacceptable! While it may work for unreleased apps, it would be catastrophic for production apps. If this UI bug occurred during a subsequent update, deleting IAPs would permanently invalidate the original product IDs—which cannot be reused. This would break all existing customer purchases! Does anyone know how to get around this?????
5
1
263
1w
how to handle verification step for in-app purchase?
a UK-based user is having trouble completing an in-app purchase. after going through the typical purchase flow (tapping the button to trigger the in-app purchase sheet, completing Face ID) they see this verification sheet appear over my app and have to go to their banking app to approve the purchase. after approving the purchase from their banking app, they tap "Payment confirmed on Mobile App" to close the sheet, but then see an alert that suggests the result is .userCancelled. the purchase does not seem to have completed. the user reports not being charged (despite numerous attempts). plus, i have a "restore purchases" function on App init that would've restored a purchase if it existed. i have implemented what i think is a typical Storekit.purchase() method (again, the message the user sees is for the .userCancelled case): func purchase(productId: String) async -> (Bool, String?) { guard let product = subscriptionProducts.first(where: { $0.id == productId }) else { return (false, "Product not found") } do { let result = try await product.purchase() switch result { case .success(let verification): switch verification { case .verified(let transaction): await transaction.finish() hasSubscription = true return (true, nil) case .unverified: return (false, "Transaction verification failed") } case .userCancelled: return (false, "No worries, take your time. 😌") case .pending: return (false, "Purchase is pending") u/unknown default: return (false, "Error purchasing product. If this keeps happening, please contact [email].") } } catch { return (false, "Error purchasing product: \(error.localizedDescription)") } } has anyone dealt with this issue? i was seeing an unusually high number of .userCancelled purchase events from users outside the US, and i'm wondering if some of them were genuine purchase attempts that were blocked by this verification step. 😕
2
0
129
2w
"In-App Purchases and Subscriptions" missing, WHY????
I am trying to resubmit my app after failing a few times (first time doing this). Anyhow, when resubmitting the last 2 times, the "In-App Purchases and Subscriptions" section was always present on the version page so I could choose my IAP's and Subscriptions before submitting for review. Currently, I am trying to resubmit again, and the "In-App Purchases and Subscriptions" section is nowhere to be found and no matter what I try to do, it's just not showing up. Currently, all my IAP's and Subscriptions have a "Waiting for Review" status and my app status is "1.0 Prepare for Submission". Any ideas how I can get around this???
4
1
347
2w
App Store version stuck in Developer Rejected state, blocking IAP submission
Hello, We are facing an App Store Connect issue that is blocking our release and cannot be resolved from the developer side. Here is the exact situation: iOS app version 1.0 was initially approved together with its associated in-app purchases (auto-renewable subscriptions). We decided not to release that version and manually set version 1.0 to “Developer Rejected”. After that, we made minor optimization fixes and uploaded a new build to App Store Connect. When attempting to submit this new build, the In-App Purchases section no longer appears in the App Store version UI, so we are unable to associate the already approved IAPs with the submission. Additionally, the “New Version” option is not available, so we cannot create a new app version either. As a result, any submission is rejected with the same message stating that the app references in-app purchases that were not submitted for review, even though the IAPs themselves are already approved. We have contacted App Store Connect Support and explained the situation in App Review notes, but we continue to receive the same rejection without any way to resolve the issue through App Store Connect. This appears to be an App Store Connect tooling or version state issue related to a Developer Rejected app version, rather than an in-app purchase configuration problem. Could an Apple staff member please assist by forwarding this to App Store Connect Support or engineering so the affected app version state can be reset or removed, allowing us to associate the approved IAPs and proceed with submission? Thank you for your help.
2
1
195
2w
Stuck in a loop between Guideline 2.1 and 2.2: Reviewer refuses 5 mins of gameplay
Title: Stuck in a loop between Guideline 2.1 and 2.2: Reviewer refuses to play for 5 minutes. Body: I am an independent developer struggling with a repetitive rejection cycle for over a month. I need advice on how to handle a clear contradiction in the review process. The Loop: Initial Rejection (2.1): Reviewer said they couldn't locate the IAP. My Action: I added a prominent "IAP Test" button on the title screen to skip gameplay. Second Rejection (2.2): A different reviewer said the "IAP Test" button is a "Beta feature" and not appropriate for production. My Action: I removed the button and implemented a "Secret Command" (Easter Egg) that enables an "Assist Mode" (extending the timer to 5 minutes) so the reviewer can easily clear the game and reach the IAP screen in about 5-6 minutes. Latest Rejection (2.1): The reviewer now says: "While we appreciate you provide an instruction... we require a quicker way to access in-app purchases without spending significant time to play games." The Current Solution: In my next submission, I am implementing a "Direct Warp" feature. Tapping the title logo 7 times will trigger a secret transition directly to the Ending Scene (IAP screen). The Contradiction & Question: Apple forbids "Test Buttons" (2.2), but now they refuse to spend even 3-5 minutes of gameplay to reach the IAP. I am forced to implement a "Warp" feature just to satisfy the reviewer's convenience. Has anyone else experienced a reviewer refusing to perform 5-6 minutes of gameplay? Is a "Secret Warp" considered a "Beta feature" under 2.2, or is it an acceptable compromise for 2.1? I want to ensure I don't get rejected for 2.2 again.
5
0
269
2w