Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

Subscriptions

RSS for tag

Give users access to content, services, or premium features in your app on an ongoing basis with subscriptions, a type of in-app purchase.

Posts under Subscriptions tag

200 Posts
Sort by:

Post

Replies

Boosts

Views

Activity

Is External Payment Link Entitlement (ELAE) allowed for fitness apps?
Hi everyone, We're working on a fitness and wellness app that offers subscription-based content like workout videos, nutrition plans, and personal coaching. We've read the updated documentation on the External Link Account Entitlement (ELAE), which allows certain apps to include a link to an external website for account management and payments. However, based on what Apple describes as eligible “reader apps” (video streaming, books, audio, etc.), it's unclear whether fitness apps can apply for and use this entitlement. Our questions: Can a fitness app use the External Link Account Entitlement to link out to a web-based subscription page? If not currently supported, is there any plan to expand this to other categories like health & fitness? We are fully compliant with App Store IAP rules today, but we're exploring all legitimate options as we aim to provide a smooth and transparent experience across platforms (iOS, Android, and web). Any insights from the community or Apple team would be appreciated! Thanks, Onur Hazar
0
0
5
2h
How to make StoreKit config & App Store Server notifications work together?
Hi, Using StoreKit 2 with App Store Server notifications like so: User selects a purchase App calls Product.purchase() If successful, App Store notifies our backend with the transaction details, importantly with a UUID for the transaction ID. This works fine, but when I try to test contingent pricing via the handy StoreKit config Transaction Manager in Xcode by creating a PurchaseIntent if I then complete the purchase in the app the Transaction ID is sequential, (0 for the first, 1 for the second etc), which doesn't work for us as the backend might already have that ID stored so the purchase never completes. If I disable the config file it works fine, but then I can't use the Transaction Manager debug tool. Is there a way to override the ID of a custom transaction that's created via the StoreKit configuration? Thanks
0
0
2
2h
A functional link to the Terms of Use (EULA)...
Issue Description The submission did not include all the required information for apps offering auto-renewable subscriptions. The app's metadata is missing the following required information: A functional link to the Terms of Use (EULA). If you are using the standard Apple Terms of Use (EULA), include a link to the Terms of Use in the App Description. If you are using a custom EULA, add it in App Store Connect. Next Steps Update the metadata to include the information specified above. Resources Apps offering auto-renewable subscriptions must include all of the following required information in the binary: Title of auto-renewing subscription (this may be the same as the in-app purchase product name) Length of subscription Price of subscription, and price per unit if appropriate Functional links to the privacy policy and Terms of Use (EULA) The app metadata must also include functional links to the privacy policy in the Privacy Policy field in App Store Connect and the Terms of Use (EULA) in the App Description or EULA field in App Store Connect. Please let me know where I have to add this link (EULA). And by EULA, they mean a simple terms of use link, or is it something else?
0
0
19
1d
Subscription issue
My app / subscription gets rejected with the following: Guideline 2.1 - Performance - App Completeness We have returned your in-app purchase products to you as the required binary was not submitted. When you are ready to submit the binary, please resubmit the in-app purchase products with the binary. and Your first subscription must be submitted with a new app version. Create your subscription, then select it from the app’s In-App Purchases and Subscriptions section on the version page before submitting the version to App Review. Once your binary has been uploaded and your first subscription has been submitted for review, additional subscriptions can be submitted from the Subscriptions section. Learn More ...ive tried all kinds. I archive a new build, upload it, update the app information top show new build so it ties in...and still nothing works. it is incredible frustrating. Can anyone help please. Ive wasted days on this
1
0
56
4d
Offer Codes and saving the used Offer Code
I have setup offer codes and subscriptions for users to purchase, when a user signs up using an offer code outside of the app the offer code does not save into my database where the subscriptions are saved the transaction is successful and validated by store kit but I cant see that that user used an offer code - an example https://apps.apple.com/redeem/?ctx=offercodes&id=6744338284&code=ASKDOM I then setup an edge function in supabase to retrieve the data that store kit sends back and im not sure where to find the offer code as it still doesnt save is there an internal apple reference that they use as apposed to the users offer code i.e offer code askdomSA = P3050 for example how can Identify if an offer code was used thank you
0
0
13
6d
StoreKit not returning products after IAP localization was re-approved (Adapty: noProductIDsFound)
🔹 Description of the issue: My app uses Adapty to fetch and display in-app subscription products on a paywall. The system has worked perfectly until recently. After I edited the localizations of the subscriptions in App Store Connect, they were temporarily rejected. Since that moment, the products no longer show in the app. Even though I re-submitted the localizations and they were approved, StoreKit still does not return any products, and Adapty returns the error: less CopyEdit AdaptyError(code: 1000, message: "No products were found for provided product ids") 🔹 Error Message: noProductIDsFound — from Adapty SDK when attempting to load paywall products. 🔹 Steps to Reproduce: Open the Aida Nena app (App ID: 6737695739). Sign in with a test account or create a new one. Go to Profile → Subscription. The paywall will show but no products will appear. Logs show Adapty attempting to fetch product IDs but none are found in StoreKit. 🔹 What I’ve Tried: Re-activating the Adapty SDK. Forcing a cache reset via app reinstall. Re-checking App Store Connect: all subscriptions and localizations now show Approved (green). Waiting several hours in case of propagation. Verifying correct product identifiers are in use — they haven’t changed. 🔹 My Hypothesis: The StoreKit product metadata is still not properly refreshed after the rejection and re-approval of the localizations. This is preventing Adapty (and StoreKit) from returning the product data even though the products are live and approved. 🔹 Additional Info: SDK: @adapty/react-native + Adapty iOS SDK under the hood. This seems to be a known edge case among developers after a product's metadata/localization is changed and re-approved. Thanks, I appreciate any help.
1
0
48
1d
IAP Requirement Blocks 98% of Nigerian Users Due to Card Restrictions
Hi Apple Team, I'm a Nigerian developer building an app for local users, and I’m facing a major challenge: Due to CBN regulations, most Nigerian cards can’t make international payments and do not support Dynamic currency conversion, which means In-App Purchases (IAP) don’t work for most Nigerians. My app involves real-world services with external rewards and users would have to subscribe to be members, yet it’s unclear whether IAP is still mandatory. If I am forced to use IAP, most Nigerian users simply can’t pay, and I lose nearly all revenue. Questions: Can developers targeting Nigeria use local gateways like Paystack or Flutterwave instead of IAP ? Will Apple provide alternatives or guidance for regions where IAP is effectively unusable? This is a critical issue for many local developers. I’d appreciate any official clarification. Thanks, Joseph (Nigerian Developer)
0
0
36
1w
Subscription issue
I have created an app and for the final stage i added subscription feature. This works great in testflight, but not when i push out to external testers. I set up what i needed to in apple store connect (i must have done it right as it works in testflight), and i linked it to th emost recent version. Nothing I do seems to get the sub info to display and pull through to the app in the sub box when selected. No price and the usual stuff. I was told send for review. Failed the review and im working on that but something tell sme this is a glitch athat needs fixed on my account maybe. Can anyone help please
1
0
28
1w
Inconsistent behavior with transactionId and appAccountToken in iOS Sandbox purchases (StoreKit1 & StoreKit2)
Hi, I'm reaching out to report a recurring issue with in-app purchases on iOS that seems to be related to Apple’s transaction handling — not to third-party libraries. In my Flutter application, I use both StoreKit2 and StoreKit1 (for comparison) via different packages, including the official in_app_purchase package. However, in both cases, I’m experiencing unexpected reuse of transactionId and appTransactionId values, even when initiating fresh purchases with unique appAccountToken values. Problem Summary: Purchase Stream Returns Old Purchases When calling buyNonConsumable() with a new product, the purchase stream still returns data for a previously purchased product, despite clearing all Sandbox transactions and using a new applicationUserName for each attempt. Transaction IDs Reused Across Distinct Purchases Even when generating a new UUID for appAccountToken on each purchase, the returned appTransactionId and transactionId are reused — this breaks our server-side logic, which expects these fields to uniquely identify purchases and users. Example Logs: // First purchase { "appAccountToken": "2d5a0880-f68e-44a7-a414-f51204e63904", "appTransactionId": "704464472748013865", "transactionId": "2000000928154716" } // Second purchase (different user context) { "appAccountToken": "2d5a0880-f68e-44a7-a414-f51204e63904", "appTransactionId": "704464472748013865", "transactionId": "2000000928429780" } Even when using a different productId, the appTransactionId stays the same. When using StoreKit1, the productId updates properly, but the transactionId still matches the previous one. This behavior also affects App Store Server Notifications (V2): we have observed notifications tied to appAccountTokens from completely different user accounts (based on internal logs), sometimes delayed by days or weeks. I’ve prepared a reproducible example using the official Flutter in_app_purchase sample with minimal changes — you can find it here: Github gist The code is almost identical to the package example. I only added UUID generation for applicationUserName in _getToken(). In the actual app (not in this example), I retrieve the token from an API. Additional Observations from the Community: We’ve also found similar issues reported in other frameworks and languages. For instance, a developer using react-native-iap observed that App Store Server Notifications in TestFlight were tied to previously deleted users, even after signing up with a new user account and generating a new appAccountToken. Details here: User A deleted → User B signs up → receives upgrade event with User A’s token Notification uses appAccountToken from old account, not the new one This strengthens the suspicion that the issue may be related to how Apple associates transactions with Apple IDs in test environments. Questions: Is it expected for transactionId or appTransactionId to persist across purchases within the same Apple ID, even for different user contexts (e.g., separate logins in the same app)? Is there any official recommendation for avoiding this kind of data reuse in Sandbox or TestFlight environments? Should I expect appAccountToken in server notifications to always match the latest value provided during the purchase? Thank you in advance for your assistance. I would appreciate any clarification or advice regarding this issue, as it impacts production logic that relies on these identifiers being unique and consistent.
0
0
52
1w
Asked to modify Subscription name/description but they are locked In Review
I am stuck. Apple asked me to modify the Name/Description of one of my Subscriptions. But the subscription is "In Review" and everything (including the save button) is disabled. It's lierally impossible for me to update the Name/Description like they are asking for. I have tried rejecting my submission but they are still locked. I have asked Apple Review for help - like changing the status so that I can edit them but they won't. I can't get out of review until I modify the Name/Description of a Subscription but I can't update the Name/Description of a Subscription until I'm out of review. HELP!! 😭
1
0
86
1w
Unable to test in-app purchase integration
We are trying to implement / test in-app purchase for our subscription purchase in the app. We have done all the steps listed in the documentation on apple's website; and Our subscription plan is sitting in 'Ready to Submit' state. However, we are getting an empty response from, final response = await _iap.queryProductDetails({'com.company.xyz.basic1m'}); debugPrint(" Check: ${response.toString()}"); debugPrint("❌ Responses: ${response.productDetails.map((ProductDetailsResponse)=>ProductDetailsResponse.toString()).toList()}"); debugPrint("❌ Responses: ${response.productDetails.length}"); if (response.notFoundIDs.isNotEmpty) { debugPrint("❌ Not found: ${response.notFoundIDs}"); } else if (response.productDetails.isNotEmpty) { debugPrint("✅ Product loaded: ${response.productDetails.first.title}"); } The response we get is, flutter: Check: Instance of 'ProductDetailsResponse' flutter: ❌ Responses: [] flutter: ❌ Responses: 0 flutter: ❌ Not found: [com.company.xyz.basic1m] Note: We are testing with a real device iphone 13 mini via Xcode. We tried to test using, ''com.apple.test.Subscription1.monthly'', as instructed but we have not been successful with that. And seems like (based on online search), it doesn't work all the time. We also searched online for a solution, and some of the forums suggest that we have to submit the app for review when adding subscription for the first time. It doesn't mention the same that in the apple documentation. It confusing. Help and guidance in this regard would be really appreciated.
1
0
91
1w
Getting null data from App Store Server Notification
Hello Apple Support Team, We are using auto-renew plans in our app We have set the webhook URL in our App Store Connect account to get the Store server notification to get the auto renew data for an user The issue is when a user purchases any auto-renew plan at the auto-renew time, we are getting null data from the Apple side. We have printed the log's data to check what data are coming from the Apple webhook. we have attached our logs data please check it and let me know what can we do to resolve this
1
0
46
1w
Generic Apple Billing Descriptor
Hello, why Apple use a generic billing descriptor for charges (e.g., "APPLE.COM/BILL", "APL*APPLE"), which does not include the app name? As a result, unexperienced users associate any Apple charge on their bank statement with our app, even if it's a charge from another app or service they’ve used. This is leading to: Confusion and mistrust from our users An increase in wrongful refund requests Support burden for an issue outside of our control We kindly request Apple to consider including the app name in the billing descriptor (like Google Play does). We understand Apple manages all billing, but the current setup causes confusion that unfairly impacts our app’s reputation and support load. Thank you
0
0
62
1w
Receipt Validation Failing with Status 21002 in Sandbox – Valid Receipt from purchaseUpdatedListener.
Hi Apple Developer Support, We're currently implementing auto-renewable subscriptions in a React Native app using the react-native-iap library. The subscription purchases are working as expected in Sandbox. We receive the transaction and purchaseUpdatedListener gives us a valid-looking transactionReceipt However, when we attempt to validate this receipt with Apple's servers, the response consistently returns status code 21002, indicating that the receipt data is either malformed or missing. We’ve confirmed the receipt is well-formed, properly passed as received, and well above the minimum size expected. The shared secret is correctly configured and matches the subscription group. We're using the correct sandbox endpoint and ensuring no modification is done to the receipt before validation. Despite this, validation fails every time. We are looking for guidance or clarification on what might cause this status, especially when the receipt is coming directly from the system after a successful test purchase. const purchaseUpdateSub = purchaseUpdatedListener(async (purchase) => { console.log("🛒 Purchase Updated:", purchase); const receipt = purchase.transactionReceipt; if (!receipt) { Alert.alert("Error", "No receipt found."); setLoading(false); return; } }); the response is: { "status": 21002 } Any guidance on why this might be happening would be appreciated. Thanks!
1
0
27
1w
manage subscription visibility and availability in App Store Connect
Hi all, We currently offer 12 auto-renewable subscription plans on the App Store. We’re looking to remove (delist) a few of these subscriptions so they are no longer visible or available for purchase by new users — but we want to ensure existing subscribers can continue renewing without any issues. To clarify: We are not changing the subscription type or pricing. There are no in-app code changes involved. This is purely about managing subscription visibility and availability in App Store Connect. Can anyone confirm: Is it possible to hide specific subscription products from new users while keeping them active for current subscribers? What are the exact steps in App Store Connect to do this? Thanks in advance for the guidance!
0
0
48
2w
How can I integrate Apple Pay subscription products?
We have used the ApplePayRecurringRequest parameter required for Apple Pay subscriptions, but during testing the payment, the Apple Pay payment page shown to the user remains the same as the one-time payment page, without any subscription information. Could you please check if there is an issue with our parameters or if there is an issue with the merchantIdentifier being used? Here is the ApplePayRequestData that we are using. { "supportedMethods": "https://apple.com/apple-pay", "data": { "version": 3, "merchantIdentifier": "***", "merchantCapabilities": [ "supports3DS", "supportsCredit", "supportsDebit" ], "supportedNetworks": [ "visa", "masterCard" ], "countryCode": "US", "recurringPaymentRequest": { "paymentDescription": "A description of the recurring payment to display to the user in the payment sheet.", "regularBilling": { "label": "Recurring", "amount": "4.99", "paymentTiming": "recurring", "recurringPaymentStartDate": "2025-06-02T16:00:00.000Z" }, "trialBilling": { "label": "7 Day Trial", "amount": "0.00", "paymentTiming": "recurring", "recurringPaymentEndDate": "2025-06-02T16:00:00.000Z" }, "billingAgreement": "A localized billing agreement displayed to the user in the payment sheet prior to the payment authorization.", "managementURL": "https://applepaydemo.apple.com", "tokenNotificationURL": "https://applepaydemo.apple.com" }, "additionalLineItems": [ { "label": "7 Day Trial", "amount": "0.00", "paymentTiming": "recurring", "recurringPaymentEndDate": "2025-06-02T16:00:00.000Z" }, { "label": "Recurring", "amount": "4.99", "paymentTiming": "recurring", "recurringPaymentStartDate": "2025-06-02T16:00:00.000Z" } ] }
0
0
25
2w
Privacy Policy and Terms of Use Links in Binary
Hello, Can anyone help me with the below? I've been sent the below bolded, italicized message three time in a row now with no further explanation. _**Please note that links are required to be included in both of the metadata and the binary. We noticed that your app binary is still missing: A functional link to your privacy policy A functional link to your Terms of Use This information is required for apps which include auto-renewable subscriptions.**_ My reviewer initially instructed me to include my terms of use link in my app description (as my privacy policy was already displayed). I followed that instruction and that subsequently started the persistence of the bolded, italicized message. For full context, the links are in my app description and on my paywall inside of the app itself. I need help and clarity on what I'm missing so I can get the app approved. Also, if anyone knows any alternative ways of allowing users to purchase a subscription within the app that Apple allows - I would appreciate that information, as it seems this process is too complicated for me.
0
1
70
2w
Unable to add banking information
Can't add banking info in App Store Connect - getting 400 error when searching for any bank in any country. Steps: App Store Connect → Banking setup Search any bank, any country "We could not find banks matching criteria" + 400 error in dev tools Tried: Multiple browsers/incognito Different countries Clear cache This is blocking my Paid Apps Agreement (shows "Pending User Info") and my app review for in-app purchases. Anyone else having this issue? Any workarounds? Thanks!
4
3
110
2w